2016-07-04 73 views
-1

這個程序顯示正確的輸出,除了輸入n = 0。pythonacci序列程序在python中工作正常,除了輸入0

def fib(n): 
    f=list() 
    i=0 
    while(i<=n): 
     f.append(i) 
     i+=1 
    f[0]=0 
    f[1]=1 
    for i in range(2,n+1): 
     f[i]=f[i-1]+f[i-2] 
     i+=1 
    return f[n] 
n=int(input()) 
print(fib(n)) 

當我給輸入n = 0時,它顯示以下錯誤:

Traceback (most recent call last): 
    File "fib.py", line 16, in <module> 
     print(fib(n)) 
    File "fib.py", line 10, in fib 
     f[1]=1 
    IndexError: list assignment index out of range 
+0

當n = 0所有的x值斐波納契你沒有在f 1的位置值,但你的句子正在努力讀書_f在那個位置TE值[1] = 1_。可能你對字典感到困惑。順便說一句,嘗試在你的Python代碼中遵循PEP8。 – Hamlett

回答

1

兩行中間不必要的,因爲你的while循環中初始化的那些元素。錯誤來自於這樣的事實:對於n=0,您只是添加了一個elemnt列表。之後改變第一個和第二個元素的值。沒有第二個元素。

def fib(n): 
    f=[] 
    i=0 
    while(i<=n): 
     f.append(i) 
     i+=1 
    for i in range(2,n+1): 
     f[i]=f[i-1]+f[i-2] 
     i+=1 
    return f[n] 
n=int(input()) 
print(fib(n)) 
+1

@Destrif一點都沒有!你爲什麼這麼認爲? (測試過這個) –

+0

@Destrif哦對不起,我明顯誤解了你。 –

0

要麼鴨類型是:

def fib(n): 
    if n in [0, 1]: 
     return n 
    . 
    . 

或者分別改變f[0] = 0f[1] = 1f.append(0)f.append(1)

0

你不需要這兩行。

f[0]=0 
f[1]=1 

刪除它們,一切都會工作。

0

更正代碼:

def fib(n): 
    f=list() 
    i=0 
    while(i<=n): 
     f.append(i) 
     i+=1 
    # HERE WAS THE MISTAKE 
    f.append(0) 
    f.append(1) 
    for i in range(2,n+1): 
     f[i]=f[i-1]+f[i-2] 
     i+=1 
    return f[n] 

輸出:

>>> fib(0) 
0 
>>> fib(1) 
1 
>>> fib(2) 
1 
>>> fib(3) 
2 
>>> fib(4) 
3 
>>> fib(5) 
5 
>>> fib(6) 
8 
>>> fib(7) 
13 
>>> fib(8) 
21 
>>> fib(9) 
34 
... 
>>> fib(30) 
832040 
0

在你的代碼的問題是,循環沒有創建項目索引1,所以在循環之後你能改變這個項目,因爲它不存在。 我建議「硬編碼」 0和1開頭,然後用遞歸定義斐波那契功能

def fib(n): 
    if 0<=n<2: return n 
    else: return fib(n-2)+fib(n-1) 

,然後就打電話

fib(i) 

獲得第i個項目或製作列表使用列表理解

[fib(i) for i in range(x)]