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()是 class 的一个方法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 回答