2016-05-12 75 views
0

我是新手,我真的不明白为什么会发生这种情况。 我试图运行此程序:运行简单程序时出现“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() 

什么看起来像一个随机的顺序,除非我停下来,这将永远犹豫。

帮助?

+0

这不是完整的错误。我们需要看到整个事情。另外,你应该阅读[mcve]。我们需要看到您正在运行的确切代码。在Python中,缩进是非常重要的,所以值得您花时间去修复。 –

+0

这是无限的。我已经让它运行了几分钟,并且一直在打印。 –

+0

好吧,除了Exception之外,一个语法错误。 –

回答

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 

但我觉得这会让初学者感到困惑。

+0

谢谢!而已。 –

+0

我将发布一个更新,说明如何重构此代码以在几分钟内不使用全局变量 – Keatinge

+0

期待!全局变量有什么问题? –

相关问题