1: 2016-07-12 (火) 15:56:16 njf[6] [7] [8] | 2: 2016-07-12 (火) 16:26:59 njf[6] [9] [10] | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | for i in range(3): | + | [[Python]]で回数を指定してループするのは通常for文とrangeを組み合わせる。 |
+ | |||
+ | for i in range(3): | ||
print i | print i | ||
Line 7: | Line 9: | ||
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]] |
(This host) = https://njf.jp