我是新手,我真的不明白为什么会这样。 我正在尝试运行这个程序:
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()
除非我阻止,否则这将永远属于随机顺序。
帮助?
答案 0 :(得分:2)
删除分隔符中的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
但我认为这对初学者来说会有点混乱。