NameErorr name 'filename' не определено после возврата 'filename' из другой функции - PullRequest
0 голосов
/ 20 января 2020

Привет, я писал код для простой программы расшифровки шифра Цезаря с python 3, и я получил это сообщение об ошибке, когда пытался запустить программу. Вот код, и у меня есть описание ситуации после кода.

def main():


        def getInputFile():
                """get the name of the file user wants to decrypt and check 
                if its extension is txt or not and return the file name"""
                filename = input('Enter the input file name: ')

                while not filename.endswith('.txt'): 
                        filename = input('Invalid file name extension. Please re-enter the input file name: ')

                return filename

        def decrypt(filename):
                """open the secret message and decrypt the caesar cipher and 
                return original message"""
                readSecretMessage = open(filename, "r")
                lines = readSecretMessage.readline()
                cipher_key = int(lines[0])
                secret_message = lines[1]
                decrypted = ""

                for letter in secret_message:
                        if letter in alphabet:
                                # decrypting
                                letter_index = (alphabet.find(letter) - cipher_key) % 26
                                decrypted = decrypted + alphabet[letter_index]
                        else:
                                decrypted = decrypted + letter

                return decrypted

        getInputFile()
        message_decrypted = decrypt(filename)
        print('The decrypted message is: ')
        print(message_decrypted)


main()

И я получаю это сообщение об ошибке из четвертой последней строки, когда пытаюсь запустить функцию расшифровки. Я думал, что это все хорошо, так как я возвратил значение 'filename' из функции getInputFile, но, думаю, нет. Может кто-нибудь помочь мне понять, почему это не работает и как мне это исправить?

Спасибо за ваше время!

1 Ответ

1 голос
/ 20 января 2020

Возвращение переменной с именем filename из функции не создает автоматически переменную с именем filename в области, в которой была вызвана функция. Вам необходимо явно присвоить возвращаемое значение переменной:

f_name = getInputFile()
message_decrypted = decrypt(f_name)
...