def fibonacci(n):
first = 0
second = 1
count = 0
while count <= n:
if (second % 2 == 0):
first, second = second, first + second
count += 1
return first, second
print (fibonacci(4000000))
有人可以解释这段代码有什么问题吗?在IDLE中,页面重新启动但不返回任何答案。顺便说一句,我是一名初学程序员,刚刚完成CodeAcademy课程。
答案 0 :(得分:0)
second % 2
从1开始,这并不奇怪。因此,while
循环不会在正文中运行任何内容,因此循环将永远运行。
您可能希望始终计算下一个Fibonacci数,但只有在second
为偶数时才增加计数。
答案 1 :(得分:0)
你的问题是你在if语句中有你的count变量。你创建了一个无限的while循环。将它移到if语句之外:
if(second % 2 == 0):
first, second = second, first + second
count +=1
此外,您还必须添加更多代码才能使其正常工作。
答案 2 :(得分:0)
由于这是Problem 2 of Project Euler,因此您计算的值不正确。它要求所有偶数斐波纳契数的总和达到四百万的值,而不是百万分之四的值。那太大了。
由于我们想继续生成值,我们将使用生成器并将其与itertools.takewhile()
结合使用。然后我们将filter()
降低到偶数值,然后找到sum()
。
import itertools
def fibonacci_gen():
first = 0
second = 1
while 1:
first, second = second, first + second
yield second
>>> a = fibonacci_gen()
>>> sum(filter(lambda y: not y%2, itertools.takewhile(lambda x: x<=4e6, a)))
4613732
对于不使用这些功能的解决方案:
def fibonacci_4m():
result = 0
first = 0
second = 1
while second <= 4e6:
first, second = second, first + second
if not second%2:
result += second
return result
>>> fibonacci_4m()
4613732
答案 3 :(得分:0)
在while循环中,当if语句无法执行其条件代码时,没有任何变化。请尝试以下方法:
def main():
for index in range(1, 41):
print('even_fibonacci({}) = {}'.format(index, even_fibonacci(index)))
def even_fibonacci(index):
for number in all_fibonacci():
if not number & 1:
index -= 1
if not index:
return number
def all_fibonacci():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
if __name__ == '__main__':
main()