為什麼我的遞歸函數似乎回傳 None?
考慮一個驗證使用者輸入的遞歸函數:
def get_input(): my_var = input('Enter "a" or "b": ') if my_var != "a" and my_var != "b": print('You didn\'t type "a" or "b". Try again.') get_input() # Recursively call the function else: return my_var print('got input:', get_input())
如果使用者輸入“a”或“b”,一切都會按預期進行。但是,如果使用者最初輸入無效輸入然後進行修正,則該函數似乎會傳回 None 而不是使用者的輸入。
這種不穩定的行為源自於遞迴分支中的疏忽。當函數再次正確地呼叫自身時,它無法傳回遞歸呼叫的結果:
if my_var != "a" and my_var != "b": print('You didn\'t type "a" or "b". Try again.') get_input() # This line should be replaced
要解決此問題,我們需要傳回從遞歸呼叫獲得的值:
if my_var != "a" and my_var != "b": print('You didn\'t type "a" or "b". Try again.') return get_input() # We return the result of the recursive call
此變更可確保函數正確地向下級聯遞歸堆疊,並傳回正確的使用者輸入。
# Modified function def get_input(): my_var = input('Enter "a" or "b": ') if my_var != "a" and my_var != "b": print('You didn\'t type "a" or "b". Try again.') return get_input() # We return the result of the recursive call else: return my_var print('got input:', get_input())
透過此修改,即使在處理無效輸入後,函數也將正確傳回使用者的輸入。
以上是為什麼我的遞歸輸入驗證函數不回傳任何內容?的詳細內容。更多資訊請關注PHP中文網其他相關文章!