我试图找到3和5的倍数之和,而总和小于1000.当我运行代码时,我只得到一个永不停止的0列表,并且它说“要处理的输出太多” 。我不知道我哪里出错了,也不会反馈。
--
-- Dumping data for table yourTable
--
编辑
循环每次都将i重置为0。这意味着它总是小于1000。
答案 0 :(得分:2)
你有一个无限循环,因为i
没有增加,result
也增加了。
然后归结为你想要的东西:
result = 0
i = 0
while result <= 1000:
i += 1
if i % 3 == 0 or i % 5 == 0:
result += i
print(result - i)
# 998
如果你引用了Euler problem,那么总和不应该小于1000,但要素是:
total_sum = 0
for i in range(1000):
if (i % 3 == 0 or i % 5 == 0):
total_sum = total_sum + i
print total_sum
# 233168
另一种选择是:
sum(set(range(0,1000,3)) | set(range(0,1000,5)))
# 233168
或:
sum(range(0,1000,3)) + sum(range(0,1000,5)) - sum(range(0,1000,15))
# 233168
答案 1 :(得分:1)
一个有趣的练习是用更多的&#34; pythonic&#34;来重写它。方式,例如:
sum(filter(lambda x: x % 3 == 0 or x % 5 == 0, xrange(1000)))
甚至更好:
sum(x for x in xrange(1000) if x % 3 == 0 or x % 5 == 0)
两者都给出了233168
。
(请注意,在这两种情况下sum()
都是Python内置函数。)
顺便说一句,在您的问题陈述中,您提到&#34;少于1000&#34;,但您的代码在循环中包含1000.
答案 2 :(得分:0)
你永远不会增加我。将i = 0置于循环之外,并且i + = 1。即。
result = 0
i = 0
while result <= 1000:
if i % 3 == 0 or i % 5 == 0:
print(i)
result += i
i += 1
答案 3 :(得分:0)
def sum():
result = 0
i = 0
# Put i=0 before loop begin
while result <= 1000:
if i % 3 == 0 or i % 5 == 0:
print i
result += i
i+=1 # Put i+=1 after result here
else:
i += 1
print ("sum= "+str(result))
sum()
在循环开始之前放i = 0,在结果
之后放i + = 1答案 4 :(得分:0)
如果有人想知道,这是一个经典问题,我从Euler项目中了解到: https://projecteuler.net/problem=1
除了这里给出的所有答案外,还有一个使用算术级数(https://en.wikipedia.org/wiki/Arithmetic_progression)的O(1)答案。
基本上我们需要将3的AP计算到小于1000的最大除数3将5的AP加到5的最大除数小于1000减去AP的15到最大除数15小于1000(此步骤删除了因为它们是3和15的倍数而添加两次的itens)。
以下是代码:
def ap(i, range_start, range_end):
a1 = range_start
an = range_end
n = (an - a1)/i + 1
return (a1 + an) * n / 2
def ap_with_limit(i, limit):
limit -= 1
return ap(i, i, limit - (limit%i))
print ap_with_limit(3, 1000) + ap_with_limit(5, 1000) - ap_with_limit(15, 1000)
# 233168