我正在尝试为我的Python类编写一个数学测验程序,但我一直在使用sum()
函数出错。错误是:
'int' object is not iterable.
这是我的代码:
import random
import math
def main():
print('This is a simple math quiz that will test your addition skills.\n')
print('\tGood Luck!\n\n')
# Get two random integers
num1 = random.randint(1, 1001)
num2 = random.randint(1, 1001)
print('What is the sum of ', num1, ' and ', num2, '?')
student_answer = int(input('Enter your answer, then press Enter: '))
answer = sum(num1, num2)
if student_answer == answer:
print('Congratulations! You got it right!')
else:
print('Sorry, your answer is not correct!')
print(answer)
main()
def sum(number1, number2):
return number1 + number2
错误:
Traceback (most recent call last):
File "C:\Users\Terrence\Desktop\Python Assignments\Chapter 6\Math Quiz.py", line 29, in <module>
main()
File "C:\Users\Terrence\Desktop\Python Assignments\Chapter 6\Math Quiz.py", line 20, in main
answer = sum(num1, num2)
TypeError: 'int' object is not iterable
答案 0 :(得分:8)
问题在于,当您致电main
时,您尚未定义sum
。
那么,为什么这不是NameError
?因为已经有一个名为sum
的内置版,所以你正在调用那个。并且该函数需要可迭代的值,而不是两个单独的值。 (如果您不知道迭代是什么:它可以在for
循环中循环,就像列表一样。)因此,它会查看您的第一个参数 - 随机整数 - 并尝试使用它作为一个可迭代的。这就是你得到这个错误的原因。
如果您将定义移到调用main()
之上,那么您的代码就可以正常运行。但是,它仍然是混乱的根源。这是为什么最好避免让你的函数与任何内置函数同名。
作为旁注,您定义的功能已经存在,operator.add
。 add
和朋友隐藏在operator
模块中的原因是你通常不需要它们。如果您只想添加两个数字,a + b
总是比sum(a, b)
更清晰。当你需要传递该函数时,你只需要它作为一个单独的函数(例如,用作map
的参数)。
答案 1 :(得分:1)
sum
已经是内置函数了!
用法:sum(list)
>>> sum([1,5])
>>> 6
在您的代码中:
answer = sum([num1, num2])
答案 2 :(得分:0)
将sum函数放在main函数的顶部。
例如:
def sum(number1, number2):
...
def main():
...
然后调用main函数。
答案 3 :(得分:0)
问题是int在函数的sum build中不能是迭代器,你需要把它作为一个列表:
<script>
function first (callback){
alert ("I am first");
callback();
}
function second (){
alert ("I am second");
}
first(second());
</script>