Q1次のコードの実行結果はどれですか?n = 3
while n > 0:
print(n)
n -= 1
while ループと無限ループの回避
Python の while ループの基本と無限ループの回避を解説します。break / continue や for との使い分けまで一通り図解で押さえます。
前回の for 文は、回数や対象が事前に決まっているループに向いた構文でした。
この記事で学ぶ while 文は、「条件が成り立っている間ずっと」繰り返すためのループで、回数が事前に分からない処理に使います。リトライ処理、キューの消化、ゲームループなど、実務でもよく利用します。
while の基本 — 条件が True の間だけ繰り返す
while 条件: と書くと、条件が True の間、ブロックを繰り返し実行します。ループに入るたびに条件式が再評価され、False になった瞬間にループを抜けます。
書き方は for と似ていますが、取り出す対象がなく条件そのもので回り続ける点が違います。
条件 → True なら本体を実行 → 再び条件 → False になったら終了、を繰り返す。本体の中で条件を False に近づけるのが while の鉄則です。
# 0 から 4 まで表示する基本形
count = 0
while count < 5:
print(count)
count += 1
# 0 / 1 / 2 / 3 / 4
# キューに残っているタスクを消化する
tasks = ["send mail", "backup", "deploy"]
while tasks:
task = tasks.pop(0) # 先頭から取り出す
print(f"処理中: {task}")
# 処理中: send mail / 処理中: backup / 処理中: deploy
2 つ目の例は、リストが空になった時点で while tasks: が False に切り替わることを利用した書き方です。前回学んだ真偽評価(空リストは False)を内部で用いています。
無限ループを避ける — 終了条件を必ず用意する
while の最大の注意点は無限ループです。条件を False にする更新を忘れると、プログラムはいつまでも止まらなくなります。ブラウザ上のこのコンソールでも、数秒〜数十秒でタイムアウトしてページが固まる原因になります。
# ❌ 悪い例:本体の中で n が変わらないので永遠に終わらない
# n = 10
# while n > 0:
# print(n)
# (実行するとブラウザが固まる/タイムアウトするので注意)
# ⭕️ 良い例:毎回 n を 1 減らし、いつか条件が False になる
n = 10
while n > 0:
print(n)
n -= 1
while を書いたら「条件をどう False にするか」を即答できるか確認する
条件に登場する変数が、ループ本体で必ず更新されていることをコード上で指差し確認してから実行しましょう。
while で break と continue を使う
前回 for 文で学んだ break / continue は、while でも同じ意味で使えます。
条件が True のままでも、途中で確定的にループを抜けたいときに break を使い、この回だけやり直したいときに continue を使うのが典型パターンです。
# リトライ処理のシミュレーション:最大 5 回まで、見つかったら break
responses = [None, None, "OK", "OK", "OK"] # 外部 API の応答を仮で並べたもの
attempt = 0
found = False
while attempt < 5:
attempt += 1
response = responses[attempt - 1]
if response is None:
print(f"{attempt} 回目: 応答なし、リトライ")
continue # その回だけスキップして次のループへ
print(f"{attempt} 回目: 応答 {response} を受信、終了")
found = True
break # 成功したのでループ終了
if not found:
print("最大試行回数に達しました")
attempt += 1 をループの先頭で実行するのがポイントです。こうしておけば、continue や break で途中脱出してもカウンタが飛ばされないため、「最大 5 回まで」の条件が崩れません。
for と while の使い分け
for と while はどちらも繰り返しですが、向いている場面が違います。迷ったときは次の表を思い出してください。
| こんなとき | 向いている構文 | 理由 |
|---|---|---|
| リスト・辞書など対象の集合を全件処理したい | for | 先頭から終端までの走査が素直に書ける |
| 0 から N-1 まで N 回繰り返したい | for + range(N) | 回数が数値で明示される |
| 終了条件が複雑で、何回で止まるか事前に分からない | while | 条件式そのものでループを制御できる |
| 外部応答が成功するまでリトライしたい | while + break | 成功時に即座に抜けられる |
| ユーザー入力やキューが空になるまで処理したい | while | 空になった瞬間に自然に終了する |
この記事では、while 文の基本と、無限ループを避けるための終了条件の作り方、break / continue によるループ制御、そして for と while の使い分けを学びました。
if / for / while の 3 つが基本文法について学べました。
理解度チェック
まずは1問ずつ答えてみましょう。
Q2while ループで無限ループを避けるために最も重要なことはどれですか?
Q3for と while の使い分けとして最も適切な説明はどれですか?