Pythonのinput
関数を用いたプログラムをユーザーに使用してもらった時、必ずしもユーザーが製作者の意図した入力を行ってくれるとは限らない。
そうしてエラーが出る度にプログラムが終了していたのではあまりに不便であるため、異常な入力があった際はそれに対する注意を表示し、再び入力をさせる仕組みが必要になる。
この記事では、input
関数の再入力の仕組みを、while
文を使わずに構築する方法について示す(筆者は大量のデータを扱う作業をする中で、処理速度が非常に遅いwhile
文が嫌いになった)。
例として、

で提示したプログラムの一部を用い、その動作を解説することによって構築手法を示したい。
def How_many_players():
player_num = input("How many players? ... ")
try:
player_num = int(player_num)
except:
print("Please enter 2, 3 or 4.")
return How_many_players()
if player_num < 2 or player_num > 4:
print("This game is for 2 ~ 4 people.")
return How_many_players()
else:
return player_num
player_num = How_many_players()
このコードは、2~4人のプレイヤーを想定したゲームプログラムの一部である。
How_many_players
関数は「何人のプレイヤーが参加するか?」を尋ねることを目的とした関数であり、この戻り値がint
変数player_num
に格納されるが 、この質問に対して「100」、「2.2」、「あいうえお」などが入力されることも考えられ、その場合には当然エラーが生じる。
そのため、How_many_players
関数では、3行目のtry
文でまず「入力は整数値か?」を判断している。
この時、入力が「2.2」や「あいうえお」であった場合は例外処理(except
)となるが、ここで行う処理は
Please enter 2, 3 or 4.
と注意を表示した後に、return How_many_players()
、すなわち、How_many_players
関数自身をもう一度呼び出して、2回目にHow_many_players
関数の戻り値を1回目のものとして返す。
同様に、8行目のif文では「入力された整数は、2~4の範囲にあるか」を判断し、範囲外である場合には
This game is for 2~4 people.
という注意を表示した後、やはりreturn How_many_players()
である。
エラーが生じて再度How_many_players
関数が呼び出された後も、当然その関数は同様のエラーチェック機能を有しているため、さらにエラーが続いた場合は何度もHow_many_players
関数が呼び出されることになる。例えば2回の不正な入力があり、3回目でようやく成功した場合には、
player_num
= 戻り値 ← 2回目の戻り値 ← 3回目の戻り値
となり、player_num
には正常な値が入ることになる。
以上のように、不正な入力があった際に自分自身を再び呼び出す関数を用いることで、while
文を用いずとも、正常な値が得られるまで入力を繰り返させるプログラムを作ることができる。
コメント