簡體   English   中英

使范圍函數作用於 Python 中的給定值

[英]Making Range Function Act Over Given Values in Python

我想知道是否有辦法使范圍函數僅作用於某些給定值。

我正在嘗試為 Project Euler 的 Problem 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,而不僅僅是偶數斐波那契數。 我怎樣才能改變這個?

非常感謝 !

您應該使用生成器函數, range()不適合您的問題。 您可以通過在 while 循環中提供yield a將您的fib函數轉換為生成器,這將使函數不斷吐出斐波那契數直到n並且您可以找到這樣的總和。

發電機示例 -

>>> 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM