我正在尝试使用某些输入语句的结果作为函数中的参数。我尝试将输入语句放在函数之前,然后调用该函数,如下所示:
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:赋值前引用的局部变量“numkey”
。如果我只是将输入语句放在函数之前,它们会提示我输入,但它们不会认识到输入应该用作函数的参数。
非常感谢您的帮助!
编辑:新代码:
这是我目前正在使用的代码:
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,但在我将参数提供给输入语句提示后,它也不会打印任何内容。
最佳答案
如果您在 Python 3.x 上运行此程序,input()
不会像 Python 2 版本那样 eval()
用户的响应 - 它将作为字符串返回(它的行为基本上类似于 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)
请参阅 exception handling 上的文档有关 except
语句的详细信息以及 if
statement 上的文档有关 elif
子句的详细信息。它们与您的问题并不严格相关,但正如 @TheSoundDefense 指出的那样,代码的错误处理可以稍微改进,所以就这样吧;-)
关于python - 在 Python 函数中使用输入语句作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24874916/