运行简单程序时不断出现“Traceback”错误

时间:2016-05-12 19:06:26

标签: python

我是新手,我真的不明白为什么会这样。 我正在尝试运行这个程序:

            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()

除非我阻止,否则这将永远属于随机顺序。

帮助?

1 个答案:

答案 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

但我认为这对初学者来说会有点混乱。