这是一个查找正整数
然后,我收到了错误信息,
在使用
a
和 b
的最大公约数的示例,其中 a <= b
。我从较小的 a
开始逐个减去,以检查它是否是两个数字的约数。def gcdFinder(a, b):
testerNum = a
def tester(a, b):
if b % testerNum == 0 and a % testerNum == 0:
return testerNum
else:
testerNum -= 1
tester(a, b)
return tester(a, b)
print(gcdFinder(9, 15))
然后,我收到了错误信息,
UnboundLocalError: local variable 'testerNum' referenced before assignment
。在使用
global testerNum
之后,它成功地在Spyder控制台中显示了答案3
...
但在pythontutor.com上,它显示NameError: name 'testerNum' is not defined
(link)。
问题1: 在Spyder中,我认为global testerNum
是一个问题,因为testerNum = a
不在全局作用域内。它在函数gcdFinder
的作用域内。这个描述正确吗?如果是,Spyder是如何显示答案的?
问题2: 在pythontutor中,比如最后一张截图,如何解决NameError问题?
问题3: 为什么Spyder和pythontutor的结果不同,哪个是正确的?
问题4: 不使用global
方法是否更好?
--
更新:Spyder问题是由于之前运行中存储的值所致,因此它已被定义为9
。这使得global testerNum
起作用。我已删除Q1和Q3。
testNum
不是global
的。尝试使用关键字nonlocal
代替。这假定你正在使用 Python3。 - hcoat