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文を用いずとも、正常な値が得られるまで入力を繰り返させるプログラムを作ることができます。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です