繰り返し
オブジェクトから要素を一つずつ取り出して繰り返す
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は素数ということになります。