メインコンテンツへスキップ
Lesson4 / 7

break文 - ループを途中で抜ける

目次

このレッスンで学ぶこと

  • break文とは何か
  • break文の使い方
  • for文とwhile文でのbreak
  • break文の実用例

break文とは

break文は、ループ処理を途中で完全に終了し、ループの外に処理を移す制御構文です。ループ内で特定の条件を満たしたときに、残りの処理をスキップしてループを抜ける必要がある場合に使用されます。

break文の基本構造

Python
for 変数 in コレクション:
    if 終了条件:
        break  # ループを抜ける

while 条件式:
    if 終了条件:
        break  # ループを抜ける

break文の構成要素

要素説明
breakループを抜けるキーワード必須
配置ループの中(if文の中)通常はif文の中で使用
範囲最も内側のループだけ抜けるネストの場合、内側のみ
ループ外breakの後の処理は実行されない次のループに進まない

break文の特徴

  • 最も内側のループだけを抜ける(ネストの場合)
  • ループ内でのみ使用可能(ループ外ではエラー)
  • break後のループ内処理は実行されない
  • 値の検索やエラー時の処理中断に便利

簡単な例

Python
# リストから特定の値を探す
numbers = [1, 5, 3, 8, 2]
for num in numbers:
    if num == 8:
        print("8を見つけました!")
        break  # ループを抜ける
    print(f"確認中: {num}")

# 実行結果:
# 確認中: 1
# 確認中: 5
# 確認中: 3
# 8を見つけました!

# while Trueで無限ループから抜ける
while True:
    command = input("入力 (quit で終了): ")
    if command == "quit":
        break
    print(f"実行: {command}")

なぜbreak文が必要なのか?

ループ処理の途中で、特定の条件を満たしたときに繰り返しを終了したい場合があります。

Python
# リストから特定の値を探す
numbers = [1, 5, 3, 8, 2, 9, 4]

for number in numbers:
    if number == 8:
        print("8を見つけました!")
        break  # ここでループを抜ける
    print(f"確認中: {number}")

print("検索終了")

実行結果:

確認中: 1
確認中: 5
確認中: 3
8を見つけました!
検索終了

break文を使うことで、条件を満たしたらすぐにループを終了できます。

💡 豆知識: break文は英語で「壊す、中断する」という意味です。ループを「中断」してループの外に出る処理を表しています。


break文の基本

機能: ループ(for文やwhile文)を途中で抜けて、ループの次の処理に移ります。

書き方:

Python
for item in items:
    if 条件:
        break  # ループを抜ける
    処理

while 条件:
    if 条件:
        break  # ループを抜ける
    処理

用途: 目的の値が見つかったら終了、エラー時の中断、ユーザーが終了を指示

注意点:

  • breakは最も内側のループだけを抜ける
  • ループ外では使えない
  • break後のループ内処理は実行されない
Python
# 基本的な使い方
for i in range(10):
    if i == 5:
        break
    print(i)

print("ループ終了")

実行結果:

0
1
2
3
4
ループ終了

for文でのbreak

例1: 値の検索

Python
fruits = ["りんご", "バナナ", "オレンジ", "ぶどう", "メロン"]
target = "オレンジ"

for fruit in fruits:
    if fruit == target:
        print(f"{target}を見つけました!")
        break
    print(f"確認中: {fruit}")

実行結果:

確認中: りんご
確認中: バナナ
オレンジを見つけました!

例2: 合計が目標値を超えたら終了

Python
numbers = [10, 20, 15, 30, 25, 5]
total = 0
target = 50

for number in numbers:
    total += number
    print(f"{number}を加算: 合計 = {total}")

    if total >= target:
        print(f"目標の{target}に到達しました!")
        break

実行結果:

10を加算: 合計 = 10
20を加算: 合計 = 30
15を加算: 合計 = 45
30を加算: 合計 = 75
目標の50に到達しました!

例3: 最初の偶数を見つける

Python
numbers = [1, 3, 5, 8, 9, 11, 12]

for number in numbers:
    if number % 2 == 0:
        print(f"最初の偶数: {number}")
        break
else:
    print("偶数が見つかりませんでした")

実行結果:

最初の偶数: 8

while文でのbreak

例1: ユーザー入力の終了

機能: while Trueで無限ループを作り、breakで抜けるパターン。

書き方:

Python
while True:
    入力処理
    if 終了条件:
        break

用途: 対話型プログラム、メニュー選択、入力待機

注意点: breakがないと無限ループになる

