breakとcontinueの概要
ループ処理を施したいとき、最初から最後まで全ての要素を処理することもあれば、途中で条件によって処理を変えたいケースもあります。
例えば、「目的のデータを見つけたらそこで終了したい」とか、「特定の条件に合わない要素は処理をスキップしたい」といった状況です。
このような場面で活躍するのが、break文とcontinue文です。どちらもループの流れを変える制御文ですが、それぞれ異なる役割を持っています。
【関連】
Pythonをもっと詳しく学ぶならpaizaラーニング
breakの動作と特徴
break文は、実行されるとループを完全に終了します。
forループでもwhileループでも、break文が実行された時点でループは終わり、ループの次の処理に移ります。
出力結果
イヌ
ネコこの例では、リストの中に「ゾウ」が見つかった時点でbreak文が実行され、ループが完全に終了します。そのため、「ゾウ」とその後の「ライオン」は表示されません。
また、入れ子(ネスト)になったループで使う場合は注意が必要です。
break文は最も内側のループだけを抜けるので、外側のループまで終了させたい場合は、フラグ変数を使うか関数化してreturnを使う必要があります。
continueの動作と特徴
continue文は、現在の繰り返し処理だけをスキップして、次の繰り返しに進みます。「今回はパスして、次の要素に進む」というイメージです。
ループ自体は終了せず、残りの要素について処理を続けます。
出力結果
イヌ
ネコ
ライオンこの例では、「ゾウ」のときだけcontinue文が実行されてprintがスキップされますが、ループ自体は続いているので「ライオン」は表示されます。
特定の条件に合う要素だけを処理から除外したいとき、continue文を使うとコードがシンプルになります。
なお、以下の記事でもcontinueについて詳しく解説しています。あわせてご覧ください。
【関連】Pythonのcontinueを初心者向けに解説!基本からループ制御まで
passとの違い
ループ制御でよく混同されるのがpass文です。pass文は「何もしない」ことを明示するためのプレースホルダーで、ループの流れには一切影響しません。
break文やcontinue文とは異なり、ループ制御を行わず、単に構文上必要な場所を埋めるために使います。
プレースホルダーとは、「後で埋める予定の空欄」のような役割を果たすものです。
Pythonでは、if文やfor文、関数定義などのブロックに何も処理を書かないとエラーになってしまいます。
そんなとき、pass文を置いておくことで「ここは意図的に空けています」と示すことができるのです。
出力結果
回数: 0
回数: 1
回数: 2pass文は、コードのひな型を作成するときや、条件分岐で「何もしない」ケースを明示したいときに使用します。
なお、以下の記事ではcontinueとpassの違いや使い分けについて詳しく解説しています。こちらもあわせてご覧ください。
【関連】Pythonのpassとcontinueの違いや使い分けのコツを初心者向けに解説
breakとcontinueの使い分けの考え方
使い分けの基準は、目的によって決まります。
特定の条件でループを完全に終了したい場合はbreak文を使います。
例えば、「リストから目標の値を見つけたら、それ以上探す必要がないので終了する」といったケースです。
特定の要素だけを処理から除外したい場合はcontinue文を使います。
例えば、「不正なデータや条件に合わないデータをスキップして、残りのデータは通常通り処理する」といったケースです。
出力結果
優秀な成績を発見
合格点: 75
合格点: 90
合格点: 85判断に迷った場合は、「ループを抜けたいのか、スキップしたいのか」を考えると、適切な選択ができるでしょう。
breakの具体的な使い方
break文は、特定の条件が満たされたときにループを完全に終了させる制御文です。
例えば、リストの中から目的のデータを探していて見つかったら、それ以上探す必要はありませんよね。
また、エラーが発生したときに処理を中断したい場合もあります。
このように「それ以上ループを続ける必要がない」という場面でbreak文は活躍します。
実際のコード例を通して、break文の効果的な使い方を見ていきましょう。
条件達成時にループを終了する例
リストから特定の要素を探す処理では、目的の要素を見つけた時点でループを終了すれば、不要な処理を避けられます。
実際にコード例を見てみましょう。
出力結果
チェック中: キリン
チェック中: パンダ
チェック中: ライオン
ライオンを発見しました
検索終了リストの要素を順番にチェックしていき、「ライオン」を見つけた時点でbreak文が実行されます。その結果、「ゾウ」と「トラ」のチェックは行われず、効率的な検索が実現できています。
このように、目標を見つけたらすぐに処理を終了することで、プログラムの実行速度を向上させることができます。
whileループとの組み合わせ
while Trueとbreak文を組み合わせることで、「条件が満たされるまで無限に続くループ」を作成できます。
この方法は、ユーザー入力の処理や、特定の状態になるまで処理を繰り返したいときによく使われます。
出力結果
カウント: 1
カウント: 2
カウント: 3
ウサギがゴールしましたwhile Trueで無限ループを作り、countが3以上になったときにbreak文でループを抜けています。
この方法を使う際の注意点は、必ずbreak文に到達する条件を設定することです。条件を忘れると、プログラムが永遠に終わらない無限ループになってしまいます。
入れ子ループでのbreakの挙動
ネストした(入れ子になった)ループ構造では、break文は実行された時点で最も内側のループのみを抜けます。
外側のループは、継続して実行されることに注意しましょう。
出力結果
エリア1:
ウシ
ウマ
エリア2:
ニワトリ
ブタを発見、このエリア終了このプログラムでは、エリア2で「ブタ」が見つかったときに内側のループが終了しますが、外側のループは続いています。
ただし、エリア2が最後なので、結果的にプログラム全体が終了しています。
もし外側のループまで抜けたい場合は、フラグ変数を使うか、処理を関数化してreturn文で終了させましょう。
returnとの使い分け
関数内でループ処理を行う場合、break文とreturn文のどちらを使うかで処理の流れが変わります。
break文はループだけを抜け、その後の処理は続きます。一方、return文は関数全体を終了させ、呼び出し元に値を返します。
出力結果
確認中: ハムスター
確認中: ネコ
確認中: ゾウ
ゾウは大きな動物ですこのプログラムでは、「ゾウ」が見つかった時点でreturn文が実行され、関数全体が終了します。そのため、「イヌ」のチェックは行われません。
使い分けの基準は、関数の戻り値が必要かどうかです。
戻り値が必要な場合はreturn文を、ループ終了後に続く処理がある場合はbreak文を選択します。
continueの具体的な使い方
ループ処理をしていると、「全ての要素を処理したいけど、特定の条件に当てはまるものだけはスキップしたい」という場面があります。
このような場面で活躍するのがcontinue文です。continue文を使うと、現在の繰り返し処理だけをスキップして、次の要素の処理に進むことができます。
実際のコード例を見ながら、continue文の効果的な使い方を学んでいきましょう。
特定条件のときだけ処理を飛ばす例
リスト内の特定の要素だけを処理対象から除外したいときは、continue文を使うと簡潔に書けます。
出力結果
イヌにエサをあげました
ネコにエサをあげました
インコにエサをあげました
ウサギにエサをあげましたペットのリストを順番に処理していきますが、「ハムスター」だけはcontinue文によってprint()がスキップされます。
ループ自体は終了せず、その後の「インコ」や「ウサギ」は通常通り処理されているのも確認できるでしょう。
このように、特定の条件に該当する要素のみを除外して、他の要素は通常通り処理できるのがcontinue文の特徴です。
複数条件分岐での活用
複数のif文をネストする代わりに、continue文を使うことで条件分岐を浅くして、コードの可読性を上げるというテクニックがあります。
処理したくない条件を先に除外することで、メインの処理を明確にしています。
出力結果
適切なサイズ: 15kg の動物
適切なサイズ: 250kg の動物体重が10kg未満の動物と300kgを超える動物を除外して、適切なサイズの動物だけを表示しています。
不要な条件を先に除外することで、「どんな条件のときに処理するのか」がわかりやすくなっているはずです。
文字列処理やリスト処理のスキップ例
データ処理では、空の文字列やNoneなどの無効な値が混ざっていることがあります。
このような不正なデータをスキップしながら処理を継続したいとき、continue文が最適です。
出力結果
登録された動物: ライオン
登録された動物: トラ
登録された動物: ヒョウ
登録された動物: チーターこのプログラムでは、空の文字列("")やNone、そして2文字未満の名前を持つデータをスキップしています。
データの前処理やバリデーション(検証)処理で、不正なデータを除外しながら処理を継続できるのがcontinue文の便利なところです。
注意点とよくあるミス
whileループでcontinue文を使う際は、ループ変数の更新処理がスキップされないよう注意しましょう。
更新処理を忘れると、無限ループが発生する可能性があるからです。
出力結果
カウンター: 1
カウンター: 2
カウンター: 4
カウンター: 5この例では、i += 1という更新処理をcontinue文よりも前に配置しています。もし更新処理がcontinue文の後にあると、i == 3のときに更新がスキップされて無限ループになってしまいます。
whileループでは、continue文の前にループ変数の更新を行うか、forループの使用を検討することで安全にスキップ処理が実装できます。
breakとcontinueの比較と使い分けまとめ
ここまでbreak文とcontinue文をそれぞれ解説してきましたが、実際のプログラミングではどちらを使えばいいのか迷うこともあるかもしれません。
ここでは、両者の違いを明確に整理し、適切な場面で正しい制御文を選択できるようになるための基準を確認していきます。比較表や具体例を通して、使い分けのポイントを押さえましょう。
動作の違いの整理(抜ける・飛ばす)
break文とcontinue文の最も大きな違いを押さえておきましょう。それは「ループをどう扱うか」という点です。
break文はループを完全に終了させます。一方、continue文は現在の繰り返しだけをスキップして、ループ自体は継続します。この違いを表で整理すると、次のようになります。
制御文 |
動作 |
ループの継続 |
用途 |
|---|---|---|---|
break |
ループを完全に抜ける |
しない |
目標達成、エラー検知時 |
continue |
現在の繰り返しをスキップ |
する |
条件に合わない要素の除外 |
実際のコードで、違いを確認してみましょう。
出力結果
=== break の例 ===
ウサギ
=== continue の例 ===
ウサギ
キツネbreakの例では、「カメ」が見つかった時点でループが終了するため、「ウサギ」だけが表示されます。一方、continueの例では、「カメ」のときだけ処理がスキップされ、その後の「キツネ」は通常通り表示されます。「ループを終わらせたいのか、要素を飛ばしたいのか」という判断基準で使い分けましょう。
whileでの使い分けポイント
whileループでは、break文の方が使用頻度が高く、安全に使いやすい傾向があります。continue文は、ループ変数の更新タイミングに注意しないと無限ループのリスクがあるためです。
出力結果
クマが1回鳴きました
クマが2回鳴きました
クマが3回鳴きました
=== 危険なcontinueの例 ===
トリが1回鳴きました
トリが3回鳴きましたbreak文を使った例では、while Trueで無限ループを作り、条件が満たされたらbreakで抜けるというシンプルな構造になっています。
continue文を使った例では、ループ変数numの更新をcontinue文より前に配置しています。もし更新処理が後にあると、num == 2のときに更新がスキップされて無限ループになってしまいます。
whileループでは、できる限りbreak文を選択し、continue文が必要な場合は変数更新の位置を慎重に検討しましょう。
入れ子構造での制御の考え方
ネストした(入れ子になった)ループでは、どの階層のループに対して制御文が作用するかを正確に把握することが大切です。
break文もcontinue文も、実行された時点で最も内側のループにのみ影響します。つまり、外側のループは通常通り継続することを前提として設計する必要があるということです。
出力結果
セクション1
シマウマ
キリンで内側ループ終了
セクション1完了
セクション2
ライオン
トラ
セクション2完了このプログラムでは、セクション1で「キリン」が見つかったときに内側のループが終了しますが、外側のループは継続しています。そのため、セクション2の処理も実行されています。
処理フローを読みやすくする選択基準
break文とcontinue文が適している場面は、それぞれ次のとおりです。
break文が適している場面
- リストから目的のデータを見つけたとき
- 処理中にエラーや異常な状態を検知したとき
- while Trueで作った無限ループから抜け出したいとき
continue文が適している場面
- 特定の条件に合わないデータだけを除外して処理を続けたいとき
- 空の文字列やNoneなどの無効なデータをスキップしたいとき
- 複数の除外条件がある場合に、if文のネストを避けたいとき
判断に迷ったときは、この処理はループ全体を終わらせたいのか、それとも特定の要素だけ除外したいのかを考えると、自然と正しい選択ができます。また、どちらを使っても実現できる場合は、コードを読む人にとって意図がわかりやすい方を選びましょう。
よくある質問(Q&A)
Q: break文は関数の戻り値に影響しますか?
A: break文自体は戻り値に直接影響しません。ループを抜けた後の処理で戻り値が決まります。関数全体を終了させたい場合はreturn文を使用してください。
Q: continueでwhile文が止まらないのはなぜ?
A: ループ変数の更新処理がcontinue文によってスキップされている可能性があります。更新処理をcontinue文より前に配置するか、for文の使用を検討してください。
Q: 入れ子ループで外側も抜けるには?
A: フラグ変数を使用するか、処理を関数化してreturn文で終了させる方法があります。Pythonには他言語のlabeledbreakに相当する機能はありません。
出力結果
ゾウを発見Q: passとcontinueはどう違いますか?
A: pass文は何もしないプレースホルダーで、continue文はループの次の繰り返しに進む制御文です。pass文はループの流れに影響せず、構文上必要な場合に使用します。
まとめ
Pythonのbreak文とcontinue文は、ループ処理の流れをコントロールする基本的な制御文です。
この記事では、それぞれの動作の違いから実践的な使い方、使い分けの基準まで解説しました。
break文とcontinue文を活用したいのは、次のような場面です。
break文が活躍する場面
- 目的のデータが見つかったらループを終了したいとき
- 条件を満たしたら無限ループから抜け出したいとき
- 入れ子ループの内側だけを終了させたいとき
continue文が活躍する場面
- 特定の条件のときだけ処理をスキップしたいとき
- 無効なデータを除外して処理を続けたいとき
- 条件分岐のネストを浅くして見通しを良くしたいとき
break文とcontinue文を使う上で、押さえておきたいポイントは次の通りです。
重要なポイント
- break文はループを完全に終了させる
- continue文は現在の繰り返しだけをスキップする
- pass文はループ制御を行わず、「何もしない」ことを明示するプレースホルダー
- break文はループのみを終了するが、return文は関数全体を終了する
- whileループでcontinue文を使う際は、ループ変数の更新タイミングに注意が必要
- 入れ子ループでは、break文もcontinue文も最も内側のループにのみ影響する
初めてループ制御を学ぶ方も、この記事で紹介した基本的な使い方と実用例を参考に、実際にコードを書いてみてください。
最初のうちは、どちらがどちらの役割か混同することもあるでしょう。しかし、「完全に終わらせるのか、それともスキップするのか」という視点さえあれば、適切な制御文を自然と選択できるようになります。
ループ処理はプログラミングの根幹を支える極めて重要な概念です。breakやcontinueを使いこなすことで、より効率的で、無駄のない洗練されたコードを書けるようになります。
ぜひループ処理をマスターし、確かなスキルを身に付けましょう。