Python: 整型不可迭代错误
我正在尝试用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))