0

我正在尝试在 Python 3.3.2 中编写一个简短的函数。这是我的模块:

from math import sqrt
phi = (1 + sqrt(5))/2
phinverse = (1-sqrt(5))/2

def fib(n): # Write Fibonacci numbers up to n using the generating function
    list = []
    for i in range(0,n):
        list = list.append(int(round((phi**i - phinverse**i)/sqrt(5), 0)))
    return(list)

def flib(n): # Gives only the nth Fibonacci number
    return(int(round((phi**n - phinverse**n)/sqrt(5), 0)))

if __name__ == "__main__":
    import sys
    fib(int(sys.argv[1]))

当我运行 fibo.fib(6) 时,我收到以下错误:

    list = list.append(int(round((phi**i - phinverse**i)/sqrt(5), 0)))
AttributeError: 'NoneType' object has no attribute 'append'

我该如何纠正这个错误?

4

3 回答 3

7

的返回类型

list.append

None

当你这样做list = list.append(int(round((phi**i - phinverse**i)/sqrt(5), 0)))

它正在分配list=None

做就是了

for i in range(0,n):
    list.append(int(round((phi**i - phinverse**i)/sqrt(5), 0)))

此外,list是一个内置类型。所以使用不同的变量名。

于 2013-05-20T20:09:18.257 回答
1

append调用不返回列表,它将更新到位。

list = list.append(int(round((phi**i - phinverse**i)/sqrt(5), 0)))

应该成为

list.append(int(round((phi**i - phinverse**i)/sqrt(5), 0)))

您可能还应该将参数称为其他名称,而不是list因为它也用于标识列表类。

于 2013-05-20T20:08:54.277 回答
0

您还可以使用列表推导:

def fib(n):
    '''Write Fibonacci numbers up to n using the generating function'''

    return [int(round((phi**i - phinverse**i)/sqrt(5), 0))) for i in range(0, n)]
于 2013-05-20T21:24:37.847 回答