在Python中使用给定值进行范围函数操作

时间:2015-06-28 16:56:42

标签: python function range

我想知道是否有办法使范围函数仅对某些给定值起作用。

我正在尝试为项目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数。我怎么能改变这个?

非常感谢!

1 个答案:

答案 0 :(得分:1)

您应该使用生成器功能,range()不适合您的问题。您可以通过在while循环中提供fibyield 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)