3

Python 2.7 で演習のためにこのコードを実行しましたが、関数 fib(n) をどのように呼び出しても、毎回同じエラーが発生し、なぜそれが取得されないのかわかりません。コードは次のとおりです。

    #!/usr/bin/python

class fibonacci:

    def fib(self,n):
        a=1
        b=0
        c=0
        count=0
        fibo=list()

        while count < n:
            c = a + b
            fibo.append(n)
            fibo.append(c)
            a = b
            b = c
            count += 1
        return fibo

n=int(raw_input("ingrese n: "))
s = fib(n)
print s

実行すると、次のエラーが表示されます。

Traceback (most recent call last):
  File "./fib.py", line 22, in <module>
    s=fib(n)
NameError: name 'fib' is not defined
user@debian:~/Documents$ 

助けてください

4

2 に答える 2

1

fib()クラスのメソッドなfibonacciので、次のように呼び出す必要があります。

s = fibonnaci.fib(n)

そのまま実行fib(n)すると、インタープリターは「fib」という名前のグローバル関数をクラス外で探します。この場合、クラスに配置しても関数に特定のユーティリティが提供されないため、次のようにすることができます。

def fib(n):
    ...

s = fib(n)

(名前空間の方法としてクラスに入れる場合は、Python がモジュールを使用してそれを単純化することに注意してください。)

于 2012-11-30T10:58:59.600 に答える
1
class fibonacci:

    def fib(self,n):
        a=1
        b=0
        c=0
        count=0
        fibo=list()

        while count < n:
            c = a + b
            fibo.append(n)
            fibo.append(c)
            a = b
            b = c
            count += 1
        return fibo

n=int(raw_input("ingrese n: "))
s =fibonacci().fib(n)#<-- make sure to have fibonacci() before you call .fib() otherwise it will throw an error
print s

必要だったのは、fib関数が含まれていたクラスから関数を呼び出すことでした。通常の関数が含まれるグローバル スコープ (クラスに含まれていない関数) を調べていました。

于 2012-12-01T16:03:23.367 に答える