【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)
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)
1
2
異常:負の値です
4
5
breakの場合と異なり、変数iが負の値になった際にも繰り返し処理は終了せず、最後まで繰り返し処理が実行されています。
今回の場合、変数iが-3の時にはプログラム6行目のprint(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 : print( "異常:負の値です") break #jが負の時はbreak(2つ目のfor文の残りの繰り返し処理は実行せず、1つ目のfor文に戻る) num = i * j print(num)
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 : print( "異常:負の値です") continue #jが負の時はcontinue(残りの8,9行目の処理だけスキップし、2つ目のfor文の次の繰り返し処理へ) num = i * j print(num)
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})")