我想知道是否有办法使范围函数仅对某些给定值起作用。
我正在尝试为项目Euler的问题2编写一些代码,其中我必须找到其值不超过4,000,000的Fibonacci序列的偶数项的总和。
我的代码目前看起来像这样:
#Fibonacci Even Sum
even_sum = 0
def fib(n):
a, b = 1,2
while a < n:
print (a)
a, b = b, a + b
print ()
return a
for i in range(fib(4000000)):
if i % 2 == 0:
even_sum = i + even_sum
print (even_sum)
问题似乎是我的代码将所有偶数加到3524578,而不仅仅是偶数Fibonacci数。我怎么能改变这个?
非常感谢!
答案 0 :(得分:1)
您应该使用生成器功能,range()
不适合您的问题。您可以通过在while循环中提供fib
将yield a
函数转换为生成器,这会使函数继续吐出斐腾数字直到n
,并且您可以找到这样的总和。< / p>
发电机示例 -
>>> def fib(n):
... a, b = 1,2
... while a < n:
... yield a
... a, b = b, a+b
...
>>>
>>>
>>>
>>> for i in fib(200):
... print(i)
...
1
2
3
5
8
13
21
34
55
89
144
您可以对您的功能进行类似的更改。
代码看起来像 -
even_sum = 0
def fib(n):
a, b = 1,2
while a < n:
print (a)
a, b = b, a + b
yield a
for i in fib(4000000):
if i % 2 == 0:
even_sum = i + even_sum
print (even_sum)