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

Исходный зашифрованный текст, затем список номеров до 26

Я не знаю, почему это происходит, не могли бы вы помочь мне?

П.С .: Расшифрованный текст "Приходи рассвет"

Извините, если это плохой вопрос, я впервые это делаю.

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()
0
mrhodgehag 21 Окт 2019 в 02:47

1 ответ

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

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

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

before = file1.read()

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

for symbol in before:
0
Barmar 21 Окт 2019 в 03:01
Привет @mrhodgehag. Добро пожаловать в stackoverflow. Пожалуйста, подумайте о том, чтобы нажать кнопку «принять», если вы считаете, что это правильный ответ.
 – 
BedirYilmaz
21 Окт 2019 в 04:27