whileを用いた 繰り返し文
第4回では、for文を用いた 繰り返し文 を紹介しました。
第5回では、while文を用いた繰り返し文の別の形式を学んでいきましょう。while文の方が表現できる幅が広い分、使いこなす難易度が少し高いです。
while文の基本
サンプルコードを見てみましょう。
month = 1
while month <= 12:
print(month, "月")
month += 1
このコードを実行すると、
![Python while文 実行結果](https://sp-ao.shortpixel.ai/client/to_webp,q_glossy,ret_img,w_698,h_374/https://se-media.jp/wp-content/uploads/2023/07/スクリーンショット-2025-02-10-114010.png)
上のように、1月から12月までが順番に出力されます。while文の基本は、
while 条件 :
というシンプルな構文です。条件部分に記述される内容がTrueである限り、コロン以下のブロックで指定した部分を何度でも繰り返し処理することが出来ます。しかしここで大きな注意点があります。
繰り返しのどこかで終了してくれる条件を指定する必要がある
先ほどのサンプルコードであれば、繰り返しブロックが実行されるたびに month += 1 も実行されるため、monthの値が13になった段階で「month <= 12」という条件式がFalseになり、繰り返しが終了してくれます。
では、以下のようなコードを記述したとしたらどうなってしまうでしょうか。
month = 1
while month <= 12:
print(month, "月")
month += 1
このコードを実行すると、ターミナルには
![Python while文 実行結果_無限ループ](https://sp-ao.shortpixel.ai/client/to_webp,q_glossy,ret_img,w_878,h_194/https://se-media.jp/wp-content/uploads/2023/07/スクリーンショット-2025-02-10-114332.png)
…
というように、1月という出力がされ続けることになります。この状態を無限ループと呼びます。
原因は month += 1 という記述がインデントされておらず、繰り返し時に実行するブロックに含めてないためです。while文の処理が永遠に繰り返されて、プログラムが終了しなくなってしまうため十分な注意が必要となります。
今回の変数 month のように、while文において繰り返し回数を制御している変数を「カウンタ変数」と呼びます。カウンタ変数の設定を間違えてしまうと無限ループとなってしまいますが、うまく使いこなせれば下記のように、「繰り返し回数に上限がない」柔軟なプログラムを作成することもできます。
decision = False
while decision == False:
answer = int(input("2 × 3 + 1 は?>>"))
if answer == 7:
print("正解です!繰り返しを終了します。")
decision = True
このコードを実行すると、input() によって変数 answer に 7 が代入されるまで何度も繰り返してくれるプログラムを作ることが出来ます。answer に7が代入されているときのみに条件を満たすif文に、カウンタ変数 decision を True に書き換えてくれるコードを記述しているからです。
![Python while文 実行結果_正解を入力するまで繰り返す](https://sp-ao.shortpixel.ai/client/to_webp,q_glossy,ret_img,w_699,h_124/https://se-media.jp/wp-content/uploads/2023/07/スクリーンショット-2025-02-10-114845.png)
このような応用を身に着けることで、多彩な繰り返し文を作成することが出来るようになります。いろいろなコードを作成してみましょう。
Python に関するその他の記事はこちらから。
![](https://sp-ao.shortpixel.ai/client/to_webp,q_glossy,ret_img,w_320,h_180/https://se-media.jp/wp-content/uploads/2024/04/6-1-1000x563.jpg)
![](https://sp-ao.shortpixel.ai/client/to_webp,q_glossy,ret_img,w_320,h_180/https://se-media.jp/wp-content/uploads/2024/04/4-1-1000x563.jpg)
コメント