2016-05-12 69 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

期待!全局變量有什麼問題? –

相關問題