我是全新的,在python中使用Project Euler#2

时间:2017-06-27 05:32:07

标签: python

目标是总计每个偶数高达400万。 我认为这样可行,但程序运行不稳定。认为它与if语句有关,但是否则会丢失。这就是我所拥有的。

list = []
a, b = 0, 1
while b <40:
    if b%2 == 0:
        list.append(b)
        a, b = b, a+b

t=sum(list)
print(t)

3 个答案:

答案 0 :(得分:4)

这是你最大的问题:

a, b = b, a+b

它有很多可能搞乱你的循环!和其他提到的一样,当b为奇数时,它甚至不会更新任何东西,只有当它是偶数时才会更新,然后你就会卡住。

为什么不以简单的方式做到这一点,范围:

mysum = sum([i for i in range(0, 40, 2)])

用一行来处理所有事情(当然,如果你想要包含数字4,000,000,那么用你的问题替换40和4,000,001。如果你只想要一切但不包括它,请使用只有4,000,000)

答案 1 :(得分:2)

        a, b = b, a+b

此行仅在b%2 == 0时运行。我认为您的意思是每次都运行它。它应该进一步缩进一层。

答案 2 :(得分:0)

还可以使用数学规则,其中1和n之间的整数之和等于n*(n+1)/2。如果我们只想对偶数求和,那就像只考虑一半数来求和并将结果乘以二。

fSumEvenNumbers = lambda x: (x//2)*(x//2+1)

这会给出

fSumEvenNumbers(40000000)

相当于

(2e7)**2 + 2e7
4e14 + 2e7
400000020000000