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

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

如您所知,我是 Python 新手。我不断收到:“TypeError:input() 正好需要 1 个参数(给定 0)。” 任何帮助/解释将不胜感激 - 非常感谢大家!

4

5 回答 5

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()
于 2012-06-01T04:25:28.283 回答
1

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

在您的代码中,您覆盖它,这绝对不是一个好主意。尝试将您的函数命名为其他名称:

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

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

main()
于 2012-06-01T04:20:18.357 回答
1

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

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

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

 main()
于 2012-06-01T04:27:23.910 回答
1

我无法复制您的确切错误-相反,我得到:

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

但是,您的错误很可能是由同一件事引起的 - 当您命名您的函数时input,您会隐藏内置input:Python 无法同时看到两者,即使您不希望出现提示。如果您myinput改用自己的名称,Python 可以区分:

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

def main():
    hours = myinput()
    print(hours)  
main()
于 2012-06-01T04:28:10.083 回答
0

其他答案涵盖了很多..我只想添加一些想法。首先,您的函数名称输入覆盖了 python 内置函数

所以首先

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

这应该足够了。

概念:

现在,如果您使用的是Python 2.X版本,则不需要 eval。

input():如果输入表达式被 python 识别,Python 默认会评估输入表达式。

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

Python3.x 的情况下:

input()的行为类似于raw_input()并且raw_input()被删除。

所以你的代码应该是

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

这是一种更安全、更好的输入方式,也告诉我们为什么不推荐使用 eval。

你不知道什么会从那扇门进来。

谢谢你。

于 2016-08-15T20:24:36.157 回答