Python

Python基礎講座(9 反復)

More than 3 years have passed since last update.


反復処理

前回までに「順次・分岐・反復」のうち「順次・分岐」を説明しました。

今回は「反復」を説明します。「反復」は『複数回同じ処理を行う』と

表現できますが、同じ処理に異なる値を使用することも可能なため、

厳密には同じ処理ではありません。


forループ


range

任意の回数繰り返したい場合はfor i in range()を使用します。


for_explain1.py

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_explain2.py

for i in range(1,10):

print("{0}".format(i))

1

2

3

4

5

6

7

8

9


出力結果は上記のようになります。


enumurate

リストの要素を1つずつ取得しながら、要素それぞれに処理を行いたい場合が多いです。

この場合はenumurateを使用します。


for_explain3.py

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)になります。


for_explain4.py

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ループは

「特定の条件を満たす間繰り返す」場合に使用します。


while_explain.py

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ループを使用する際は、無限ループにならないよう、ループカウンタの変更を忘れず記述してください。

ただしこの時ループカウンタのインデントに注意してください。下のプログラムは誤ったプログラムです。


while_explain_IL.py

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ループのどちらでも使用できます。


break_continue_explain.py

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ループのどちらでも使用できます。


loop_else.py

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

しかし、以下のプログラムでも同じ実行結果が返されます。


loop_else2.py

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を使用しない人もいます。

次: Python基礎講座(10 内包表記)