タイトル: 繰り返しの中断 (break)
SEOタイトル: Python break 完全ガイド(for・while を途中で抜ける / else 節 / 多重ループ / continue との違い / 実例)
| この記事の要点 |
|
break とは
break は for や while による繰り返し処理をその時点で打ち切り、ループの外へ抜ける制御文です。条件にあてはまる要素が見つかった瞬間に探索を打ち切る、無限ループを終了させる、といった場面で使います。
基本構文
# while で使う例
n = 0
while True:
n += 1
print(n)
if n == 10:
break # ← ここで while を抜ける
# 出力: 1 〜 10
for ループで使う
# 最初に見つかった偶数で打ち切る
nums = [1, 3, 5, 4, 7, 9]
for n in nums:
if n % 2 == 0:
print(f"最初の偶数: {n}")
break
# 出力: 最初の偶数: 4
break / continue / pass の違い
| 文 | 意味 | 典型用途 |
|---|---|---|
break | ループを抜ける | 条件を満たしたら以降不要 |
continue | 次の周回へ進む(残りスキップ) | 特定要素だけ処理を飛ばす |
pass | 何もしない(構文的に必要な場所の埋め草) | 空関数・空クラス |
for i in range(5):
if i == 2:
continue # i=2 はスキップ(ループは続行)
if i == 4:
break # i=4 でループ脱出
print(i)
# 出力: 0, 1, 3
for...else / while...else の挙動
Python では for / while に else 節を付けられます。これは「break せずにループが終わったとき」だけ実行される、少し珍しい構文です。
nums = [1, 3, 5, 7]
for n in nums:
if n == 4:
print("発見")
break
else:
# break しなかったときに実行される
print("見つかりませんでした")
# 出力: 見つかりませんでした
nums = [1, 3, 4, 5]
for n in nums:
if n == 4:
print("発見")
break
else:
print("見つかりませんでした")
# 出力: 発見
多重ループを抜けたいとき
break はもっとも内側のループ 1 段だけ抜けます。Python には break n のような構文はないので、以下のいずれかで対応します。
方法 1: フラグ変数
found = False
for i in range(10):
for j in range(10):
if i * j == 42:
found = True
break
if found:
break
print(i, j)
方法 2: 関数化して return
def find_pair():
for i in range(10):
for j in range(10):
if i * j == 42:
return i, j
return None
print(find_pair())
方法 3: for...else を活用
for i in range(10):
for j in range(10):
if i * j == 42:
break
else:
# 内側ループが break しなかったら次の i へ
continue
# 内側で break が起きたらここで外側 break
break
print(i, j)
典型的な使い方
無限ループの終了
while True:
cmd = input("> ")
if cmd in ("quit", "exit"):
break
print(f"入力: {cmd}")
線形探索の早期打ち切り
target = "Bob"
for name in ["Alice", "Bob", "Carol"]:
if name == target:
print("見つかった")
break
条件付き集計の打ち切り
# 合計が 100 を超えたら止める
total = 0
nums = [30, 25, 20, 40, 15, 50]
for n in nums:
total += n
if total > 100:
break
print(total) # 115(30+25+20+40 まで足した次の n=15+... ではない)
他言語の break との比較
| 言語 | 挙動 |
|---|---|
| Python | break で 1 段抜ける。多重抜けは構文なし |
| Java | break label; でラベル付きループまで一気に抜けられる |
| JavaScript | Java と同じくラベル可 |
| Go | break LABEL でラベル付き可 |
| C / C++ | 1 段のみ。多重は goto やフラグ |
よくある落とし穴
ifの中ではなくループ外に書いてしまい構文エラー(breakは必ずループ内で)- 2 重ループの内側で break しても外側ループは継続
for...elseの else 節は「break しなかったとき」に動く(直感と逆になりがち)- 探索後に「見つかったかどうか」を区別したいなら、フラグ変数か
for...elseを使う