while文で繰り返し処理を組もう
Pythonにおいて、繰り返し処理を行う代表的な方法のひとつにwhile文があります。while文は「ある条件が成り立っている限り処理を繰り返す」という仕組みを持ち、条件がFalseになったタイミングでループが終了します。
for文と比べると、while文は「いつまで繰り返すか決まっていない」ケースでよく使われます。例えば、ユーザーの入力待ちを続けるような場合や、一定の条件を満たすまでゲームロジックをループさせたい場合など、条件の判定によって処理を継続するかどうかを動的に決めるシチュエーションで有用です。
while文の基本構文
まずはwhile文の基本的な書き方を確認してみましょう。構文は以下のようになります。
while 条件式>:
# 条件式がTrueの間、繰り返す処理をここに書く
条件式がTrueである間はwhile
ブロック内の処理を繰り返し、Falseになった瞬間にループが終了します。最もシンプルな例として、変数を使ったカウンタ処理を見てみましょう。
counter = 0
while counter 5:
print("counter:", counter)
counter += 1 # 1ずつインクリメントする
上記の例では、counter < 5
の条件がTrueである間、while
文の内部が繰り返し実行されます。カウンタが0から始まり、5未満の値を持つうちはprint
が呼ばれ、最終的にcounterが5になるとcounter < 5
がFalseとなりループが終了します。
breakとcontinue
while文では、for文と同様にbreak
とcontinue
を使用することができます。
- break: ループを強制的に抜ける
- continue: その回の処理をスキップして次の繰り返しに移る
例えば、ユーザーが「quit」と入力したらループを強制終了するロジックなどにbreak
を活用できます。continue
は「ある条件のときは処理を飛ばして、すぐに次の繰り返しに進みたい」場合に便利です。
ユーザー入力を使った簡単なゲーム風ロジック
実際に、while文の特性を活かした「ゲーム風ロジック」の例を示します。ここでは、プレイヤーが正しい合言葉を入力するまで繰り返す仕組みを作り、正解ならループを抜けるというシナリオを考えましょう。
secret_word = "python"
user_input = ""
print("ゲーム開始!正しい合言葉を当てるまで無限に聞かれます。")
while True:
user_input = input("合言葉を入力してください: ")
if user_input == secret_word:
print("正解です!ゲームを終了します。")
break # whileループを抜ける
else:
print("不正解です。もう一度試してください。")
このスクリプトでは、「正解を入力するまでループし続ける」という使い方をしています。while True
はその名の通り常にTrueな状態のため無限ループになり、何らかの条件を満たした時点でbreak
を使って抜けるのが典型パターンです。
条件が変化しないままのwhileループに注意
while文を利用する際に最も気をつけたいのが、条件が変化せず無限にループが続いてしまうという状況です。例えば、以下のようにカウンタを更新しないコードを書くと、延々と処理が終わりません。
counter = 0
while counter < 5:
print("counter:", counter)
# counter += 1 を書き忘れた場合、counter はずっと0のまま
# このため、counter < 5 が永遠にTrueとなりループが終わらない
こういったバグを避けるためにも、ループの条件がいつ変化しているのかを必ず確認する癖をつけましょう。「カウンタをインクリメントし忘れていないか」「条件分岐でループを抜ける手段があるか」などを定期的にチェックするのが大切です。
while文のバリエーション: while-else構文
Pythonのユニークな機能として、while文にelse
節を組み合わせることができます。これは「whileループが正常に最後まで実行された場合のみ実行されるブロック」を示します。break
などで途中で抜けると、else
のブロックは実行されません。
counter = 0
while counter < 5:
print("counter:", counter)
counter += 1
else:
print("ループが最後まで実行されました。")
上記の例では、カウンタが5以上になってcounter < 5
がFalseとなり、ループが終了するとelse
の処理が実行されます。もしループ中にbreak
が呼ばれていた場合はelse
節はスキップされるため、エラーが起きたかどうかや、特定の条件で中断されたかどうかを判定する手段として利用可能です。
while文を使った応用例: 簡単な当てゲーム
次は、数値当てゲームの例をもう少し詳しく見てみましょう。プレイヤーはランダムに生成された数字を当てるまで繰り返し入力し、正解時には何回目で当たったかを表示してループを終了する、といったロジックです。
import random
answer = random.randint(1, 10) # 1~10のランダムな整数
attempts = 0
print("数当てゲームを開始します!1~10の数字を当ててください。")
while True:
guess = input("予想した数字を入力してください (終了するには 'q' と入力): ")
if guess.lower() == "q":
print("ゲームを終了します。答えは", answer, "でした。")
break # 途中終了
# 入力が数字であることを前提に処理(エラーハンドリングは省略)
guess = int(guess)
attempts += 1
if guess == answer:
print("正解です!", attempts, "回目で当たりました!")
break # ゲームクリア
elif guess answer:
print("もっと大きい数字です。")
else:
print("もっと小さい数字です。")
ここでもwhile True
で無限ループを構成し、break
を使ってループを脱出するパターンを採用しています。ゲームが進行している間はattempts
で回数をカウントし、どの段階で当たったのかを記録しています。数字が当たるまで繰り返す仕組みや途中でやめたいときは「q」を入力して強制的に抜けられる設計が、while文ならではの汎用性をうまく活かした例です。
while文とfor文の使い分け
Pythonでループ処理を書くとき、多くの方が最初に学ぶのはfor文かもしれません。for x in range(5):
のように回数が明確に定まっている場合、for文は非常にシンプルで読みやすい構文を提供します。一方、回数が決まっていない繰り返し、特にユーザーの入力や不定の条件が絡む場合はwhile文の出番です。
「いつまで繰り返すのか」「繰り返しの打ち切り条件はどうなるのか」という視点をもとに、while文かfor文か、あるいは両方の組み合わせかを選択すると良いでしょう。
まとめ
while文は「条件を満たす限り繰り返す」という特徴を持ち、カウンタの制御やユーザーの入力を活用したゲームロジック、条件が変化するまで待ち受ける処理など、さまざまな場面で応用できます。特に以下のポイントは初心者のうちからしっかり押さえておきたい部分です。
- while文の基本構文:
while 条件式:
- 条件式がTrueの間のみループが続く。Falseになるとループ終了
break
とcontinue
の使い方while True
とbreak
を組み合わせた無限ループの管理- 条件が変化しないままループし続けないように注意する
- while-else構文でループ完了時の追加処理が書ける
本記事のサンプルコードを実行しながら、実際に「どのタイミングでループが終わるのか」「break
がどう働くのか」を試してみるとより理解が深まるはずです。慣れてきたら、さらに複雑なゲームやインタラクティブなコンソールアプリなどを作ってみると良いでしょう。while文の使いこなしは、条件制御を自在に操るための大きな一歩となります。