1: 2016-07-12 (火) 15:56:16 njf |
2: 2016-07-12 (火) 16:26:59 njf |
- | for i in range(3): | + | [[Python]]で回数を指定してループするのは通常for文とrangeを組み合わせる。 |
| + | |
| + | for i in range(3): |
| print i | | print i |
| | | |
| 1 | | 1 |
| 2 | | 2 |
| + | |
| + | このとき、iのスコープはループの外まである。 |
| + | |
| + | for i in range(3): |
| + | print i |
| + | |
| + | print i |
| + | |
| + | 結果 |
| + | 0 |
| + | 1 |
| + | 2 |
| + | 2 |
| + | |
| + | rangeは等差数列を生成する関数。つまり |
| + | |
| + | >>> range(3) |
| + | [0, 1, 2] |
| + | |
| + | となる。pythonのforループはinの要素を順にループするので、このような結果となる。 |
| + | |
| + | rangeは最小値、上限、差を引数とすることもできる。 |
| + | |
| + | >>> range(1,4) |
| + | [1, 2, 3] |
| + | >>> range(1,4,2) |
| + | [1, 3] |
| + | |
| + | 非常に回数の多いループで、リストを生成するとメモリがもったいない、という場合にはxrangeを使うとリストを生成しないのでメモリが節約できる。 |
| + | |
| + | for i in xrange(3): |
| + | print i |
| + | |
| + | xrangeはxrange型のオブジェクトを返す。 |
| + | xrange(3) |
| + | >>> range(1,2) |
| + | |
| + | そのかわり次の要素を取得するときに計算を行うので遅くなる。通常はrangeで十分。非常に大きな回数のループの時だけ考慮すれば良い。 |
| + | |
| + | pythonのforループはelse文もとれる |
| + | |
| + | for i in range(3): |
| + | print i |
| + | else: |
| + | print "loop end" |
| + | |
| + | 結果 |
| + | 0 |
| + | 1 |
| + | 2 |
| + | loop end |
| + | |
| + | else文はbreakを使ったときにとばされる |
| + | for i in range(3): |
| + | print i |
| + | break |
| + | else: |
| + | print "loop end" |
| + | |
| + | 結果 |
| + | 0 |
| + | |
| + | 例えば、ループの中の処理で何か検索し見つかればbreakして、最後まで見つからなかったときにelse文で「無かった」とメッセージを出す、といった使い方ができる。 |
| + | |
| + | # -*- coding: utf-8 -*- |
| + | from random import randint |
| + | |
| + | for i in range(3): |
| + | print i |
| + | if i == randint(0,3): |
| + | print u"あたり!" |
| + | break |
| + | else: |
| + | print u"はずれ!" |
| + | |
| + | 結果1 |
| + | 0 |
| + | 1 |
| + | あたり! |
| + | |
| + | 結果2 |
| + | 0 |
| + | 1 |
| + | 2 |
| + | はずれ! |
| + | |
| + | [[目次へ戻る>Python]] |
Counter: 2835,
today: 1,
yesterday: 0