[英]Function Break Out of For Loop Unexpectedly in Python
關於Python,我仍然是一個初學者。 我最近嘗試了有關斐波那契數的第二項目Euler問題,但不幸的是我被困住了。 在簡單的for循環中,不少。 在此for循環中,我嘗試將函數的返回結果分配給變量,並且無論所述變量是否與條件匹配,總和都會增加。 但是,此循環在退出之前僅運行一次,我感到非常困惑。 我精疲力盡; 如果您能幫助解決此問題,我將不勝感激。 以下是我的代碼的相關部分:
def fibonacci(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
x = n - 1
y = n - 2
return x + y
num = input("Input your number of choice: ")
total = 0
問題領域:
for i in range(int(num)):
val = fibonacci(i)
if (val % 2 == 0):
total = total + val
print(total)
是的,它只會計算一次total = total + val
,當val = 0
,對於所有其他情況,您的fibonacci函數將返回2*n -3
,這始終是奇數,但是您正在檢查返回的val是否為even
(除了when)之外,它永遠不會消失,因此是問題。
也許您想返回類似-
return fibonacci(x) + fibonacci(y) # or the simpler , fibonacci(n-1) + fibonacci(n-2)
注意, 斐波納契數的序列Fn
由遞歸關系F_n = F_{n-1} + F_{n-2}
。
選項1:使用遞歸
代替return (n-1) + (n-2)
,應該return fibonacci(n-1) + fibonacci(n-2)
。
def fibonacci(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
x = fibonacci(n-1)
y = fibonacci(n-2)
return x + y
num = input("Input your number of choice: ")
print(fibonacci(num))
這是一個例子:
$ python fibonacci.py
Input your number of choice: 11
89
選項2:使用循環
def fibonacci(num):
a,b = 1,1
for i in range(num-1):
a,b = b,a+b
return a
print fibonacci(num)
我看到的問題是您正在嘗試打印在for
循環中分配的變量。 相反,您可以...
for i in range(int(num)):
val = fibonacci(i)
if (val % 2 == 0):
return (total + val)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.