我试图在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以上? 感谢
答案 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进行比较。