2015-04-23 129 views
1

我正在處理這個項目,當代碼試圖返回「guess」變量時,我不斷收到這個問題,而不是返回「guess」的值,它會將第9行轉換爲字符串原因,然後返回。當我去使用返回的值時,Python說這個值是「NoneType」。任何人都可以告訴我我的功能有什麼問題嗎?

def ask_question(max_length, rowOrCol, guessNumber): 
    guess = raw_input("What is the "+rowOrCol+" number of your "+guessNumber+" guess? ") 
    try: 
     guess = int(guess) 
     if guess <= max_length: 
      return guess 
     else: 
      print "That number was too big, it must be no larger then " +str(max_length) 
      ask_question(max_length, rowOrCol, guessNumber) 
    except(TypeError): 
     print "Only numbers are accepted, please try again!" 
     ask_question(max_length, rowOrCol, guessNumber) 

我調用該函數這一行:

first_guess_row = ask_question(4, "row", "first") 

有什麼我失蹤?

+1

嘗試在這條線(9號線)的開頭加上'return'聲明;) – alfasin

回答

4
當然

所有的分支需要返回....

... 
     else: 
      print "That number was too big, it must be no larger then " +str(max_length) 
      return ask_question(max_length, rowOrCol, guessNumber) 
    except(TypeError): 
     print "Only numbers are accepted, please try again!" 
     return ask_question(max_length, rowOrCol, guessNumber) 

你回顧該功能前...但你扔掉它的返回值

0

這裏的另一種方法,而無需使用遞歸函數調用。

def ask_question(max_length, rowOrCol, guessNumber): 
    while True: 
     try: 
      guess = int(raw_input("What is the "+rowOrCol+" number of your "+guessNumber+" guess? ")) 
      if guess <= max_length: 
       return guess 
      else: 
       print "That number was too big, it must be no larger then " +str(max_length) 
     except(ValueError): 
      print "Only numbers are accepted, please try again!" 
2

的線9和12,你正在做一個遞歸調用

遞歸調用是全新的調用該函數內的函數。 執行第6行的新調用ask_question會返回一個值。但它會在原始的ask_question調用中返回。

因此,你需要改變

ask_question(max_length, rowOrCol, guessNumber) 
第9行

和12

return ask_question(max_length, rowOrCol, guessNumber) 

檢索值。

另一個注意事項:遞歸調用爲每個遞歸使用額外的內存,這可能會導致速度變慢甚至崩潰python(如果遞歸很多,取決於函數的大小)。我建議把你的代碼放到這樣一個循環:

continue_asking = True 
while continue_asking: 
    guess = raw_input("What is the "+rowOrCol+" number of your "+guessNumber+" guess? ") 
    try: 
     # typecheck the guess value 
     guess = int(guess) 
    except (TypeError): 
     print "Only numbers are accepted, please try again!" 
     continue 

    if guess <= max_length: 
     return guess 
    else: 
     print "That number was too big, it must be no larger then " +str(max_length) 
相關問題