NameErorr name 'filename' not defined after returning 'filename' from another function
NameErorr name 'filename' not defined after returning 'filename' from another function
您好,我正在用 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 函数返回了 'filename' 值,但我想不是。有人可以帮我弄清楚为什么这不起作用以及我应该如何解决这个问题?
感谢您的宝贵时间!
从函数返回一个名为 filename
的变量不会在函数调用的范围内自动创建一个名为 filename
的变量。您需要明确地将返回值赋给一个变量:
f_name = getInputFile()
message_decrypted = decrypt(f_name)
您好,我正在用 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 函数返回了 'filename' 值,但我想不是。有人可以帮我弄清楚为什么这不起作用以及我应该如何解决这个问题?
感谢您的宝贵时间!
从函数返回一个名为 filename
的变量不会在函数调用的范围内自动创建一个名为 filename
的变量。您需要明确地将返回值赋给一个变量:
f_name = getInputFile()
message_decrypted = decrypt(f_name)