【Python連載】for文のbreakとcontinueの使い方


for文のbreakとcontinueの使い方について

今回の記事では、下記について紹介します。
・ある条件下で、繰り返し処理を途中で終了する「break」
・ある条件下で、繰り返し処理の一部をスキップする「continue」


breakについて

for文での繰り返し処理の中で処理をしたくない(出来ない)要素が出てきた時に、
繰り返し処理を終了させるにはbreakを使用します。

次の例は、リストから順番に値を繰り返し取り出していくプログラムです。
ただし、条件分岐のif文を使用し、取り出された値が負(マイナス)の時には繰り返しが終了となるプログラムとなっています。

list = [1,2,-3,4,5]
for i in list :
    if i < 0 :                        #変数iが負(マイナス)の時の処理
        print( "異常:負の値です")
        break                         #breakにより繰り返し処理が終了
    print(i)
C:\Python>python 4-3-1.py
1
2
異常:負の値です

変数iが-3という負の値になったため、処理が終了しています。
このように、breakにあたると、繰り返し処理の途中でも繰り返しが終了となります。

continueについて

continueを使用すると、条件に引っ掛かった値での処理をスキップするだけで、最後まで繰り返し処理を行うことができます。
例を見てみましょう。

list = [1,2,-3,4,5]
for i in list :
    if i < 0 :                          #変数iが負の値の時の処理
        print( "異常:負の値です")
        continue                        #continueによりスキップして、次の繰り返し処理へ
    print(i)
C:\Python>python 4-3-2.py
1
2
異常:負の値です
4
5

breakの場合と異なり、変数iが負の値になった際にも繰り返し処理は終了せず、最後まで繰り返し処理が実行されています。
このように、繰り返し処理の一部をスキップするのがcontinueとなります。

ネスト構造でのbreak,continueについて

ネスト構造になっているfor文でbreak,continueを使用してみます。

まずはbreakを使用した例を見てみましょう。
1つ目(外側)のfor文では、list1から1,10,100という値を順番に取り出します。
2つ目(内側)のfor文では、list2から1,2,-3,4,5という値を順番に取り出します。
そして、2つ目(内側)のfor文のブロック内にbreakを記述します。

list1 = [1,10,100]
list2 = [1,2,-3,4,5]
for i in list1 :                      #1つ目(外側)のfor文
    for j in list2 :                    #2つ目(内側)のfor文
        if j < 0 :                       #変数jが負の値の時
            print( "異常:負の値です")
            break                        #breakし、1つ目(外側)のfor文に戻る
        num = i * j                    #iとjの掛け算
        print(num)
C:\Python>python 4-3-3.py
1
2
異常:負の値です
10
20
異常:負の値です
100
200
異常:負の値です

変数jが負の値になりbreakすると、1つ目(外側)のfor文の次の繰り返し処理に移っています。
つまり、breakが使われた部分の繰り返し、すなわち2つ目(内側)のfor文の繰り返しだけが途中で終了した形になります。

次に、continueを使用した例を見てみましょう。
上記プログラムのbreakをcontinueに変えています。

list1 = [1,10,100]
list2 = [1,2,-3,4,5]
for i in list1 :                         #1つ目(外側)のfor文
    for j in list2 :                       #2つ目(内側)のfor文
        if j < 0 :                          #変数jが負の値の時
            print( "異常:負の値です")
            continue                        #スキップして次の繰り返しへ
        num = i * j                       #iとjの掛け算
        print(num)
C:\Python>python 4-3-4.py
1
2
異常:負の値です
4
5
10
20
異常:負の値です
40
50
100
200
異常:負の値です
400
500

breakの際と異なり、2つ目(内側)のfor文の繰り返しは途中で終了せず、最後まで繰り返し処理が実行されています。

以上がネスト構造でのbreak,continueの使い方となります。
breakやcontinueを使用してプログラムを作成する場合には、どの処理に移行させたいかを気を付けて記述しましょう。


まとめ

・繰り返し処理を途中で終了するには「break」を使用します。
・繰り返し処理の一部をスキップするには「continue」を使用します。
・ネスト構造になっているfor文でbreak,continueを使用する時には、どのブロックがbreak,continueの対象なのかを意識しましょう。


確認問題

breakとcontinueの出力を比較してみましょう。

list1 = [1, -1, 10, -10]
for i in list1 :
    if i < 0 :
        print( "異常:負の値です")
        break                         #もしくはcontinue
    print(i)

ネスト構造でのbreakとcontinueの出力を比較してみましょう。

for i in range(3) :
    for j in range(3)
        if j == 1 :
            print("「j=1」は無効")
            break                     #もしくはcontinue
        print(f"({i},{j})")
  • このエントリーをはてなブックマークに追加

PAGE TOP