福尔摩斯 argparse 模块任务

如何解决福尔摩斯 argparse 模块任务

我接到的任务似乎超出了我目前使用 Python 的能力。尽管如此,我确实想解决它,但不知道从哪里开始。特别是这里的这一点:“编写一个程序,将文件作为参数,读取它,解码它,并打印解码的文本”。非常感谢任何帮助!

任务描述:

莫里亚蒂教授又来捣乱了!玛丽设法获得了一个包含他的计划的文件,但它已被编码。在她解码之前,Moriarty 已将她劫为人质,Watson 博士前去营救。

Holmes 预料到了这一点,并在 Stackoverflow 上找到了一个简单的 Caesar 密码解码器来自己处理:

def decode_Caesar_cipher(s,n):
    alpha = " ABCDEFGHIJKLMnopQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',.?!"
    s = s.strip()
    text = ''
    for c in s:
        text += alpha[(alpha.index(c) + n) % len(alpha)]
    print('Decoded text: "' + text + '"')

然而,福尔摩斯不知道如何处理文件,所以你必须帮助他!您可以在下方找到 Mary 从 Moriarty 的笔记本电脑中获取文件。下载它,并使用 Holmes 找到的代码,编写一个程序,将文件作为参数,读取它,解码它,并打印解码的文本。为此,请使用您的 IDE。得到答案后,将其复制并粘贴到答案字段中。

如果您的参数 --file 存储在变量 args 中,您可以通过以下方式读取您传递给脚本的文件

filename = args.file
opened_file = open(filename)
encoded_text = opened_file.read()  # read the file into a string
opened_file.close()  # always close the files you've opened

提示 1:最初 Holmes 从 Mary 那里得到的文件名为“13.txt”,因此他预设这可能是偏移量 n。检查这个理论,但请记住,解码偏移量必须带负号。

提示 2:设置命令行以快速循环浏览许多 key/'n' 参数。找到解码后的消息后,将其粘贴到不带引号的答案字段中。

提示 3:你不需要使用 argsparser,主要问题是找到“n”。

数据集可以从this link

下载

解决方法

您需要的是 argparse Python 标准库。它可以在您的情况下使用如下:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--file",required=True,help="Path to file")
args = parser.parse_args()

然后在您的例如main 函数,您可以按如下方式访问参数:

file = args.file

你会这样调用程序:

python your_program.py --file filename/or/path/to/file

在 Python 中,我建议在文件所在的同一目录(文件夹)中运行程序。 现在您在一个变量中拥有文件的名称,并且可以按照您喜欢的方式加载它。


编辑: 所以最后,你的程序结构可能是这样的:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--file",help="Path to file")
args = parser.parse_args()

def read_file(filename):
    opened_file = open(filename)
    encoded_text = opened_file.read()  # read the file into a string
    opened_file.close()  # always close the files you've opened
    return encoded_text

def decode_Caesar_cipher(s,n):
    alpha = " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',.?!"
    s = s.strip()
    text = ''
    for c in s:
        text += alpha[(alpha.index(c) + n) % len(alpha)]
    print('Decoded text: "' + text + '"')

def main():
    filename = args.file
    encoded_text = read_file(filename)
    # Note that before calling decode_Caesar_cipher,you need to determine 'n',# which seems to be the main task for this programming challenge.
    # This can be achieved with e.g. a for loop
    for n in range(1,30):
        print("n =",n,end=",")
        decode_Caesar_cipher(encoded_text,n)
        print("n = -",sep="",-n)

if __name__=="__main__":
    main()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?