首页 > 解决方案 > 凯撒密码的蛮力方法对我不起作用

问题描述

这段代码的输出是:

原始加密文本然后是最多 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()

标签: pythoncaesar-cipher

解决方案


在循环的第一次迭代中,您读取了整个文件。您翻译它key == 1并打印该翻译。

在所有剩余的迭代中,文件中没有任何内容要读取,因此before()返回一个空字符串并且for symbol in before():不执行任何操作。该调用gettranslatedmessage()返回一个空translated字符串,并print(key, gettranslatedmessage(key, before))打印该空字符串后跟的键。

您应该将文件读入一次字符串,然后将该字符串传递给函数,而不是传递函数。将分配更改为:

before = file1.read()

并将循环更改为:

for symbol in before:

推荐阅读