[英]Define function which gives random values in a given range in 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.