2016-08-17 218 views
0

我正在使用的代碼python中的無限循環 - 爲什麼?

fibList=[1] 

def fib(n1, n2): 
    n3 = n1+n2 
    n1=n2 
    n2=n3 

num1=1 
num2=2 

while(num2<4000000): 
    fib(num1,num2) 
     if (num2%2==0): 
      fibList.append(num2) 
total = sum(fibList) 

print total 

在網上編譯器,repl.it.它正在進行並且沒有給出解決方案,因此我在fib函數的定義中的n3=行的正下方鍵入了行print n3。它一次又一次地給了3,它在我能夠停止該程序之前崩潰了。所以很顯然,某處有某種無限循環(至少,顯然在我的腦海裏,我想這不可能是一個無限循環,但我確定它是這樣的)。問題在哪裏。我不明白爲什麼會有一個無限循環。

順便說一下,這不是一個家庭作業問題,而是我爲了樂趣而做的一個問題。函數fib應該計算斐波納契數,第二部分將偶數個分離成不到400萬,然後計算總和。

我想知道的是無限循環進入的地方,我可以做些什麼來解決它。謝謝!

+0

請修正您的代碼段中的縮進 – mic4ael

+1

您要更改循環中num2的值嗎? – UnholySheep

+3

調用'fib' **不會**在函數體外改變n1和n2的值。 –

回答

6

n1n2n3是局部變量,並沒有任何共同之處與外部範圍num1num2,儘管他們的初始值。您必須輸入return的值,然後再將這些結果分配給num1num2

def fib(n1, n2): 
    n3 = n1+n2 
    n1=n2 
    n2=n3 
    return n1, n2 

num1=1 
num2=2 
fibList=[1] 
while num2<4000000: 
    num1, num2 = fib(num1,num2) 
    if num2%2==0: 
     fibList.append(num2) 
total = sum(fibList) 

print total 
+1

謝謝;這幫助了很多。對不起,我沒有早點接受! – heather