使用Python的Euler Project No. 2

kam*_*ame 0 python

有人能告诉我为什么这应该是错的吗?

#Each new term in the Fibonacci sequence is generated
#by adding the previous two terms. By starting with 1 and 2,
#the first 10 terms will be:
#1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
#Find the sum of all the even-valued terms in the sequence
#which do not exceed four million.


sum=2

list = [1,2]
for x in range(2,100):
    a = list[x-2]+list[x-1]
    print(a)
    list.append(a)
    if a % 2 == 0:
        sum += a
        print('sum', sum)
        if sum >= 4000000:
            break
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 7

这是使用生成器和itertools解决问题的完全不同的方法:

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

import itertools
print sum(n for n in itertools.takewhile(
    lambda x: x <= 4000000, fib()) if n % 2 == 0)
Run Code Online (Sandbox Code Playgroud)

输出:

4613732
Run Code Online (Sandbox Code Playgroud)

所以你的代码,即使它是错误的(见其他答案),恰好给出了正确的答案.


Chr*_*uns 6

更换

    sum += a
    print('sum', sum)
    if sum >= 4000000:
        break
Run Code Online (Sandbox Code Playgroud)

    if a > 4000000:
        break
    sum += a
    print('sum', sum)
Run Code Online (Sandbox Code Playgroud)

你应该比较"a"和4000000,而不是"和",就像Daniel Roseman说的那样.