这个简单的python代码有什么问题?

Riz*_*hon 2 python

为什么它没有给出正确的第一个甚至斐波纳契数最多达到400万的总数?

x = 1
y = 2
list = [1,2]
while y< 4000000:
    z= x+y
    x=y
    y=z
    list.append (y)
list_even = []
for a in list:
    if a%2 == 0:
        list_even.append (a)
else:
    pass

total = sum(list_even)
print (total) 
Run Code Online (Sandbox Code Playgroud)

Tag*_*agc 6

还有其他答案已经解决了代码中的特定错误,所以我想提供一个完全不同的实现来实现您的既定目标:

给出正确的第一个甚至斐波纳契数的总数高达4百万

如果你想找到偶数Fibonacci数的总和达到某个极限,下面的代码可能是实现它的更实用的方法.它基于组合Python生成器,这应该有助于使代码更容易遵循和更可重用.

def fib():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b

def evens(l):
    for x in l:
        if x % 2 == 0:
            yield x

def sum_even_fibonacci(limit):
    total = 0

    for x in evens(fib()):
        if total + x > limit:
            return total

        total += x

if __name__ == '__main__':
    print(sum_even_fibonacci(4000000))
Run Code Online (Sandbox Code Playgroud)

产量

1089154
Run Code Online (Sandbox Code Playgroud)

编辑

确切地说OP正在问什么是模棱两可的.

  • 如果OP希望总和甚至斐波纳契项,直到总和超过4,000,000,那么答案就是我上面所说的 - 1089154.

  • 如果OP希望将所有甚至斐波那契项都加在4,000,000以下,则表达式if total + x > limit将改为,x > limit答案为4613732.