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 に答える