繰り返し

オブジェクトから要素を一つずつ取り出して繰り返す

for文を使います

>>> list = ["orange", "apple", "banana"]
>>> for i in list:
...     print i
...
orange
apple
banana

for文に渡すことができるのは、文字列、リスト、タプルや、その他の反復可能オブジェクトです。

条件が成立する限り繰り返す

while文を使います。

>>> import re
>>> num = ''
# 数値が入力されるまで繰り返す
>>> while not re.compile("\d+").match(num):
...     num = raw_input("数字を入力してください: ")
...
数字を入力してください: 
数字を入力してください: hoge
数字を入力してください: 45

一定の回数繰り返す

for文とxrange()を使います。

# 5回の繰り返しを行う
>>> for i in xrange(5):
...     print i + 1, "回目"
...
1 回目
2 回目
3 回目
4 回目
5 回目

range( )を使っても同じことができますが、xrange( )が範囲を表すxrangeオブジェクトを返すのに対し、range( )はリストを返す点が異なります。リストはサイズに比例してメモリの使用量が多くなりますが、xrangeオブジェクトは扱う数値の範囲の大きさにかかわらず、メモリの使用量は一定です。

繰り返しの制御

break文は繰り返しを中断します。
continue文はブロック内の残りの処理を飛ばし、次の繰り返しに移ります。

>>> import re
>>> n = None
>>> while True:
...     n = raw_input("数字を入力してください: ")
...     if n == "z": break # "z"が入力されたらループを抜ける
...     if not re.compile("\d+").match(n):
...         continue       # 数字以外が入力されたら残りの処理をスキップ
...     n = int(n)
...     num = 0
...     for i in xrange(1, n + 1):
...         num = num + i
...     print "1から%dまでの合計は%dです" % (n, num)
...
数字を入力してください:
数字を入力してください: hoge
数字を入力してください: h23
数字を入力してください: 10
1から10までの合計は55です
数字を入力してください: 100
1から100までの合計は5050です
数字を入力してください: z
>>>

繰り返しの後処理

for文とwhile文はelse節を持つことができます。else節は繰り返しが終了した後に実行されますが、break文で繰り返しが中断された場合には実行されません。

# 1〜100までの素数を調べる
>> num = 100
>>> primes[2, 3] # 素数を格納するリスト
# 2以外の偶数は素数ではないので奇数だけを調べる
>>> for n in xrange(5, num+1, 2):
...     i = 1
        # √n以下の素数の中にnを割り切れる数があるかを調べる
...     while primes[i] ** 2 <= n: # primes[i] <= √nと同じ
...         if n % primes[i] == 0:
...             break 
...         i = i + 1
        # 割り切れる数がなければnは素数なのでprimesに追加
...     else:
...         primes.append(n)
...
# 10個ずつ表示する
>>> for i in xrange(0, len(primes), 10):
...     p = tuple(primes[i:i+10])
...     print " ".join(["%2d"] * len(p)) % p
...
 2  3  5  7 11 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97

nが素数aで割り切れないということはaの倍数でも割り切ることはできません。また、a * b = nが成り立つ場合、aとbのどちらか一方は必ず√n以下になります。つまり、√n以下の素数の中にnを割り切れる数がなければ、nは素数ということになります。