反復処理
前回までに「順次・分岐・反復」のうち「順次・分岐」を説明しました。
今回は「反復」を説明します。「反復」は『複数回同じ処理を行う』と
表現できますが、同じ処理に異なる値を使用することも可能なため、
厳密には同じ処理ではありません。
forループ
range
任意の回数繰り返したい場合は**for i in range()**を使用します。
for i in range(5):
print("{0}".format(i))
変数iをプログラムでは「ループカウンタ」と呼びます。
このプログラムではループカウンタを出力していますが、実行結果は以下になります。
0
1
2
3
4
range(X)と書くことで、ループカウンタの値は0からX-1を格納し、X回繰り返し処理を行います。
ループカウンタの値をプログラムの処理で用いることが出来ます。
range(X,Y)と記述することで、ループカウンタの開始の値を設定することができます。
ループカウンタの値はXからY-1を格納し、Y-X回繰り返し処理を行います。
for i in range(1,10):
print("{0}".format(i))
1
2
3
4
5
6
7
8
9
出力結果は上記のようになります。
enumurate
リストの要素を1つずつ取得しながら、要素それぞれに処理を行いたい場合が多いです。
この場合はenumurateを使用します。
a = ["a","b","c","d","e"]
for idx,elem in enumerate(a):
print("{0} = {1}".format(idx,elem))
0 = a
1 = b
2 = c
3 = d
4 = e
出力結果は上記のようになります。
forの後ろに2つの変数を設定可能です。
最初の変数がループカウンタ(上記のプログラムではidx)になり、
後の変数がリストのループカウンタに対応した要素(上記のプログラムではelem)になります。
a = ["a","b","c","d","e"]
for idx in enumerate(a):
print("{0}".format(idx))
(0, 'a')
(1, 'b')
(2, 'c')
(3, 'd')
(4, 'e')
forの後ろに変数を1つのみ設定した場合、変数にはループカウンタと対応した要素が格納されます。
whileループ
forループが「決められた任意の回数繰返す」のに対して、whileループは
「特定の条件を満たす間繰り返す」場合に使用します。
a = ["ok","ok","ok","ng","ok"]
i = 0
while a[i] == 'ok':
print("a[{0}] is ok".format(i))
i = i + 1
出力結果は以下のようになります。
a[0] is ok
a[1] is ok
a[2] is ok
繰り返し処理の最初にa[i]が"ok"かを判定し、Falseの場合繰り返し処理を終了するため、
a[3]以降は処理の対象となりません。
whileループを使用する際は、無限ループにならないよう、ループカウンタの変更を忘れず記述してください。
ただしこの時ループカウンタのインデントに注意してください。下のプログラムは誤ったプログラムです。
a = ["ok","ok","ok","ng","ok"]
i = 0
while a[i] == 'ok':
print("a[{0}] is ok".format(i))
i = i + 1
字下げが不正の場合(i = i + 1がwhileループ内に設定されていない)
whileループ内ではiは0から変わらないため、無限ループが発生します。
※もし無限ループが発生してしまった場合は(使用している開発環境にもよりますが)
Ctrlキーを押しながら「C」を押すか、右上の×を押してプログラムを強制終了してください。
breakとcontinue
「繰り返し処理を終了する」処理がbreak、「今回の繰り返しを終了し、次の繰り返し処理を始める」処理がcontinueです。
forループ、whileループのどちらでも使用できます。
i = 0
while i < 10:
i = i + 1
if i < 3:
continue
print("i is {0}".format(i))
if i == 5:
break
print("final i is {0}".format(i))
出力結果は以下となります。
i is 3
i is 4
i is 5
final i is 5
プログラム内でcontinueとbreakは以下のような意味を持ちます。
if i < 3:
continue
は、「iが3より小さい場合、以降の処理を行わなずに次の繰り返し処理を行う」
という意味のため、iの値が0、1、2の場合は画面に値が出力されません。
if i == 5:
break
は、「iが5の場合、繰り返し処理を終了する」という意味のため、最後に出力されるiは5です。
ループ内のelse
ifでも使用したelseをループ文の最後に記述すると、「ループが終了した時の処理」として使用できます。
forループ、whileループのどちらでも使用できます。
for i in range(3):
print("{0}".format(i))
else:
print("for loop done")
while i < 5:
i = i + 1
print("{0}".format(i))
else:
print("while loop done")
実行結果は以下のようになります。
0
1
2
for loop done
3
4
5
while loop done
しかし、以下のプログラムでも同じ実行結果が返されます。
for i in range(3):
print("{0}".format(i))
print("for loop done")
while i < 5:
i = i + 1
print("{0}".format(i))
print("while loop done")
実際にPythonを日常的に使用しているプログラマでも、ループ内のelseを使用しない人もいます。