2011-12-02 118 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