我试图在Project Euler上用python弄湿我的脚,但是我遇到了第一个问题的问题(找到3或5的倍数之和到1000)。我可以成功打印出三和五的倍数,但是当我尝试包含sum函数时,我得到以下错误:
TypeError:'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)
答案 0 :(得分:7)
在for循环中
for numbers in x:
“数字”逐步遍历x中的元素,每次遍历循环。 将变量命名为“number”可能更好,因为你只是得到了 一次一个号码。 “数字”每次通过循环等于整数。
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))
答案 1 :(得分:5)
数字在传递给sum()时需要是一个列表或类似的。在上面的代码示例中,它是一个整数 - 来自x。
的整数之一尝试类似:
numbers = [num for num in x if num%3==0 and num%5 ==0]
print sum(numbers)
答案 2 :(得分:1)
sum
函数需要一个列表,而不是一个数字。
执行for numbers in
时,变量numbers
只有一个整数对象。添加print
语句,您会看到numbers
是一个数字。
您可能希望在列表中累积3和5的所有倍数。获得列表后,您可以使用该列表中的sum
函数。
答案 3 :(得分:1)
我认为你想要的是接下来的东西。
def numcheck(x):
total = 0
for number in x:
if number % 3 == 0 or and number % 5 == 0:
total += number
print total
或者,您可以将每个可分割的数字附加到列表中,然后在该列表上调用sum()。
答案 4 :(得分:1)
帮助(总和) 在模块内置:
中帮助内置函数求和和(...) sum(sequence [,start]) - &gt;值
Returns the sum of a sequence of numbers (NOT strings) plus the value
of parameter 'start' (which defaults to 0). When the sequence is
empty, returns start.
(完)
您将int类型的数字传递给sum(),但sum需要一个序列。
答案 5 :(得分:1)
我将如何做到这一点:
n = 100
# the next 4 lines are just to confirm that xrange is n numbers starting at 0
junk = xrange(n)
print junk[0] # print first number in sequence
print junk[-1] # print last number in sequence
print "================"
# 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:
print numbers
numcheck(xrange(n))
您可能会发现我将xrange(n)作为参数传递给我很奇怪。这是一个迭代器 当您在numcheck中循环时,最终将生成n个数字的列表。这有点像将指针传递给C中的函数。关键是通过使用xrange,您不需要为数字列表分配任何内存,因此您可以更轻松地对前十亿个整数进行检查,例如。