Python错误:'int'对象不可迭代

时间:2013-10-09 19:05:45

标签: python python-3.x

我正在尝试为我的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

4 个答案:

答案 0 :(得分:8)

问题在于,当您致电main时,您尚未定义sum

那么,为什么这不是NameError?因为已经有一个名为sum的内置版,所以你正在调用那个。并且该函数需要可迭代的值,而不是两个单独的值。 (如果您不知道迭代是什么:它可以在for循环中循环,就像列表一样。)因此,它会查看您的第一个参数 - 随机整数 - 并尝试使用它作为一个可迭代的。这就是你得到这个错误的原因。

如果您将定义移到调用main()之上,那么您的代码就可以正常运行。但是,它仍然是混乱的根源。这是为什么最好避免让你的函数与任何内置函数同名。

作为旁注,您定义的功能已经存在,operator.addadd和朋友隐藏在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>