运行简单程序时出现“Traceback”错误
问题描述:
我是新手,我真的不明白为什么会发生这种情况。 我试图运行此程序:运行简单程序时出现“Traceback”错误
NumberToCheck=0
check=2
def checker():
global NumberToCheck
global check
check=2
while check < NumberToCheck:
if NumberToCheck % check == 0:
main()
check=check+1
else:
divider()
def main():
global NumberToCheck
while NumberToCheck < 600:
NumberToCheck=NumberToCheck+1
checker()
def divider():
if 600851475143 % NumberToCheck == 0:
print (NumberToCheck)
end()
main()
def end():
print ("end")
print ("start")
main()
,我不断收到此错误:
start
1
71
Traceback (most recent call last):
File "/Users/marknorman/Documents/Problem 3.py", line 29, in <module>
main()
File "/Users/marknorman/Documents/Problem 3.py", line 21, in main
checker()
File "/Users/marknorman/Documents/Problem 3.py", line 15, in checker
divider()
File "/Users/marknorman/Documents/Problem 3.py", line 26, in divider
main()
什么看起来像一个随机的顺序,除非我停下来,这将永远犹豫。
帮助?
答
删除分隔符中的main()
。你会得到无限递归,因为不是返回到main,而是再次调用main()
方法,从而再次启动该过程。
另外作为一个附注,我真的建议你停止使用所有这些全局变量。而不是你的功能返回值
这是一个更简单的版本,仍然使用一个函数。 (对于这样一个问题,你真的甚至不需要的功能但无论如何,它看起来像你想练他们)
def main():
numberToCheck = 600851475143
i = 2
#infinite loop
while 1:
if isDivisibleBy(numberToCheck, i):
# if our number is divisible print it out and stop the loop
print(numberToCheck, "is divisible by", i)
break
i += 1 #increment i
def isDivisibleBy(dividend, divisor):
if dividend % divisor == 0:
return True
return False
if __name__ == "__main__":
main()
还要注意的是功能isDivisibleBy可以缩短到只需:
def isDivisibleBy(dividend, divisor):
return dividend % divisor == 0
但我觉得这会让初学者感到困惑。
这不是完整的错误。我们需要看到整个事情。另外,你应该阅读[mcve]。我们需要看到您正在运行的确切代码。在Python中,缩进是非常重要的,所以值得您花时间去修复。 –
这是无限的。我已经让它运行了几分钟,并且一直在打印。 –
好吧,除了Exception之外,一个语法错误。 –