Pythonのinput
関数を使ってユーザーからの入力を受け取る際、ユーザーが意図しない入力を行う可能性があります。そのため、異常な入力があった際には注意を表示し、再度入力を求める仕組みが必要になります。この記事では、そのような再入力の仕組みをwhile
文を使わずに構築する方法について説明します。
まず、以下のコードは、2~4人のプレイヤーを想定したゲームプログラムの一部です。
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()
このコードでは、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()
となります。
以上のように、不正な入力があった際に自分自身を再び呼び出す関数を用いることで、while
文を用いずとも、正常な値が得られるまで入力を繰り返させるプログラムを作ることができます。