我试图将某些输入语句的结果用作函数中的参数。我已经尝试将输入语句放在函数之前,然后再调用函数,如下所示:
s=input("Enter the message:")
raw_key=input("Enter the raw key for columnar transposition:")
method=input("Enter the key generation method:")
def encryptColumnar(s,raw_key,method):
if method==1:
numkey=key1(raw_key)
if method==2:
numkey=key2(raw_key)
return(columnar(s,numkey))
encryptColumnar(s,raw_key,method)
但它只是给了我错误UnboundLocalError: local variable 'numkey' referenced before assignment
。如果我只是将输入语句放在函数之前,它们会提示我输入,但是他们不会认识到输入应该被用作函数的参数。
非常感谢您的帮助!
编辑:新代码:
这是我目前使用的代码:
s=input("Enter the message:")
raw_key=input("Enter the raw key for columnar transposition:")
method=input("Enter the key generation method:")
def encryptColumnar(s,raw_key,method):
if method=='1':
numkey=key1(raw_key)
if method=='2':
numkey=key2(raw_key)
return(columnar(s,numkey))
encryptColumnar(s,raw_key,method)
它不再给我UnboundLocalError,但在我将参数提供给输入语句提示后它也没有打印任何东西。
答案 0 :(得分:1)
问题是numkey
不能保证在encryptColumnar
结束时设置method
。如果numkey=
为3,或者除了1或2之外的任何内容,则没有return
语句被执行,因此它从未被分配。然后,当您到达else
时,您会收到错误,因为您正在尝试返回从未分配过的变量。至少,您应该输入numkey
语句,以确保涵盖{{1}}。
答案 1 :(得分:1)
如果你在Python 3.x上运行它,input()
不会eval()
用户的响应,就像Python 2版本那样 - 它会将它作为一个字符串返回(它的行为基本上像Python一样) 2的raw_input
)。因此,您的条件method == 1
等永远不会得到满足,导致numkey
未定义。
所以你必须选择:
int
并对整数进行测试:import sys
method = input("Enter the key generation method:")
try:
method = int(method)
except ValueError:
print("You need to enter an integer!")
sys.exit(1)
# ...
if method == 1:
# ...
import sys
method = input("Enter the key generation method:")
if method == '1':
# ...
elif method == '2':
# ...
else:
print("Unknown method!")
sys.exit(1)
有关except
语句的详细信息,请参阅exception handling上的文档,有关elif
子句的详细信息,请参阅if
statement上的文档。它们与你的问题并不严格相关,但正如@TheSoundDefense指出的那样,你的代码的错误处理可能会有所改进,所以你去; - )