ホームページ >バックエンド開発 >Python チュートリアル >再帰的入力検証関数が何も返さないのはなぜですか?
再帰関数が 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 サイトの他の関連記事を参照してください。