for in ~ else文の使い方について
for文では、繰り返しが終了した後の処理を記述するのに「else」というブロックを用いることができます。
if文でのelseブロックは「if文での条件に合わない場合(false)に実行するブロック」というものですが、今回はfor文でのelse文の意味と使い方について紹介します。
elseの使い方について
else文があるfor文は、次のように記述します。
1 2 3 4 5 6 7 8 | for 変数 in 繰り返すオブジェクト : 繰り返す処理 1 繰り返す処理 2 ・・・ else : 実行する処理 1 実行する処理 2 ・・・ |
for文での繰り返し処理が終了した後に、elseブロックに記述されている処理が実行されます。
それでは、else文を使用した処理の例を見てみましょう。
1 2 3 4 | for i in range ( 3 ) : print (i) else : #elseブロックの開始 print ( "完了" ) |
1
2
完了
range関数で生成される数値を取り出すというfor文の繰り返しが終了すると、else文の処理が実行されていることがわかります。
ただし、実際はこの処理においてはelse文を使う必要はありません。次のように、for文のブロックを抜けた直後に処理を記述すれば事足ります。
1 2 3 | for i in range ( 3 ) : print (i) print ( "完了" ) |
1
2
完了
それでは、どのような時にelse文を使えば便利かといいますと・・・それはbreakを使用した時です。
breakがある時のelse文
breakは、条件にかかった場合に繰り返し処理を終了するという役割でした。else文が意味を成すのは、for文でこのbreakを使用した時となります。
breakを使用した場合、elseブロックは次のように処理されます。
・breakの条件にかからず、正常に繰り返しが終了した時⇒elseブロックは実行される
・breakの条件にかかり、途中で繰り返しが終了した場合⇒elseブロックは実行されない
それでは、breakする場合の例を見てみましょう。
リストから取り出された値が整数の場合には加算していき、elseブロックで合計値を出力するというプログラムです。
1 2 3 4 5 6 7 8 9 | numbers = [ 0.1 , 1 , 10 , 100 ] #小数点の値を含むリスト sum = 0 #sumの初期値(※初期値がないと、7行目の部分でエラーが出ます) for num in numbers : if not isinstance (num, int ) : #値がint型(整数)でない場合にはif文ブロック内の処理へ(break) print (num, "整数ではない値を含んでいます" ) break sum + = num #繰り返したnumの合計値 else : print (f "合計は{sum}" ) |
if文内に使用しているisinstanceは、値の型を判定する関数です。今回の場合、isinstance関数の前にnotがあるため、変数numがint型(整数)では無い場合にbreakが実行される形です。
numbersには整数ではない値(小数0.1)が含まれているためbreakし、elseブロックの処理(=合計値の出力)が実行されていないことがわかります。
以上のような、breakと併せて使用した場合のelse文の動作については、覚えておきましょう。
※ちなみに、breakではなくcontinueの場合、continueによるスキップが発生してもelseブロックの処理は実行されます。
上記プログラムのbreakを、continueに書き換えます。
1 2 3 4 5 6 7 8 9 | numbers = [ 0.1 , 1 , 10 , 100 ] sum = 0 for num in numbers : if not isinstance (num, int ) : print (num, "整数ではない値を含んでいます" ) continue sum + = num else : print (f "合計は{sum}" ) |
合計は111
小数の値である0.1はsumに加算されていませんが、elseブロックは実行されていることはわかります。
まとめ
else文 は、for文での繰り返しが正常終了した後に行う処理を記述するのに便利です。
breakで処理が途中終了した場合には、elseブロックは実行されません。
確認問題
breakする場合のelse文を書いてみましょう。
1 2 3 4 5 6 7 8 9 | numbers = [ 1 , 10 , 100 , "A" ] sum = 10000 for num in numbers : if not isinstance (num, int ) : print (num, "整数ではない値を含んでいます" ) break sum + = num else : print (f "合計は{sum}" ) |