使用输入语句作为Python中函数的参数

时间:2014-07-21 21:15:35

标签: python python-3.x parameters user-input

我试图将某些输入语句的结果用作函数中的参数。我已经尝试将输入语句放在函数之前,然后再调用函数,如下所示:

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,但在我将参数提供给输入语句提示后它也没有打印任何东西。

2 个答案:

答案 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指出的那样,你的代码的错误处理可能会有所改进,所以你去; - )