python递归函数和全局变量错误

时间:2018-06-02 11:07:16

标签: python

我正在模拟代码以清除字符串开头的所有零。

def fact(n):
    if n==1:
        return 1
    return n * fact(n - 1)

我的代码:

class Solution:
    def eraseZero(self,x):
        if str(x)[0]!='0':
            x = str(x)[0:]
            return x
        else:
            x = str(x)[1:]
        return eraseZero(x)



s1 = Solution()
s1.eraseZero('000789')
print(s1.eraseZero('000789'))

然而我收到了一个错误:

  

D:\ Python27 \ python.exe D:/ pyProject / LintCode& LeetCode / medium.py   Traceback(最近一次调用最后一次):文件   " D:/ pyProject / LintCode& LeetCode / medium.py",第13行,in       s1.eraseZero(' 000789')文件" D:/ pyProject / LintCode& LeetCode / medium.py",第8行,在eraseZero中       return eraseZero(x)NameError:全局名称' eraseZero'未定义

为什么呢?以及如何修理。提前谢谢!

1 个答案:

答案 0 :(得分:1)

由于eraseZero是类Solution的一部分而未全局定义,因此您应该使用该类的实例self来调用它,无论您是否调用它在课堂内外。

class Solution:
    def eraseZero(self,x):
        if str(x)[0]!='0':
            x = str(x)[0:]
            return x
        else:
            x = str(x)[1:]
        return self.eraseZero(x) # <-----------



s1 = Solution()
s1.eraseZero('000789')
print(s1.eraseZero('000789'))