Python _ Project Euler 问题 2 - 为什么我的答案代码是错误的?

Python _ Project Euler Question 2 - Why my answer code is wrong?

问:考虑斐波那契数列中不超过四百万的项,求偶数项之和

我的代码:

x = 1
y = 2
ans = 0
evens = []
while x <= 4000000:
    ans = x + y
    x = y
    y = ans
    if ans % 2 == 0:
        evens.append(ans)
print(sum(evens))

我的结果是 4613730 而它应该是 4613732。 我在这里不明白什么?

您正在跳过 2。

ans 首先用值 3 检查。

ans = x + y3 因为你从 x = 1y = 2

开始

您可以使用 print(evens) 内部循环来查看您错过了什么。现在,前 2 个未打印。

第一个偶数 2 没有插入到 evens,因此更正代码的一种方法是在开始循环之前将 2 插入偶数。可能有很多方法可以解决这个问题。

x = 1
y = 2
ans = 0
evens = [2]
while x <= 4000000:
    ans = x + y
    x = y
    y = ans
    if ans % 2 == 0:
        evens.append(ans)
    print(evens) # to debug what are in in a 'evens' list
print(sum(evens)) 
# 4613730