-2

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

4 回答 4

8

问题是,在你打电话的时候main,你还没有定义sum.

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

如果您将定义移到对 的调用之上main(),您的代码将起作用。但是,它仍然会成为混乱的根源。这是最好避免为您的函数提供与任何内置函数相同的名称的原因之一。

作为旁注,您定义的函数已经存在,如operator.add. add隐藏在模块中的原因和朋友是operator您通常不需要它们。如果你只想添加两个数字,a + b总是比sum(a, b). 当您需要传递该函数时(例如,用作 的参数),您只需要将它作为一个单独的函数map

于 2013-10-09T19:08:17.327 回答
1

sum已经是内置函数了!

用法:sum(list)

>>> sum([1,5])
>>> 6

在您的代码中:

answer = sum([num1, num2])
于 2013-10-09T19:08:36.203 回答
0

将 sum 函数放在 main 函数的顶部。

前任:

def sum(number1, number2): 
  ...

def main():
  ...

然后调用主函数。

于 2014-11-17T06:01:23.930 回答
0

问题是 int 不能成为 sum 内置函数中的迭代器,您需要将其设为列表:

num1 = random.randint(1, 1001)
num2 = random.randint(1, 1001)
a = [num1, num2]

answer = sum(a)
于 2015-09-23T12:26:28.070 回答