ループの制御:break文とcontinue文#

はじめに#

前回までの記事では、Pythonの繰り返し処理の基本である「for文」と「while文」について学びました。これらのループ構文を使うことで、同じような処理を効率的に繰り返し実行できることがわかりました。

しかし、実際のプログラミングでは、特定の条件が満たされたときに「ループを途中で終了したい」または「現在の繰り返しをスキップして次の繰り返しに進みたい」というケースがよくあります。このような状況に対応するため、Pythonには「break文」と「continue文」という2つの制御構文が用意されています。

この記事では、これらのループ制御文の使い方と応用例を詳しく見ていきましょう。

break文:ループを途中で終了する#

break文は、ループの途中でループ処理を完全に終了し、ループの後に続くコードに制御を移します。言い換えれば、「ここでループをストップ」という命令です。

基本的な構文は次のようになります。

for文で使用する場合:

for 変数 in イテラブル:
    # 処理
    if 条件:
        break  # 条件が真のとき、ループを終了
    # 続きの処理

while文で使用する場合:

while 条件:
    # 処理
    if 別の条件:
        break  # 別の条件が真のとき、ループを終了
    # 続きの処理

例1:特定の条件でfor文を終了する#

次の例では、リストから数値を順番に取り出し、負の数値が見つかったらループを終了します。

>
# 負の数値が見つかったらループを終了する例
numbers = [5, 10, 15, -2, 25, 30]

print("リストの要素を順に表示します:")
for num in numbers:
    if num < 0:
        print(f"負の数値 {num} が見つかりました。ループを終了します。")
        break
    print(f"現在の数値: {num}")

print("ループの後の処理を実行します。")
リストの要素を順に表示します:
現在の数値: 5
現在の数値: 10
現在の数値: 15
負の数値 -2 が見つかりました。ループを終了します。
ループの後の処理を実行します。

この例では、リストnumbersの要素を順番に処理していますが、負の数値(-2)が見つかった時点でbreak文が実行され、ループが終了します。そのため、-2より後の要素(25, 30)は処理されません。

例2:特定の条件でwhile文を終了する#

次の例では、ユーザーが「終了」と入力するまで繰り返し入力を求めるプログラムを作成します。

>
# ユーザーが「終了」と入力するまで繰り返す例
print("何か入力してください。「終了」と入力するとプログラムが終了します。")

while True:  # 無限ループを作成
    text = input("入力してください: ")

    if text == "終了":
        print("プログラムを終了します。")
        break  # ユーザーが「終了」と入力したらループを抜ける

    print(f"あなたは「{text}」と入力しました。")

print("ループの後の処理を実行します。")

実行例:

何か入力してください。「終了」と入力するとプログラムが終了します。
入力してください: こんにちは
あなたは「こんにちは」と入力しました。
入力してください: Python
あなたは「Python」と入力しました。
入力してください: 終了
プログラムを終了します。
ループの後の処理を実行します。

この例では、while Trueで無限ループを作成し、ユーザーが「終了」と入力した場合にbreak文でループを抜けています。break文がなければ、このプログラムは永遠に入力を求め続けることになります。

continue文:現在の繰り返しをスキップする#

continue文は、ループの現在の繰り返しを中断し、次の繰り返しに直接ジャンプします。言い換えれば、「この回はスキップして、次の要素に進む」という命令です。

基本的な構文は次のようになります。

for文で使用する場合:

for 変数 in イテラブル:
    # 前処理
    if 条件:
        continue  # 条件が真のとき、この後の処理をスキップして次の繰り返しに進む
    # 条件によってこの部分がスキップ
    # 後処理

while文で使用する場合:

while 条件:
    # 前処理
    if 別の条件:
        continue  # 別の条件が真のとき、この後の処理をスキップして次の繰り返しに進む
    # この部分がスキップされることがある
    # 後処理

例3:特定の条件でfor文の一部をスキップする#

次の例では、1から10までの数値を表示しますが、奇数の場合はスキップします。

>
# 奇数をスキップする例
print("1から10までの偶数のみを表示します:")
for num in range(1, 11):
    if num % 2 != 0:  # 奇数の場合
        continue  # この繰り返しの残りをスキップ

    print(f"偶数: {num}")

print("ループが終了しました。")
1から10までの偶数のみを表示します:
偶数: 2
偶数: 4
偶数: 6
偶数: 8
偶数: 10
ループが終了しました。

この例では、1から10までの数値を順番に処理していますが、奇数(num % 2 != 0が真)の場合はcontinue文が実行され、その繰り返しの残りの処理(print文)がスキップされます。そのため、偶数のみが表示されます。

例4:特定の条件でwhile文の一部をスキップする#

次の例では、ユーザーが空の入力をした場合はスキップして再入力を求めるプログラムを作成します。

>
# 空の入力をスキップする例
print("5つの単語を入力してください。空の入力はカウントされません。")

count = 0

while count < 5:
    word = input(f"単語 {count + 1}/5 を入力: ")

    if word == "":
        print("空の入力は無効です。もう一度入力してください。")
        continue  # 空の入力の場合、以下の処理をスキップして再入力を求める

    print(f"入力された単語: {word}")
    count += 1  # カウンタをインクリメント

print("すべての単語が入力されました。")

実行例:

5つの単語を入力してください。空の入力はカウントされません。
単語 1/5 を入力: りんご
入力された単語: りんご
単語 2/5 を入力:
空の入力は無効です。もう一度入力してください。
単語 2/5 を入力: バナナ
入力された単語: バナナ
単語 3/5 を入力: みかん
入力された単語: みかん
単語 4/5 を入力:
空の入力は無効です。もう一度入力してください。
単語 4/5 を入力: メロン
入力された単語: メロン
単語 5/5 を入力: いちご
入力された単語: いちご
すべての単語が入力されました。

この例では、ユーザーが5つの単語を入力するまでループが続きますが、空の入力の場合はcontinue文で処理をスキップし、再入力を求めています。

まとめ#

この記事では、Pythonのループ制御文であるbreak文とcontinue文について学びました。

  • break文は、ループを完全に終了し、ループの後に続くコードに制御を移す
  • continue文は、現在の繰り返しをスキップし、次の繰り返しに進む
  • break文は「ここでループを終わらせる」場合に使用する
  • continue文は「この回はスキップして次に行く」場合に使用する

break文とcontinue文は、効率的なループ処理を実現するための重要なツールです。適切に使用することで、条件に応じて柔軟にループの流れを制御できます。