【问题标题】:NameErorr name 'filename' not defined after returning 'filename' from another function从另一个函数返回“文件名”后未定义 NameErorr 名称“文件名”
【发布时间】:2020-01-20 00:23:26
【问题描述】:

您好,我正在使用 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()

当我尝试运行解密函数时,我从倒数第四行收到此错误消息。我认为这一切都很好,因为我从 getInputFile 函数返回了“文件名”值,但我猜不是。有人可以帮我弄清楚为什么这不起作用以及我应该如何解决这个问题?

感谢您的宝贵时间!

【问题讨论】:

  • 为什么要定义嵌套函数?此外,变量和函数名称应遵循 `lower_case_with_underscores' 样式。

标签: python python-3.x return-value nameerror caesar-cipher


【解决方案1】:

从函数返回一个名为filename的变量不会在调用函数的范围内自动创建一个名为filename的变量。您需要将返回的值显式分配给一个变量:

f_name = getInputFile()
message_decrypted = decrypt(f_name)

【讨论】:

    猜你喜欢
    • 2019-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 2018-09-03
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多