python - 从另一个函数返回“文件名”后未定义 NameErorr 名称“文件名”
问题描述
嗨,我正在使用 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
函数的范围内调用的变量。您需要将返回的值显式分配给变量:
f_name = getInputFile()
message_decrypted = decrypt(f_name)
推荐阅读
- python - Python -m spacy download en_core_web_sm 使用 spacy 3.0.6 失败
- tensorflow2.0 - 在 TensorFlow 2 中,如何在优化损失函数时将样本合二为一?
- flutter - 如何为飞镖中的所有用户计算具有单个时区的倒数计时器?
- mongodb - 如何在spring data mongodb中仅获取数组字段的单个嵌入文档?
- java - api和jar文件有什么区别?
- reactjs - Switch 语句引发 - React 限制渲染次数以防止无限循环
- javascript - 如何过滤firestore发送的数据
- python - 如何在命令“resign”的触发器上为命令“apply”设置冷却时间?
- python-3.x - Qtablewidget GUI PYTHON 中的倒数计时器
- flutter - 我可以使用 Flutter WEB 访问和更改 ftp 服务器上的文件吗?