Python
while True:
    command = input("コマンドを入力 (quit で終了): ")

    if command == "quit":
        print("プログラムを終了します")
        break

    print(f"実行: {command}")

例2: パスワード認証

Python
correct_password = "python123"
max_attempts = 3
attempts = 0

while attempts < max_attempts:
    password = input("パスワード: ")
    attempts += 1

    if password == correct_password:
        print("ログイン成功!")
        break

    print(f"パスワードが違います(残り{max_attempts - attempts}回)")
else:
    print("ログイン失敗。アカウントがロックされました。")

例3: 条件達成まで処理

Python
import random

print("=== ランダム数生成 ===")
count = 0

while True:
    number = random.randint(1, 10)
    count += 1
    print(f"{count}回目: {number}")

    if number == 7:
        print("7が出ました!終了します")
        break

    if count >= 20:
        print("20回試行しましたが7は出ませんでした")
        break

ネストしたループでのbreak

内側のループだけ抜ける

Python
# breakは最も内側のループだけを抜ける
for i in range(3):
    print(f"\n外側のループ: {i}")

    for j in range(5):
        if j == 3:
            print("  内側のループをbreak")
            break
        print(f"  内側: {j}")

    print(f"外側のループ {i} 終了")

実行結果:

外側のループ: 0
  内側: 0
  内側: 1
  内側: 2
  内側のループをbreak
外側のループ 0 終了

外側のループ: 1
  内側: 0
  内側: 1
  内側: 2
  内側のループをbreak
外側のループ 1 終了

外側のループ: 2
  内側: 0
  内側: 1
  内側: 2
  内側のループをbreak
外側のループ 2 終了

外側のループも抜けたい場合

Python
# フラグを使って外側のループも抜ける
found = False

for i in range(5):
    for j in range(5):
        if i * j == 12:
            print(f"見つけました: {i} × {j} = 12")
            found = True
            break

    if found:
        break

print("検索終了")

実行結果:

見つけました: 3 × 4 = 12
検索終了

for-else文とbreak

for-else構文

機能: breakせずにループが正常終了したときだけelseブロックを実行します。

書き方:

Python
for item in items:
    if 条件:
        break
else:
    # breakされなかった場合の処理

用途: 値が見つからなかった場合の処理、全件チェック完了時の処理

注意点: breakで抜けた場合はelseブロックは実行されない

Python
# 素数判定
number = 17

for i in range(2, number):
    if number % i == 0:
        print(f"{number}は素数ではありません({i}で割り切れる)")
        break
else:
    print(f"{number}は素数です")

実行結果:

17は素数です

具体例

例1: リストから値を探す

Python
students = ["田中", "佐藤", "鈴木", "高橋", "伊藤"]
target = "鈴木"

for i, student in enumerate(students):
    if student == target:
        print(f"{target}さんは{i + 1}番目にいます")
        break
else:
    print(f"{target}さんは見つかりませんでした")

実行結果:

鈴木さんは3番目にいます

例2: ファイル検索

Python
files = ["document.txt", "image.png", "data.csv", "report.pdf"]
target_extension = ".csv"

print("CSVファイルを検索中...")
for file in files:
    if file.endswith(target_extension):
        print(f"見つかりました: {file}")
        break
else:
    print("CSVファイルが見つかりませんでした")

実行結果:

CSVファイルを検索中...
見つかりました: data.csv

例3: 数当てゲーム

Python
import random

answer = random.randint(1, 100)
max_attempts = 10

print("=== 数当てゲーム ===")
print(f"1〜100の数を当ててください({max_attempts}回まで)")

for attempt in range(1, max_attempts + 1):
    guess = int(input(f"{attempt}回目の予想: "))

    if guess == answer:
        print(f"正解! {attempt}回で当たりました")
        break
    elif guess < answer:
        print("もっと大きい数です")
    else:
        print("もっと小さい数です")
else:
    print(f"\n残念!正解は{answer}でした")

例4: エラーチェック

Python
data = [10, 20, 0, 30, 40]
divisor = 5

print("=== 割り算処理 ===")
for value in data:
    if value == 0:
        print("エラー: 0では割れません")
        break

    result = divisor / value
    print(f"{divisor} ÷ {value} = {result}")
else:
    print("すべての処理が完了しました")

実行結果:

=== 割り算処理 ===
10 ÷ 5 = 0.5
20 ÷ 5 = 0.25
エラー: 0では割れません

例5: 在庫確認

Python
stock = {
    "りんご": 10,
    "バナナ": 5,
    "オレンジ": 0,
    "ぶどう": 8
}

