1. ホーム
  2. python

[解決済み] 再帰的関数はなぜNoneを返すのですか?

2023-05-05 07:02:48

質問

自分自身を呼び出す関数があります。

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()
    else:
        return my_var

print('got input:', get_input())

これで、"a" や "b" とだけ入力すれば、すべて正常に動作するようになりました。

Type "a" or "b": a
got input: a

しかし、他のものを入力した後に "a" や "b" を入力すると、こうなります。

Type "a" or "b": purple
You didn't type "a" or "b". Try again.
Type "a" or "b": a
got input: None

なぜか get_input()None しか返さないはずなので my_var . では、この None はどこから来て、どのように私の関数を修正すればよいのでしょうか?

どのように解決するには?

を返します。 None というのは、再帰的に呼び出すと

if my_var != "a" and my_var != "b":
    print('You didn\'t type "a" or "b". Try again.')
    get_input()

...値を返さない。

つまり、再帰が起こる一方で、戻り値は破棄され、関数の終わりから外れてしまうのです。 関数の終わりから外れるということは、pythonが暗黙のうちに None を返すということです。

>>> def f(x):
...     pass
>>> print(f(20))
None

ということで、代わりに を呼び出す get_input() で、あなたの if 文の中で return を追加する必要があります。

if my_var != "a" and my_var != "b":
    print('You didn\'t type "a" or "b". Try again.')
    return get_input()