順番に読み進めながら学べます

while ループと無限ループの回避

Python の while ループの基本と無限ループの回避を解説します。break / continue や for との使い分けまで一通り図解で押さえます。

前回の for 文は、回数や対象が事前に決まっているループに向いた構文でした。

この記事で学ぶ while 文は、「条件が成り立っている間ずっと」繰り返すためのループで、回数が事前に分からない処理に使います。リトライ処理、キューの消化、ゲームループなど、実務でもよく利用します。

while の基本 — 条件が True の間だけ繰り返す

while 条件: と書くと、条件が True の間、ブロックを繰り返し実行します。ループに入るたびに条件式が再評価され、False になった瞬間にループを抜けます

書き方は for と似ていますが、取り出す対象がなく条件そのもので回り続ける点が違います。

while の評価サイクル
開始条件を評価本体を実行変数を更新終了True再評価False

条件 → 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)を内部で用いています。

残りの問い合わせ件数が 0 件になるまでループします。

remaining = 3(残件数)を定義してください。

whileremaining > 0 の間、「残り X 件を対応中」と表示し、remaining を 1 ずつ減らしてください。

③ ループを抜けたら print("全件対応完了") を表示してください。

(正しく実行できれば解説が表示されます)

Python エディタ

コードを実行してください

無限ループを避ける — 終了条件を必ず用意する

while の最大の注意点は無限ループです。条件を False にする更新を忘れると、プログラムはいつまでも止まらなくなります。ブラウザ上のこのコンソールでも、数秒〜数十秒でタイムアウトしてページが固まる原因になります。

# ❌ 悪い例:本体の中で n が変わらないので永遠に終わらない
# n = 10
# while n > 0:
#     print(n)
# (実行するとブラウザが固まる/タイムアウトするので注意)

# ⭕️ 良い例:毎回 n を 1 減らし、いつか条件が False になる
n = 10
while n > 0:
    print(n)
    n -= 1
終了条件を作るパターン
while n > 0本体実行n -= 1更新ありいつか終了while n > 0本体実行更新なし無限ループ

while を書いたら「条件をどう False にするか」を即答できるか確認する

条件に登場する変数が、ループ本体で必ず更新されていることをコード上で指差し確認してから実行しましょう。

5 からのカウントダウンを実装します。

count = 5 を定義してください。

while count > 0: の中で、count を表示し、count -= 1 で 1 ずつ減らしてください。

③ ループを抜けたら「LIFT OFF!」を表示してください。

Python エディタ

コードを実行してください

while で break と continue を使う

前回 for 文で学んだ break / continue は、while でも同じ意味で使えます。

条件が True のままでも、途中で確定的にループを抜けたいときに break を使い、この回だけやり直したいときに continue を使うのが典型パターンです。

while での break と continue
while 条件if 条件breakループ外while 条件if 条件continue条件再評価TrueTrue脱出TrueTrue戻る
# リトライ処理のシミュレーション:最大 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ループの先頭で実行するのがポイントです。こうしておけば、continuebreak で途中脱出してもカウンタが飛ばされないため、「最大 5 回まで」の条件が崩れません。

ランダムではなく決め打ちの結果リストを使って、パスワード認証のリトライを書きます。

attempts = ["wrong", "wrong", "right", "wrong"](試行結果)を用意してください。

i = 0 から始め、while i < len(attempts): でループしてください。

③ 中では i を 1 増やし(先頭で)、結果を 1 件読んで、

 - "right" なら「X 回目で認証成功」と表示して break

 - そうでなければ「X 回目 失敗」と表示する

found というフラグ変数に真偽値を入れて、ループ外で、正解が見つからず全部失敗だった場合にだけ「ロックアウト」と表示してください。

Python エディタ

コードを実行してください

for と while の使い分け

forwhile はどちらも繰り返しですが、向いている場面が違います。迷ったときは次の表を思い出してください。

こんなとき向いている構文理由
リスト・辞書など対象の集合を全件処理したいfor先頭から終端までの走査が素直に書ける
0 から N-1 まで N 回繰り返したいfor + range(N)回数が数値で明示される
終了条件が複雑で、何回で止まるか事前に分からないwhile条件式そのものでループを制御できる
外部応答が成功するまでリトライしたいwhile + break成功時に即座に抜けられる
ユーザー入力やキューが空になるまで処理したいwhile空になった瞬間に自然に終了する

この記事では、while 文の基本と、無限ループを避けるための終了条件の作り方、break / continue によるループ制御、そして for と while の使い分けを学びました。

if / for / while の 3 つが基本文法について学べました。

QUIZ

理解度チェック

まずは1問ずつ答えてみましょう。

Q1次のコードの実行結果はどれですか?
n = 3
while n > 0:
print(n)
n -= 1

Q2while ループで無限ループを避けるために最も重要なことはどれですか?

Q3forwhile使い分けとして最も適切な説明はどれですか?