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
.
使用后,在 Spyder 控制台中global testerNum
成功显示答案...3
但在 pythontutor.com 中,它说NameError: name 'testerNum' is not defined
(链接)。
Q1:在 Spyder 中,我认为这global testerNum
是一个问题,因为testerNum = a
它不在全球范围内。它在 function 的范围内gcdFinder
。这个描述正确吗?如果是这样,Spyder 是如何给出答案的?
Q2:在pythontutor中,说最后一个截图,pythontutor中NameError问题如何解决?
Q3:为什么 Spyder 和 pythontutor 的结果有差异,哪个是正确的?
Q4:不使用global
方法更好吗?
--
更新: Spyder 问题是由于先前运行存储的值,因此它9
已被定义。这就是global testerNum
工作。我已经删除了 Q1 和 Q3。