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})")