ホームページ >バックエンド開発 >Python チュートリアル >再帰的入力検証関数が何も返さないのはなぜですか?

再帰的入力検証関数が何も返さないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-04 21:52:40728ブラウズ

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

この変更により、関数が再帰スタックを適切にカスケードダウンして、修正されたユーザーが返されるようになります。 input.

# 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。