print("=== 在庫確認 ===")
for item, quantity in stock.items():
    if quantity == 0:
        print(f"⚠️ {item}の在庫がありません")
        break

    print(f"{item}: {quantity}個")
else:
    print("\nすべての商品に在庫があります")

実行結果:

=== 在庫確認 ===
りんご: 10個
バナナ: 5個
⚠️ オレンジの在庫がありません

例6: メニュー選択

Python
print("=== 計算機 ===")

while True:
    print("\n1. 足し算")
    print("2. 引き算")
    print("3. 掛け算")
    print("4. 割り算")
    print("0. 終了")

    choice = input("\n選択してください: ")

    if choice == "0":
        print("計算機を終了します")
        break

    if choice in ["1", "2", "3", "4"]:
        a = float(input("1つ目の数値: "))
        b = float(input("2つ目の数値: "))

        if choice == "1":
            print(f"結果: {a + b}")
        elif choice == "2":
            print(f"結果: {a - b}")
        elif choice == "3":
            print(f"結果: {a * b}")
        elif choice == "4":
            if b != 0:
                print(f"結果: {a / b}")
            else:
                print("エラー: 0では割れません")
    else:
        print("無効な選択です")

よくある間違い

間違い1: ループの外でbreak

Python
# 間違い: ループの外では使えない
if x > 10:
    break  # エラー: ループの中でしか使えない

# 正しい
for x in range(20):
    if x > 10:
        break

間違い2: break後の処理

Python
# break後の処理は実行されない
for i in range(10):
    if i == 5:
        break
    print(i)
    # ここまで実行される

# i == 5 のときbreakされるので、5は表示されない

間違い3: 外側のループを抜けられない

Python
# 間違い: breakは内側のループだけ抜ける
for i in range(3):
    for j in range(3):
        if i == 1 and j == 1:
            break  # 内側のループだけ抜ける

# 正しい: フラグを使う
found = False
for i in range(3):
    for j in range(3):
        if i == 1 and j == 1:
            found = True
            break
    if found:
        break

間違い4: for-elseの誤解

Python
# for-elseは「見つからなかった場合」の処理
numbers = [1, 2, 3, 4, 5]

for num in numbers:
    if num == 3:
        print("3を見つけました")
        break
else:
    # breakされたのでelseは実行されない
    print("これは表示されない")

間違い5: 条件の位置

Python
# 間違い: 処理後にチェック
for i in range(10):
    print(i)
    if i == 5:
        break  # 5も表示されてしまう

# 正しい: 処理前にチェック
for i in range(10):
    if i == 5:
        break
    print(i)  # 5は表示されない

練習問題

問題1(基礎)⭐☆☆

1から10まで表示するが、7で止めるプログラムを書いてください。

💡 ヒント

if文で7をチェックし、breakします。

✅ 解答例
Python
for i in range(1, 11):
    if i == 7:
        break
    print(i)

実行結果:

1
2
3
4
5
6

解説: 7になったらbreakするので、1から6まで表示されます。


問題2(基礎)⭐☆☆

リスト ["犬", "猫", "鳥", "魚"] から"鳥"を探し、見つかったら「見つかりました」と表示してください。

💡 ヒント

for文で各要素をチェックし、一致したらbreakします。

✅ 解答例
Python
animals = ["犬", "猫", "鳥", "魚"]

for animal in animals:
    if animal == "鳥":
        print(f"{animal}を見つけました")
        break

実行結果:

鳥を見つけました

解説: "鳥"が見つかった時点でループを抜けています。


問題3(応用)⭐⭐☆

1から順に足していき、合計が100を超えたら終了するプログラムを書いてください。何回で超えたかも表示してください。

💡 ヒント

while Trueで無限ループを作り、条件でbreakします。

✅ 解答例
Python
total = 0
count = 0

while True:
    count += 1
    total += count

    if total > 100:
        print(f"{count}回で合計が100を超えました")
        print(f"合計: {total}")
        break

実行結果:

14回で合計が100を超えました
合計: 105

解説: 合計が100を超えた時点でbreakし、回数と合計を表示しています。


まとめ

このレッスンでは、break文でループを途中終了する方法を学びました。

  • break文は、条件を満たした時点で現在のループを終了します。
  • 探索処理で目的の値が見つかったときに効率化できます。
  • break後はループ内の残り処理が実行されない点を理解しました。
  • ネストしたループでは、breakは最も内側のループに作用します。
  • 終了条件を明確にすると、意図した位置で処理を止められます。