2011-12-02 115 views
2

我正在閱讀教科書,我不知道爲什麼此代碼在我的編譯器上編譯的方式與本書中所述方式不同。使用python進行Fibonacci疑難解答疑難解答

def fibs(number): 
    result = [0, 1] 
     for i in range(number-2): 
      result.append(result[-2] + result[-1]) 
     return result 

所以這個: fibs(10)應該給我[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]但由於某種原因,我得到[0, 1, 1]爲每一個我傳遞給函數數量。

任何想法?

回答

13

您帖子中的代碼是無效的Python。因爲你的代碼能夠運行,它可能實際上是這樣的:

def fibs(number): 
    result = [0, 1] 
    for i in range(number-2): 
     result.append(result[-2] + result[-1]) 
     return result 

return result縮進,使得它的,而不是在它下面的for循環中。這會導致它在返回之前僅將一個值添加到列表中,產生您看到的列表。

Unindent該行,它應該正常工作。

+0

是的是固定它,謝謝 –

2

在Python中,縮進是最重要的。您發佈的代碼不正確地縮進。

>>> def fibs(number): 
...  result = [0, 1] 
...  for i in range(number-2): 
...   result.append(result[-2] + result[-1]) 
...  return result 
... 
>>> fibs(10) 
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34] 
1

我只是縮進的代碼並正確工作對我來說:

def fibs(number): 
    result = [0, 1] 
    for i in range(number-2): 
     result.append(result[-2] + result[-1]) 
    return result