Python 入門

ホーム > 制御文 > 繰返し処理 - for, while 等

繰返し処理 - for, while 等

処理を繰り返すためには、forwhile を利用します。 for はあるコレクション内の要素一つ一つに対して、処理を行うものであり、 while は条件が真である間、処理を繰り返すものです。

for によるループ

早速 for によるループを見てみましょう。

次の例ではリスト L を作成しておき、それぞれの要素を取り出し、 それを x に代入し、出力しています。

L = [ 'Toyota', 'Nissan', 'Honda' ] # リストを作成

for x in L :
     print x 

実行結果は次のとおりです。確かにリスト内の文字列が表示されています。

Toyota
Nissan
Honda

リストの範囲を: を用いて指定し、指定した範囲内の要素に対してループを行うこともできます。 次の例では [1:] と指定していますから、0 個目の要素をスキップして、最後の要素までを処理しています。

for x in L[1:] :
     print x 
Nissan
Honda

さて、ここまで見てきたように for を利用するには、あらかじめ特定のコレクションが必要です。 0, 1, 2, ... といった連番を用意したい場合はどうしたらよいでしょうか。

そのために、便利な関数があります。range です。 range 関数は引数で指定したリストを作成します。 次の例を見てください。

>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(5,10)
[5, 6, 7, 8, 9]
>>> range(0,10,2)
[0, 2, 4, 6, 8]

よって、range 関数を利用して、次のようにできます。

for i in range(5):
     print i
0
1
2
3
4

試しに九九の掛け算の表を出力してみましょう。for を入れ子にします。

# Python 2.7
for i in range(1,10):
     for j in range(1,10):
         print i * j,
     print
# Python 3.1
for i in range(1,10):
     for j in range(1,10):
         print(i * j, end=' ')
     print()

出力結果は次のとおりです。フォーマットするなりして、気が済むまで作り変えてくださいね(笑)

1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81

for の else とは?

さて、ここまでは C/C++ 言語や Java 言語など、他のプログラミング言語を利用していた人なら馴染みがあるとおもいますが、 ちょっと独特なものがあります。それは forelse です。

for...else ステートメントは、for のコレクションの走査が完了したときに、 else で指定したステートメントブロックが実行される、というものです。

for i in range(3):
     print i
else:
     print 'else... i=', i

実行結果は次のとおり。確かに else... という部分が出力されていますね。

0
1
2
else... i= 2

ただし、break を利用してループを抜けた場合は、else ブロックは実行されません。

for i in range(3):
     print i
     if 1<i:
         break;
else:
     print 'else... i=', i
0
1
2

while によるループ

以上、for ループを見てきましたが、簡単に while ループも見ておきましょう。 while は条件文が真である間、処理が繰り返されるというものです。こちらは特にコレクションなどを要求しません。

i = 3

while 0 < i:
     print i
     i -= 1
else:
     print 'else i=', i
3
2
1
else i= 0

for と同様に else ブロックも実行されていますね。 whilefor と同様に、break によってループを抜けたときには、else は実行されません。

ホーム > 制御文 > 繰返し処理 - for, while 等