有人能告诉我为什么这应该是错的吗?
#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)
这是使用生成器和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)
所以你的代码,即使它是错误的(见其他答案),恰好给出了正确的答案.
更换
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说的那样.