Python: 整型不可迭代错误

5 投票
6 回答
30884 浏览
提问于 2025-04-15 15:09

我正在尝试用Python在Project Euler上入门,但在第一个问题上遇到了麻烦(找出小于1000的3或5的倍数的和)。我可以成功打印出3和5的倍数,但当我尝试使用求和函数时,出现了以下错误:

类型错误:'int'对象不可迭代

任何帮助都非常感谢。

n = 100
p = 0
while p<n:
   p = p + 1
x = range(0, p)

# check to see if numbers are divisable by 3 or 5
def numcheck(x): 
   for numbers in x:
      if numbers%3==0 and numbers%5==0:
          sum(numbers)
numcheck(x)

6 个回答

1

我觉得你想要的东西大概是这样的。

def numcheck(x):
    total = 0
    for number in x:
        if number % 3 == 0 or and number % 5 == 0:
            total += number
    print total

另外,你也可以把每个能被整除的数字放到一个列表里,然后对这个列表使用sum()函数来计算总和。

5

在使用sum()函数时,numbers需要是一个列表或者类似的东西。在上面的代码示例中,它是一个整数,也就是x中的一个整数。

你可以试试这样的写法:

numbers = [num for num in x if num%3==0 and num%5 ==0]
print sum(numbers)
7

在这个for循环中

for numbers in x:

“numbers”这个变量每次循环时都会一个一个地取出x中的元素。其实把这个变量叫“number”可能更好,因为每次你只取出一个数字。“numbers”在每次循环中都是一个整数。

sum(numbers)

会出现一个类型错误(TypeError),因为sum()这个函数需要一个可迭代的对象(比如一个数字列表),而不是单独的一个整数。

所以你可以试试:

def numcheck(x):
    s=0
    for number in x:
        if number%3==0 and number%5==0:
            s+=number
    print(s)
numcheck(range(1000))

撰写回答