break と continue でループを制御する
break と continue でループを制御する とは
ループの途中で抜ける break と、次の反復にスキップする continue の使い分けを学ぶ。本レッスンでは、break と continue でループを制御する の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。
break と continue でループを制御する
for や while の中で、特定の条件のときだけ「ループを抜けたい」「次の反復に進みたい」と思う場面はよくあります。Python では break でループを完全に脱出し、continue で現在の反復をスキップして次に進めます。本レッスンでは、両者の挙動の違いを、リストから条件を満たす値を抜き出す処理を題材に体感します。
break は緊急脱出、continue はスキップ。混同すると意図しない結果になります。
break と continue の役割
それぞれの動きを箇条書きでまとめます。
break— そのループ (最も内側) を 即座に終了 し、ループの次のコードに移るcontinue— ループ本体の 残りを飛ばし、次の反復に進む- どちらも
forでもwhileでも同じ意味で使える - 入れ子ループでは、最も内側のループだけが影響を受ける
Python
for i in range(10):
if i == 5:
break
print(i)
# 0 1 2 3 4 と表示され、5 で抜ける上のコードでは、i == 5 の瞬間に break が発火し、print を含むそれ以降の処理が 全部 飛ばされます。continue の場合は次の通りです。
Python
for i in range(6):
if i % 2 == 0:
continue
print(i)
# 1 3 5 と表示される偶数のときに continue が呼ばれ、print がスキップされるので、奇数だけが出力されます。
ループ制御を覚えると、フラグ変数を使わずに直感的なコードが書けるようになります。
条件付きで値を集める
本レッスンの課題は、整数リスト items と整数 limit を受け取り、limit を超えた瞬間にループを打ち切りつつ、負の値はスキップ して合計を求める関数を実装することです。break と continue を組み合わせる典型例です。
Python
def bounded_sum(items, limit):
total = 0
for v in items:
if v < 0:
continue
if total + v > limit:
break
total += v
return totalこの関数は items = [1, -3, 2, 5, 100]、limit = 10 のとき、1 を足して total = 1、-3 は continue でスキップ、2 を足して 3、5 を足して 8、次の 100 を足すと 108 で limit を超えるので break、最終的に total = 8 を返します。
continue と break は早期に分岐させることで「本筋」を短く保てます。
動きを追ってみる
上の例 items = [1, -3, 2, 5, 100]、limit = 10 のときの遷移は次の通りです。
ループの中で 2 段階のチェック (continue 用と break 用) を順番に書くのが定番のスタイルです。チェックの順番を間違えると意図しない値を足してしまうので、continue で「無視するもの」を先に弾くのが安全です。
よくある間違い
break と continue でつまずきやすいポイントは次の通りです。
breakとcontinueを逆に書いてしまい、ループが終わらない / 早すぎる脱出になるcontinueの後にprintを書いて、実行されないコードを残す- 入れ子ループの 外側 を抜けたつもりが、内側だけ抜けて困惑する
if ...: breakの条件式が常に真で、ループが 1 周しか回らない- フラグ変数と
breakの二重管理で読みづらくなる
Python
# NG: continue を if の前に書いてしまい、構文エラー
for v in items:
continue if v < 0
total += vPython では continue if ... のような 後置 if はサポートされていません。条件付きでスキップしたい時は必ず if ...:\n continue の形で書きます。これは三項演算子の a if cond else b とは別物なので混同しないようにしましょう。
入れ子ループから外側まで一気に抜けたいときは、関数化して return を使うのが綺麗です。
やってみよう
このレッスンでは、整数リスト items と整数 limit を受け取り、items を順番に走査して負の値はスキップ、合計が limit を 超えた瞬間 にループを打ち切り、それまでの合計を返す関数 bounded_sum(items, limit) を実装します。continue と break の登場する順序、合計をいつ更新するかをしっかり整理してから書きましょう。
余裕があれば、
continueを使わずにif v >= 0:のブロックで書き換えた場合のコード量を比べてみてください。
よくある質問
Q. このトピックは Python 以外の言語でも同じ書き方ですか?
A. 考え方は他言語と共通ですが、構文や標準ライブラリは異なります。Python はインデントでブロックを表し、コロン + 改行で構造を作るのが特徴です。他言語に移行する際は基本概念を維持しつつ、構文の差分を意識して書き換えると混乱が少ないです。
Q. 実行してエラーが出た場合の対処は?
A. エラーメッセージの最後の行(TypeError や NameError などの型)から原因と該当行を確認します。Python はトレースバックが下から上に読むと「呼び出し元 → 内部」の順で辿れます。print や IDE のデバッガで途中の変数を確認すると原因が見えてきます。
Q. 次のステップで何を学ぶべきですか?
A. 本レッスンの内容を理解できたら、本文の「やってみよう」を実装し、章末クイズに進むのがおすすめです。さらに自分のミニアプリ(電卓・todo・スコア集計など)に応用するとスキルが定着します。詰まったら本文の H2 セクションに戻って読み返してください。
次のレッスン
次は 入れ子ループで九九を作る で、ループの途中で抜ける break と、次の反復にスキップする continue の使い分けを学ぶ を学びます。
事前確認 — 進む前に次の 3 つができることを確認しましょう。
- break / continue の要点を自分の言葉で説明できる
- このレッスンの最小コード (または操作手順) を見ずに書ける
- 練習問題やクイズで間違えた箇所を読み直して理解した
理解度チェック (30 秒)
Q. break / continue とは何か、1 文で説明してください。
A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。
関連レッスン
要件
- for と continue で負の値をスキップすること
- for と break で limit 超過の瞬間に脱出すること
- 戻り値は return で返すこと
入出力例
test-cases.txt
bounded_sum([1,-3,2,5,100], 10) → 8
bounded_sum([2,3,4,5], 6) → 5
bounded_sum([1,2,3], 100) → 6
bounded_sum([-1,-2,3,4], 10) → 7
bounded_sum([], 10) → 0