break と continue でループを制御する

生田 陸人
LuaGate エンジニア / 現役エンジニア
編集 LuaGate編集部

break と continue でループを制御する とは

ループの途中で抜ける break と、次の反復にスキップする continue の使い分けを学ぶ。本レッスンでは、break と continue でループを制御する の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。

break と continue でループを制御する

forwhile の中で、特定の条件のときだけ「ループを抜けたい」「次の反復に進みたい」と思う場面はよくあります。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 を超えた瞬間にループを打ち切りつつ、負の値はスキップ して合計を求める関数を実装することです。breakcontinue を組み合わせる典型例です。

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-3continue でスキップ、2 を足して 35 を足して 8、次の 100 を足すと 108limit を超えるので break、最終的に total = 8 を返します。

continue と break は早期に分岐させることで「本筋」を短く保てます。

動きを追ってみる

上の例 items = [1, -3, 2, 5, 100]limit = 10 のときの遷移は次の通りです。

diagram (will load when visible)

ループの中で 2 段階のチェック (continue 用と break 用) を順番に書くのが定番のスタイルです。チェックの順番を間違えると意図しない値を足してしまうので、continue で「無視するもの」を先に弾くのが安全です。

よくある間違い

breakcontinue でつまずきやすいポイントは次の通りです。

  • breakcontinue を逆に書いてしまい、ループが終わらない / 早すぎる脱出になる
  • continue の後に print を書いて、実行されないコードを残す
  • 入れ子ループの 外側 を抜けたつもりが、内側だけ抜けて困惑する
  • if ...: break の条件式が常に真で、ループが 1 周しか回らない
  • フラグ変数と break の二重管理で読みづらくなる

Python

# NG: continue を if の前に書いてしまい、構文エラー for v in items: continue if v < 0 total += v

Python では continue if ... のような 後置 if はサポートされていません。条件付きでスキップしたい時は必ず if ...:\n continue の形で書きます。これは三項演算子の a if cond else b とは別物なので混同しないようにしましょう。

入れ子ループから外側まで一気に抜けたいときは、関数化して return を使うのが綺麗です。

やってみよう

このレッスンでは、整数リスト items と整数 limit を受け取り、items を順番に走査して負の値はスキップ、合計が limit超えた瞬間 にループを打ち切り、それまでの合計を返す関数 bounded_sum(items, limit) を実装します。continuebreak の登場する順序、合計をいつ更新するかをしっかり整理してから書きましょう。

余裕があれば、continue を使わずに if v >= 0: のブロックで書き換えた場合のコード量を比べてみてください。

よくある質問

Q. このトピックは Python 以外の言語でも同じ書き方ですか?

A. 考え方は他言語と共通ですが、構文や標準ライブラリは異なります。Python はインデントでブロックを表し、コロン + 改行で構造を作るのが特徴です。他言語に移行する際は基本概念を維持しつつ、構文の差分を意識して書き換えると混乱が少ないです。

Q. 実行してエラーが出た場合の対処は?

A. エラーメッセージの最後の行(TypeError や NameError などの型)から原因と該当行を確認します。Python はトレースバックが下から上に読むと「呼び出し元 → 内部」の順で辿れます。print や IDE のデバッガで途中の変数を確認すると原因が見えてきます。

Q. 次のステップで何を学ぶべきですか?

A. 本レッスンの内容を理解できたら、本文の「やってみよう」を実装し、章末クイズに進むのがおすすめです。さらに自分のミニアプリ(電卓・todo・スコア集計など)に応用するとスキルが定着します。詰まったら本文の H2 セクションに戻って読み返してください。

次のレッスン

次は 入れ子ループで九九を作る で、ループの途中で抜ける break と、次の反復にスキップする continue の使い分けを学ぶ を学びます。

事前確認 — 進む前に次の 3 つができることを確認しましょう。

  1. break / continue の要点を自分の言葉で説明できる
  2. このレッスンの最小コード (または操作手順) を見ずに書ける
  3. 練習問題やクイズで間違えた箇所を読み直して理解した

理解度チェック (30 秒)

Q. break / continue とは何か、1 文で説明してください。

この章のポイント

A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。

関連レッスン

要件

  1. for と continue で負の値をスキップすること
  2. for と break で limit 超過の瞬間に脱出すること
  3. 戻り値は 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

ヒント

main.py
main.py
学習モード

メモ

break と continue でループを制御する

⌘S で保存