Python | 文法の基本:while ループ

Python
スポンサーリンク

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
Python

continue(その周回をスキップ)

該当条件のときだけ残り処理を飛ばし、次の周回へ。

i = 0
while i < 5:
    i += 1
    if i % 2 == 0:
        continue
    print(i)  # 1, 3, 5
Python

while-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 "ハズレ")
Python

while と 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 は「状態に依存した継続」という指針を持てば、初心者でも安定した反復処理を設計できます。

タイトルとURLをコピーしました