2012-06-01 52 views
0
def input(): 
    h = eval(input("Enter hours worked: \n")) 
    return h 

def main(): 
    hours = input() 
    print(hours) 
main() 

正如你所看到的,我是Python新手。我一直得到:“TypeError:input()只需要1个参数(给出0)。”任何帮助/解释将不胜感激 - 非常感谢你!Python函数内返回eval值?

+1

输入是一个Python中的方法,它需要1个参数。尝试为你的函数使用另一个名字'def input()' – Bob

+0

谢谢islandmyth - 就是这样。我重命名了这个函数,一切都很好。 – user1429845

+0

不客气。欢迎来到stackoverflow – Bob

回答

1

input()是内建Python函数的名称。

在你的代码中,你重载它,这绝对不是一个好主意。尝试命名你的函数别的东西:

def get_hours(): 
    h = eval(input("Enter hours worked: \n")) 
    return h 

def main(): 
    hours = get_hours() 
    print(hours) 

main() 
+1

这取决于Python版本,但OP似乎使用print作为函数,这意味着Py3。但是,更重要的是,这并不能解释OP获得的特定错误。 – lvc

2

当你以后调用input功能,可以定义一个在接受零个参数,然后第一线称为input功能(我假设你想要它调用自带的一个与Python并可能意外覆盖),你传递它一个变量。

# don't try to override the buil-in function 
def input_custom(): 
    h = eval(input("Enter hours worked: \n")) 
    return h 

def main(): 
    hours = input_custom() 
    print(hours) 
main() 
1

因为输入是python中的方法,所以用不同的名称更改输入函数。

def inputx(): 
    h = eval(input("Enter hours worked: \n")) 
    return h 

def main(): 
    hours = inputx() 
    print(hours) 

main() 
1

我不能复制你的确切的错误 - 而不是我得到:

TypeError: input() takes no arguments (1 given) 

但是,你的错误可能是由同样的事情引起的 - 当你的名字你的功能input,你的影子内置-in input:尽管你不期望提示,但Python无法看到两者。如果你的名字你myinput相反,Python可以看出其中的差别:

def myinput(): 
    h = eval(input("Enter hours worked: \n")) 
    return h 

def main(): 
    hours = myinput() 
    print(hours) 
main() 
0

其他答案已经覆盖了很多。我只是想增加一些想法吧。所有的函数名输入 首先是所以首先

def my_input(): 
    return input("Enter hours worked: ") 
print my_input() 

这应该足以覆盖蟒蛇内置函数

理念:

现在,如果你正在使用Python的2.X版本那么就没有必要EVAL。

input():默认情况下Python会评估输入表达式,如果它被python识别的话。

的raw_input():这里,输入取为需要被评估的字符串。

Python3.x的情况下:

输入()行为就像的raw_input()的raw_input()被除去。

所以,你的代码应该是

def my_input(): 
    return float(input("Enter hours worked: ")) 
print(my_input()) 

它是更安全,更好的方式来获取输入,并还告诉我们,为什么不建议EVAL。

You don't know what's gonna come through that door.

谢谢。