for文
for文でよくif文(例外処理等)+break
を入れる。
その時、break
したのか正常終了(すべての要素を回り切る)したのか知りたい。
break
で終了した時は、そのif文に処理を書ける。
逆に、すべての要素を回った時の処理の書き方は?
参考URL:http://docs.python.jp/3.4/reference/compound_stmts.html
最初のスイート内で break 文が実行されると、 else 節のスイートを実行することなくループを終了します。 continue 文が最初のスイート内で実行されると、スイート内にある残りの文の実行をスキップして、次の要素の処理に移るか、これ以上次の要素が無い場合は else 節の処理に移ります。
ここでのスイートは、for文内での処理のこと(多分)
基礎を学んだ時にちゃんと全部見ないとこういうのを見落とす。
for文が終わった時にelseを使えば、正常終了した時に実行される。
使い方は、if-elseと一緒。
サンプル
下記のコードは、num_listに文字列が含まれているかいなかを出力するコード(なんの役にも立たない)
テスト用に最初に渡したリストには文字列を含ませています。
check_num.py
import random
def num_check(num_list):
print(repr(num_list))
for i in num_list:
if type(i) == str:
print('文字が含まれています')
break
else: print('文字を含んでいません。')
if __name__ == '__main__':
num_check([random.randint(-1, 100) if i != 5 else str(i) for i in range(10)])
num_check([random.randint(-1, 100) for _ in range(10)])
出力
output.
$ python check_num.py
[78, 3, 2, 82, 52, '5', 20, 41, 66, 98]
文字が含まれています。
[96, 10, 92, 72, 95, 9, 64, 60, 92, 77]
文字を含んでいません。
まとめ
elseを使えば、正常終了した時の処理ができる。
ちなみに、while文でも、最初の条件文でループを抜けた時の処理を同様にelseを使って表せます。