while ループの概要(条件が成り立つ間くり返す)
while ループは「条件式が True の間、ブロック内の処理をくり返す」構文です。回数が事前に決まらないとき(入力待ち、一定状態になるまでの待機、探索やリトライなど)に向いています。行末のコロン「:」と、その次の行からのインデントが必須です。
count = 3
while count > 0:
print(count)
count -= 1
# 3, 2, 1 を表示して終了
Python基本構文と条件式(ここが重要)
条件式は毎回評価される
ループの先頭に戻るたびに条件式が評価されます。False になった瞬間にループを抜けます。比較演算子(<, <=, >, >=, ==, !=)や論理演算子(and, or, not)を組み合わせて書けます。
i = 1
while i <= 5:
print(i)
i += 1
Python変化させるべき値を必ず更新する
条件が変化しないと無限ループになります。ループ内でカウンタを進める、入力を読み直す、状態を更新するなど「条件を False に向けて進めていく」更新が必須です。
# 悪い例(i を更新しないため終わらない)
i = 1
while i <= 5:
print(i) # 無限ループに陥る
Python無限ループとの付き合い方(深掘り)
明示的な脱出条件を入れる
意図的な無限ループ(while True:)は便利ですが、必ず脱出条件(if で break)を用意します。入力や状態が一定になったら抜けるのが定石です。
while True:
cmd = input("コマンド(quitで終了): ").strip().casefold()
if cmd == "quit":
break
print(f"受信: {cmd}")
Pythonタイムアウトや最大試行回数を設ける
外部待ちやリトライでは「上限」を設けると安全です。状態が変化しない障害に備えます。
attempts = 0
while attempts < 3:
if login():
print("ログイン成功")
break
attempts += 1
else:
print("3回失敗しました")
Python制御構文との組み合わせ(break / continue / else)
break(ループを即終了)
条件外の早期終了、見つかったら終了などに使います。
n = 10
while n > 0:
if n == 3:
print("ここで終わる")
break
n -= 1
Pythoncontinue(その周回をスキップ)
該当条件のときだけ残り処理を飛ばし、次の周回へ。
i = 0
while i < 5:
i += 1
if i % 2 == 0:
continue
print(i) # 1, 3, 5
Pythonwhile-else(正常終了時のみ実行)
ループが break されず「条件が False になって終わった」場合だけ else が実行されます。探索の成否、上限に達したかどうかの表現に向いています。
i = 1
while i <= 5:
if i == 99:
break # 今回は起きない
i += 1
else:
print("正常終了")
Python例題で身につける(定番パターン)
例題1:カウントダウンと発火条件
import time
n = 5
while n > 0:
print(n)
time.sleep(0.5)
n -= 1
print("発射!")
Python例題2:入力のバリデーション(再試行ループ)
while True:
s = input("年齢(整数): ").strip()
if s.isdigit():
age = int(s)
break
print("整数で入力してください")
print("受付:", age)
Python例題3:合計がしきい値に達するまで累積
threshold = 1000
total = 0
i = 1
while total < threshold:
total += i * 10
i += 1
print(f"合計 {total} / 回数 {i-1}")
Python例題4:乱数で当たりが出るまで試行(上限付き)
import random
attempts = 0
hit = False
while attempts < 10 and not hit:
attempts += 1
hit = (random.randint(1, 100) == 42)
print("当たり" if hit else "ハズレ")
Pythonwhile と for の使い分け(設計の指針)
回数が決まっている/並びを処理するなら for
リスト、range、文字列など「既存の並び」を順に処理するなら for が読みやすく安全です。
終了条件が状態に依存するなら while
「いつ終わるかは実行時に決まる」タイプ(入力、待機、探索、しきい値到達など)は while が自然です。状態を更新し、終了条件を明示しましょう。
重要ポイントの深掘り(落とし穴とベストプラクティス)
条件は“変化する値”で構成する
外側で固定された値に依存すると終わりません。ループ内で対象を必ず更新し、条件を False へ向けて進める流れを作ります。
ループ本体を短く保つ
長い処理は関数化し、while の中では「更新 → 判定 → 関数呼び出し」の最小構造にすると、バグが減り読みやすくなります。
def process(token):
print(f"処理: {token}")
token = "start"
while token != "stop":
process(token)
token = next_token(token) # 状態更新(例)
Pythonデバッグしやすい計測を入れる
進捗用のカウンタやログを仕込むと、終わらない・進まない問題の原因特定が容易になります。最大ステップのガードも有効です。
steps = 0
while condition():
steps += 1
if steps > 10_000:
raise RuntimeError("ループが長すぎます")
Pythonまとめ
while ループは「条件が成り立つ間くり返す」ための構文で、終了時期が実行時に決まる問題に最適です。無限ループを避けるために、更新と脱出条件を必ず用意し、必要なら上限・タイムアウトを設けます。break/continue/else で制御を整理し、ループ本体は短く、状態更新と判定を明確に。for は「並びを処理」、while は「状態に依存した継続」という指針を持てば、初心者でも安定した反復処理を設計できます。
