Метод грубой силы на шифре Цезаря не работает для меня - PullRequest
0 голосов
/ 21 октября 2019

Вывод этого кода:

Исходный зашифрованный текст, затем список чисел до 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()

1 Ответ

0 голосов
/ 21 октября 2019

На первой итерации цикла вы читаете весь файл. Вы переводите его с помощью key == 1 и печатаете этот перевод.

На всех оставшихся итерациях в файле не осталось ничего для чтения, поэтому before() возвращает пустую строку, а for symbol in before(): ничего не делает,Этот вызов gettranslatedmessage() возвращает пустую строку translated, а print(key, gettranslatedmessage(key, before)) печатает ключ, за которым следует пустая строка.

Вы должны прочитать файл один раз в строку и передать эту строку в функциювместо передачи функции. Измените присвоение на:

before = file1.read()

и измените цикл на:

for symbol in before:
...