首頁 >後端開發 >Python教學 >為什麼我的遞歸輸入驗證函數不回傳任何內容?

為什麼我的遞歸輸入驗證函數不回傳任何內容?

Susan Sarandon
Susan Sarandon原創
2025-01-04 21:52:40734瀏覽

Why Does My Recursive Input Validation Function Return None?

為什麼我的遞歸函數似乎回傳 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn