自分自身を呼び出すこの関数があります:
_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
_
したがって、if
ステートメントでcallingget_input()
だけでなく、return
itにする必要があります。
_if my_var != "a" and my_var != "b":
print('You didn\'t type "a" or "b". Try again.')
return get_input()
_
None以外の値を返すには、returnステートメントを使用する必要があります。
あなたの場合、ifブロックは1つのブランチを実行するときにのみリターンを実行します。リターンをif/elseブロックの外側に移動するか、両方のオプションにリターンを設定します。
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()
else:
return my_var
print('got input:', get_input())