我正在尝试在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'
如何纠正此错误?
答案 0 :(得分: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
是内置类型。所以使用不同的变量名。
答案 1 :(得分: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
之外的其他内容,因为它也用于标识列表类。
答案 2 :(得分: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)]