python - 凯撒密码的蛮力方法对我不起作用
问题描述
这段代码的输出是:
原始加密文本然后是最多 26 个数字的列表
我不知道为什么会这样,你能帮我吗?
PS:破译的文字是“黎明到来”
如果这是一个不好的问题,我很抱歉,这是我第一次这样做。
MAX_KEY_SIZE = 26
file1 = open(r"encryped.txt", "r")
before = file1.read
key = 0
def gettranslatedmessage(key, before):
translated = ''
for symbol in before():
if symbol.isalpha():
num = ord(symbol)
num += key
if symbol.isupper():
if num > ord('Z'):
num -= 26
elif num < ord('A'):
num += 26
elif symbol.islower():
if num > ord('z'):
num -= 26
elif num < ord('a'):
num+= 26
translated += chr(num)
else:
translated += symbol
return translated
for key in range(1, MAX_KEY_SIZE + 1):
print(key, gettranslatedmessage(key, before))
file1.close()
解决方案
在循环的第一次迭代中,您读取了整个文件。您翻译它key == 1
并打印该翻译。
在所有剩余的迭代中,文件中没有任何内容要读取,因此before()
返回一个空字符串并且for symbol in before():
不执行任何操作。该调用gettranslatedmessage()
返回一个空translated
字符串,并print(key, gettranslatedmessage(key, before))
打印该空字符串后跟的键。
您应该将文件读入一次字符串,然后将该字符串传递给函数,而不是传递函数。将分配更改为:
before = file1.read()
并将循环更改为:
for symbol in before: