ループ
プログラム内でループを使うのは以下の3パターン。C言語などになれていると1番や2番を使いたくなるかもしれないが、Pythonでは3番が適してるケースが多い。
- N回ループ
一番基本的なタイプ - 条件を満たすまでループ
数値演算でよく使う - リスト、タプル、ディクショナリの各要素に対してループ
Webアプリに良く使う。最重要
1. N回ループ
Range関数でリストを作り、そのリストに対してforループを実行する。Webアプリではほとんど使わない。
0~4までループ
1 2 3 4 5 6 7 8 9 10 | >>> range(5) [0, 1, 2, 3, 4] >>> for i in range(5): ... print i ... 0 1 2 3 4 |
逆順ループ
range関数だけで処理しようとすると、開始値と終了値がわかり辛い。
1 2 3 4 5 6 7 8 | >>> for i in range(4,-1,-1): ... print i ... 4 3 2 1 0 |
range関数で作成したリストを反転する方が分かりやすい。(reverse関数は値を返さないので使用不可)
1 2 3 4 5 6 7 8 9 10 11 12 13 | >>> for i in range(5)[::-1]: ... print i ... 4 3 2 1 0 #参考 >>> print range(5)[::-1] [4, 3, 2, 1, 0] >>> print range(5).reverse() None |
2. 条件を満たすまでループ
1のforループは、実行回数が事前にわかっているような場合しか使えない。実行回数が事前に決定できない場合はwhileループを使う。
特定の文字列が入力されると実行を終了する
コマンドラインから入力した文字を2回繰り返して出力します。qを入力すると終了します。
1 2 3 4 5 6 7 8 9 10 | >>> while True: ... input = raw_input(">") ... if(input == "q"): break ... print input * 2 ... >test testtest >python pythonpython >q |
break: ループから抜ける。
continue: ループの先頭に戻り、条件を満たしていればループを継続する。
2.1 while .. else 構文
whileのループ継続条件が偽になったときにelseブロック内が実行されます。breakでループを抜けた場合はelseブロック内は実行されません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #elseが実行される例 >>> while x > 0: ... x = x - 1 ... else: ... print x ... 0 #elseが実行されない例 >>> while x > 0: ... x = x - 1 ... if x == 5: ... break ... else: ... print x ... |
3. 集合の各要素に対してループ
Pythonでループを記述する場合、大半は集合の各要素に対してループすることになる。1のN回ループも、集合を一度つくってから、その集合の各要素に対してループを実行している。
シーケンスの各要素をループ
リスト(list)、タプル(tuple)、文字列などのシーケンスに対してのループです。
リストの各要素に対してループ
1 2 3 4 5 6 | >>> for char in ["a", "b", "c"]: ... char ... 'a' 'b' 'c' |
タプルの各要素に対してループ
1 2 3 4 5 6 | >>> for char in ("a", "b", "c"): ... char ... 'a' 'b' 'c' |
文字列に対してループ
文字列は文字の列(シーケンス: sequence)なので、文字列に対してもループできる。
1 2 3 4 5 6 | >>> for char in "abc": ... char ... 'a' 'b' 'c' |
ディクショナリ(dict)の各要素をループ
keyの部分がインデックス変数に代入される。
1 2 3 4 5 6 7 8 9 | >>> dict1 = {'a': u'あ', 'i':u'い', 'u':u'う', 'e':u'え', 'o':u'お'} >>> for key in dict1: ... print key + " -- " + dict1[key] ... a -- あ i -- い u -- う e -- え o -- お |