如何在Python中找到低于1000的所有3或5的倍数的总和?

qwe*_*rty 11 python algorithm

不确定我是否应该在math.stackexchange上发布这个,但它包含更多编程,所以我在这里发布了它.

这个问题看起来很简单,但我现在坐在这里至少一个小时,现在还没弄清楚.我尝试过不同的解决方案,并为它读取数学公式等但在编码时它不会给我正确的答案!我为它做了两个不同的解决方案,它们都给了我错误的答案.第一个解决方案给了我265334,而第二个解决方案给了我232169.答案是233168,所以第二个解决方案更接近.

我应该提到这是欧拉计划的一个问题,第一个是精确的.

这是我的代码.有什么想法有什么不对吗?

nums = [3, 5]
max = 999

result = 0
for num in nums:
    for i in range(1,max):
        if num*i < max:
            result += num*i
print result


result = 0
for i in range(0,max):
    if i%3 == 0 or i%5 == 0:
        result += i

print result
Run Code Online (Sandbox Code Playgroud)

zee*_*kay 16

你太复杂了.您只需要一个3或5的倍数的数字列表,您可以通过列表理解轻松获得:

>>> [i for i in range(1000) if i % 3 == 0 or i % 5 == 0]
Run Code Online (Sandbox Code Playgroud)

然后sum用来得到总数:

>>> sum([i for i in range(1000) if i % 3 == 0 or i % 5 == 0])
<<< 233168
Run Code Online (Sandbox Code Playgroud)

或者甚至更好地使用生成器表达式:

>>> sum(i for i in range(1000) if i % 3 == 0 or i % 5 == 0)
Run Code Online (Sandbox Code Playgroud)

甚至更好(Exelian提供):

>>> sum(set(list(range(0, 1000, 3)) + list(range(0, 1000, 5))))
Run Code Online (Sandbox Code Playgroud)

  • 我敢说你还是太复杂了.试试这个:`sum(设定(范围(0,1000,3)+范围(0,1000,5)))` (3认同)

Fre*_*Foo 5

range(k,max)不包括max,所以你真的检查并包括998(而999是3的倍数).请range(1,1000)改用.