Python 为什么会出现名称错误:name';柜台';未定义,而我将计数器变量设置为全局?
下面是我的代码。我不知道我做错了什么,但是当我运行这个程序时,我得到了NameError:name'counter'没有定义。我正在从教科书上学习Python,根据教科书,我的代码是正确的。我找不到教科书代码和这个代码之间的区别。。。我在stackoverflow上看到了关于全局变量的其他问题,但我仍然不知道我做错了什么。为什么会出现这个错误?如何解决呢 更新: 我知道我做错了什么。我应该在函数上方写入counter=0Python 为什么会出现名称错误:name';柜台';未定义,而我将计数器变量设置为全局?,python,python-3.x,global-variables,counter,nameerror,Python,Python 3.x,Global Variables,Counter,Nameerror,下面是我的代码。我不知道我做错了什么,但是当我运行这个程序时,我得到了NameError:name'counter'没有定义。我正在从教科书上学习Python,根据教科书,我的代码是正确的。我找不到教科书代码和这个代码之间的区别。。。我在stackoverflow上看到了关于全局变量的其他问题,但我仍然不知道我做错了什么。为什么会出现这个错误?如何解决呢 更新: 我知道我做错了什么。我应该在函数上方写入counter=0 def rpower(a, n): 'returns a to t
def rpower(a, n):
'returns a to the nth power'
global counter # counts number of multiplications
if n == 0:
return 1
# if n > 0:
tmp = rpower(a, n//2)
if n%2 == 0:
counter += 1
return tmp*tmp # 1 multiplication
else:
counter += 2
return a*tmp*tmp # 2 multiplications
print(rpower(2, 10000))
可能是您的
计数器
变量在您的函数
之外声明。比如:
counter=0
def rpower(a, n):
'returns a to the nth power'
global counter # counts number of multiplications
if n == 0:
return 1
# if n > 0:
tmp = rpower(a, n//2)
if n%2 == 0:
counter += 1
return tmp*tmp # 1 multiplication
else:
counter += 2
return a*tmp*tmp # 2 multiplications
print(rpower(2, 10000))
我用PyCharm重写了你的代码。只是更改了函数的名称,因为您的代码不能仅通过ctrl+v工作:
def rpow(a, n):
global counter
if n == 0:
return 1
tmp = rpow(a, n/2)
if n%2 == 0:
counter += 1
return tmp*tmp
else:
counter += 2
return a*tmp*tmp
打印(rpow(210000))
我不知道您的错误,但我已达到RecursionError:相比之下超过了最大递归深度
试着做同样的事情。请纠正我没有在我的功能之外声明我的计数器。如果我在函数外添加counter=0,我在IDLE中不会出现错误,而且一切似乎都正常。但是,如果我在Pycharm中运行这段代码,我仍然会得到NameError。我刚刚在Pycharm中运行了这段代码,它没有任何错误。你的缩进正确吗?缩进是正确的。我想是计数器=0在我没有写的函数上面,导致了错误。现在,它在空闲状态下工作。谢谢如果您编写tmp=rpow(a,n//2)而不是tmp=rpow(a,n/2),您将不会得到递归错误。这是因为如果使用n/2,n永远不会达到0。如果n永远不会变为0,则永远不会到达basecase('If n==0'),函数也永远不会结束。这就是为什么会出现递归错误。使用n//2,n最终将达到0,基本情况运行,函数结束:)