for文のbreakとcontinueの使い方について
今回の記事では、下記について紹介します。
・ある条件下で、繰り返し処理を途中で終了する「break」
・ある条件下で、繰り返し処理の一部をスキップする「continue」
breakについて
for文での繰り返し処理の中で処理をしたくない(出来ない)要素が出てきた時に、
繰り返し処理を終了させるにはbreakを使用します。
次の例は、リストから順番に値を繰り返し取り出していくプログラムです。
ただし、条件分岐のif文を使用し、取り出された値が負(マイナス)の時には繰り返しが終了となるプログラムとなっています。
1 2 3 4 5 6 | 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を使用すると、条件に引っ掛かった値での処理をスキップするだけで、最後まで繰り返し処理を行うことができます。
例を見てみましょう。
1 2 3 4 5 6 | 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を記述します。
1 2 3 4 5 6 7 8 9 | 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に変えています。
1 2 3 4 5 6 7 8 9 | 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の出力を比較してみましょう。
1 2 3 4 5 6 | list1 = [ 1 , - 1 , 10 , - 10 ] for i in list1 : if i < 0 : print ( "異常:負の値です" ) break #もしくはcontinue print (i) |
ネスト構造でのbreakとcontinueの出力を比較してみましょう。
1 2 3 4 5 6 | for i in range ( 3 ) : for j in range ( 3 ) : if j = = 1 : print ( "「j=1」は無効" ) break #もしくはcontinue print (f "({i},{j})" ) |