文系出身がPythonで混同したbreakとcontinueの違い
はじめに
文系出身未経験から新卒で入社し、約2ヶ月が経過しました!
現在、研修で一通りPythonについての学習を終えました。
Pythonを勉強していると、ループ処理を制御する方法が複数あることに気づき、その中でbreakとcontinueの違いに疑問を抱きました。
文系出身で、プログラミングの経験がなかった私は、両方とも「ループを止める」という意味だと思い込んでいましたが、実装してみると、この2つはループの制御方法が全く異なることに気づきました。
この記事では、私が実際に混同していたbreakとcontinueの違いを、具体例と一緒にまとめます。
break |ループ全体を終了する
breakを実行すると、そのbreak文を囲んでいる最も内側のループが終了します。
条件を満たした瞬間、そのループの残りの処理は実行されません。
ネストされたループの場合、breakで終了するのは最も内側のループだけで、外側のループはそのまま続きます。
breakの特徴
breakには以下の特徴があります。
- ループを完全に抜ける
- ネストされたループの場合は、最も内側のループだけを抜ける
- ループの
else句は実行されない - ループ変数はその時の値を保持する
break文は、そのbreak文を囲っている最も内側のループだけを終了させます。
例えば、2つのループがネストされている場合、内側のループでbreakを使うと、内側のループだけが終わり、外側のループは続きます。
外側のループも終わらせたい場合は、別の方法(関数を使うなど)が必要になります。
また、breakでループを抜けると、ループのelse句は実行されません。
これは「ループが最後まで完了した」わけではなく、「途中で抜けた」ということを表しています。
さらに、forループをbreakで終了した場合、ループ変数(例えばi)はその時の値のまま保持されます。
つまり、ループを抜けた後もその変数にアクセスできるということです。
breakの例
# 例1:特定の値に達したらループを終了
for i in range(10):
if i == 5:
break
print(i)
# →0, 1, 2, 3, 4
# 例2:ユーザーが正しい入力をするまで聞き続ける
while True:
password = input("パスワードを入力してください: ")
if password == "1234":
print("ログイン成功!")
break # ここでループ終了
else:
print("パスワードが違います")
continue |その周だけスキップする
continueを実行すると、現在のイテレーションの残りの処理をスキップして、
次のイテレーションに進みます。
ループ全体は終了しません。
continueの特徴
continueには以下の特徴があります。
- その1回だけスキップする
- ループは続く
- ネストされたループの場合は、最も内側のループのみに影響する
- ループの
else句は実行される(ループが正常に完了した場合)
continue文は、文を囲っている最も内側のループの次のサイクルに進みます。
つまり、現在のイテレーション(繰り返し)の残りの処理をスキップして、次のイテレーションを開始するということです。
breakと異なり、continueを使ってもループ全体は終わりません。
現在のイテレーションの残りの処理をスキップし、次のイテレーションに進みます。
そのため、continueに到達してもその後、breakされずにループが完了した場合、ループのelse句は実行されます。
ネストされたループの場合、continueは最も内側のループのみに影響し、外側のループには影響を与えません。
continueの例
# 例1:特定の値だけスキップ
for i in range(5):
if i == 3:
continue # 3だけスキップ
print(i)
# →0, 1, 2, 4
# 例2:3の倍数を除いて表示
for i in range(1, 11):
if i % 3 == 0:
continue # 3の倍数はスキップ
print(i)
# →1, 2, 4, 5, 7, 8, 10
else句について
Pythonのループにはelse句を付けることができます。
これはbreakとcontinueの動作を理解する上で重要です。
else句の特徴
else句には以下の特徴があります。
- ループが最後まで実行された場合に実行される
breakで終了した場合は実行されないcontinueで途中をスキップしても、ループが最後まで実行されれば実行される- 例外が発生した場合は実行されない
ループのelse句は、ループがbreakによって途中で終了されなかった場合に実行されます。
forループの場合、すべてのイテレーション(繰り返し)が完了した後にelse句が実行されます。
whileループの場合、ループ条件が偽になった後にelse句が実行されます。
どちらのループでも、breakによってループが終了した場合はelse句は実行されません。
また、return文や例外が発生してループが途中で終了した場合も、else句は実行されません。
ループのelse句を理解する一つの方法は、try文のelse句と比較することです。
try文のelse句は例外が発生しなかった時に実行されますが、ループのelse句は**breakされずにループが終了した場合に実行される**という点で似ています。
つまり、「予定通りループが終了した」ことを示しているのです。
else句の例
# 例1:break に到達しない場合、else 句が実行される
for i in range(5):
print(i)
else:
print("ループが正常に完了しました")
# →0, 1, 2, 3, 4
# →ループが正常に完了しました
# 例2:break に到達した場合、else 句は実行されない
for i in range(5):
if i == 3:
print("ループを抜けます")
break
print(i)
else:
print("この行は実行されません")
# →0, 1, 2
# →ループを抜けます
break vs continue の違いを表で比較
| 項目 | break | continue |
|---|---|---|
| 動作 | 最も内側のループを終了する | 現在のイテレーションの残りをスキップする |
| ループは続く? | そのループは続かない | 次のイテレーションに進む |
| 残りの処理 | 現在のループの残りを実行しない | 現在のイテレーションの残りだけ実行しない |
| ネストされたループ | 最も内側のループのみ抜ける | 最も内側のループの次のイテレーションへ進む |
| else 句の実行 | breakした場合は実行されない |
breakされずに終了すれば実行される |
| 使う場面 | 条件を満たしたので探索・処理を終了したい | 無効なデータなどを今回だけ除外したい |
日常生活で例えると
授業を5時間受ける場面を想像します。
breakの場合
3時間目に帰宅する
↓
残りの授業(4時間目、5時間目)も全て欠席する
↓
ループ全体が終わる
continueの場合
3時間目だけ欠席する
↓
4時間目からまた出席する
↓
ループは続く
breakは「ループそのものを終わらせる」決定的な選択です。
一度breakに到達すると、ループの残りの処理は一切実行されません。
これは、検索で目的の物が見つかった時や、エラーが発生して処理を中止する必要がある時に使います。
一方、continueは「今回の処理だけをスキップする」という選択です。
ループ自体は続くため、次のイテレーションでは通常通り処理が実行されます。
これは、特定の条件のデータだけを除外したい時や、無効なデータをスキップしたい時に使います。
つまり、breakは「ループを終わらせる終了ボタン」で、continueは「今回だけスキップするボタン」と考えると分かりやすいです。
break を使うべき場面
# 場面1:検索して見つかったら終了
students = ["Takuya", "Hikaru", "Kazuya", "Haruki"]
target = "Kazuya"
for student in students:
if student == target:
print(f"{target}が見つかりました")
break
print(f"{student}を確認中...")
# →Takuyaを確認中...
# →Hikaruを確認中...
# →Kazuyaが見つかりました
# 場面2:ユーザーが「終了」と入力するまで続ける
while True:
user_input = input("コマンドを入力してください(終了するには'quit'と入力): ")
if user_input == "quit":
print("プログラムを終了します")
break
print(f"入力されたコマンド: {user_input}")
# 場面3:条件を満たしたら処理を中断
score = 0
for i in range(1, 11):
score += i
if score > 30:
print(f"スコアが30を超えました: {score}")
break
continue を使うべき場面
# 場面1:特定の値を除いて処理
for i in range(1, 6):
if i == 3:
continue # 3だけスキップ
print(f"処理中: {i}")
# →処理中:1
# →処理中:2
# →処理中:4
# →処理中:5
# 場面2:無効なデータをスキップ
data = [1, 0, 2, 0, 3, 0, 4]
for value in data:
if value == 0:
continue # 0はスキップ
print(f"有効なデータ: {value}")
# →有効なデータ:1
# →有効なデータ:2
# →有効なデータ:3
# →有効なデータ:4
# 場面3:特定の条件の時だけ処理をスキップ
for i in range(1, 11):
if i % 2 == 0:
continue # 偶数はスキップ
print(f"奇数: {i}")
# →奇数:1
# →奇数:3
# →奇数:5
# →奇数:7
# →奇数:9
実践的な使用例
例1:ユーザー認証
# break を使う場合:正しいパスワードで終了
attempts = 3
for attempt in range(attempts):
password = input(f"パスワードを入力してください(残り{attempts - attempt}回): ")
if password == "secret123":
print("ログイン成功!")
break
else:
print("パスワードが違います")
else:
print("ログイン失敗。アカウントがロックされました。")
例2:ショッピングカート処理
# break を使う場合:予算を超えたら終了
cart = [1500, 2000, 800, 3000, 1200]
budget = 5000
total = 0
for price in cart:
if total + price > budget:
print(f"予算を超えるため、ここで終了します")
break
total += price
print(f"商品を追加: {price}円(合計: {total}円)")
# →商品を追加: 1500円(合計: 1500円)
# →商品を追加: 2000円(合計: 3500円)
# →商品を追加: 800円 (合計: 4300円)
# →予算を超えるため、ここで終了します
まとめ
breakとcontinueの使い分けは、以下のように考えるとわかりやすいです。
ループ処理をしている
↓
「この時点でループ自体を終了したい?」
↓
YES → breakを使う
NO
↓
「今回の処理だけスキップして、次の繰り返しに進みたい?」
↓
YES → continueを使う
NO → そのまま処理を続ける
最初はどちらもループを止めるだけだと思っていましたが、実際は上記のような違いがあります。
日常生活など具体的な場面に当てはめて考えると、想像しやすく理解を深めることができました。
特にelse句の存在により、breakとcontinueの役割がより明確になることに気づきました。
検索処理のように「見つかったら終了、見つからなかったら別の処理」という場面では、else句と組み合わせることで、より読みやすく意図が明確なコードを書くことができます。
今後も、ひとつずつ理解を深めながら学習を進めていきたいです。
参考資料
- Python 公式ドキュメント - 7.9. break 文
- Python 公式ドキュメント - 7.10. continue 文
- Python 公式ドキュメント - 4.4. break 文と continue 文
- Python 公式ドキュメント - 4.5. ループの else 節
クラスメソッドオペレーションズ株式会社について
クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイトをぜひご覧ください。
※2026年1月 アノテーション㈱から社名変更しました。





