什么';这个简单的python代码中有什么错误?

什么';这个简单的python代码中有什么错误?,python,Python,为什么它不能给出高达4百万的第一偶数斐波那契数的正确总数 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)

为什么它不能给出高达4百万的第一偶数斐波那契数的正确总数

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) 
x=1
y=2
列表=[1,2]
y<4000000时:
z=x+y
x=y
y=z
list.append(y)
列表_偶数=[]
对于列表中的项目:
如果%2==0:
列表_偶数追加(a)
其他:
通过
总计=总和(列表为偶数)
打印(总计)

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

给出高达4 mn的第一偶数斐波那契数的正确总数

如果您想找到达到某个极限的偶数斐波那契数之和,下面的代码可能是一种更实用的实现方法。它基于编写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))
输出

1089154
编辑

1089154
OP到底在问什么是模棱两可的

  • 如果OP想要将偶数斐波那契项相加,直到总和超过4000000,那么答案就是我上面所说的-1089154

  • 如果OP想要将所有小于4000000的偶数斐波那契项相加,那么表达式
    If total+x>limit
    将更改为
    x>limit
    ,答案将是4613732

我认为这是欧拉计划的一部分。出于某种原因,@Tagc得到了错误的答案。我也使用了生成器,但没有列表。以下是我的解决方案:

def fibonacci():
项0,项1=1,2
尽管如此:
收益率项0+收益率项1
项0,项1=项1,项0+项1
斐波那契和=2
对于fibonacci()中的n:
如果n>4000000:中断
如果n%2==0:fibonacci_sum+=n
打印(斐波那契和)
输出:

$python 002.py
4613732

为了好玩,这是一个单行程序版本

from itertools import takewhile

def fib():
    fk, fk1 = 0,1
    while True:
        yield fk
        fk, fk1 = fk1, fk+fk1

print( sum( x for x in takewhile(lambda f:f<4000000,fib()) if x%2==0 ) )
从itertools导入takewhile
def fib():
fk,fk1=0,1
尽管如此:
屈服fk
fk,fk1=fk1,fk+fk1

打印(总和)(x代表x)(lambda f:f
x=y;y=x+y
是错误的。即使在纠正之后,总数也是错误的。
否则:通过
是不必要的。只需删除它。删除。但是如何获得正确的总数?@Rizz_初学者_Python正确的答案是
4613732
,而不是
508186
。条件应该是
x>限制
@Copperfield它取决于在OP完全破坏它之前,estion被解释为。我将4000000解释为总数的限制(即,继续添加偶数斐波那契项,直到超过4000000)。OP希望伊文斯斐波那契数的总和小于4.000.000。这一点很清楚,因为beggingI从未更改过该部分-“为什么它不能给出高达4百万的第一偶数斐波那契数的正确总数?"我得到了不同的答案,因为我以不同的方式解释了这个问题。OP的问题是模糊的,但如果是Project Euler问题,你的解释更有可能是正确的。如果我将
total+x>limit
更改为
x>limit
@Tagc,我会得到与你相同的答案,哦,这更有意义,你找到了最大金额不到400万。