添加列表的内容 - 项目euler 1

时间:2014-04-25 13:18:49

标签: python list python-3.x

我试图在Python中使用Project Euler Problem 1(http://projecteuler.net./problem=1)并且我使用while循环来循环到1000:

from collections import Counter

x = 0
target = 1000
correctMultiples = list()
while x < target:
    x += 1
    if x % 3 == 0 or x % 5 == 0:
        correctMultiples.append(x)

print(str(correctMultiples) + ' are multiples of 3 or 5')

print('The sum of the multiples of 3 or 5 under 1000 is, ' + str(sum(correctMultiples))) # For some reason, 1000 over, answer is 233168 NOT 234168

这样可行,但我得到的答案是1000以上。我得到234168而不是233168。

我已尝试检查重复项:(关注How to find duplicate elements in array using for loop in Python?

duplicates = Counter(correctMultiples)
print([i for i in duplicates if duplicates[i] > 1])

但我不认为可以有重复吗?因为我使用if x%3 ...

我知道这不是最有效的方法,但仍然......为什么它不起作用? 任何人都可以帮我找到为什么答案是1000以上? 感谢

2 个答案:

答案 0 :(得分:2)

您在循环中包含1000,而问题是 1000以下的数字

这里你在进行边界检查后增加,所以当x==999你仍然会运行循环时:

while x < target:
    x += 1

使用for循环会更容易:

for x in range(1000):

range 包含最后一个元素。

答案 1 :(得分:0)

您在循环中包含数字1000,因为在上一次迭代中,x为999并再次增加。

更好的解决方案是构造

for x in range(1,1000):
    ...

包括从1到999的所有x,并且在每次迭代时都不会与1000进行比较。