Edited at

[python]for 文の使い方をすべて知らなかった

More than 3 years have passed since last update.


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を使って表せます。