2009年10月9日金曜日

ループ(第1回)

ループを説明するまえに、Pythonのプログラムのブロック構造について簡単に紹介しておきます。

C,C++,Java,JavaScript,PHPなどの言語では、プログラムのブロック構造は{}で表します。
1: for(i=0;i<10;i++){
2:   printf("%d", i);
3: }
このC風のプログラムでは、1行目の{と3行目の}の間がループの範囲になります。

同じプログラムをPythonで書くと、
1: for i in range(10):
2:   print i
となります。Pythonでは、インデント(文字の左端の場所のずれ)以外に何も必要ありません。逆にいうと、インデントが文法上大きな意味を持っています。

インデントにはスペース(もちろん半角でお願いします)とタブを使えますが、混ぜると大変なことになるので、どちらか片方を使うようにしましょう。



for in を使うと、リスト内の各要素に対して処理を実行できる。
>>> for x in [1,2,3,4,5]:
...   x
...
1
2
3
4
5

リスト内の値は数字でなくてもよい。
>>> for c in ["a","b","c","d","e"]:
...   c*5
...
'aaaaa'
'bbbbb'
'ccccc'
'ddddd'
'eeeee'

10回ループなどの場合はrange()関数を使うとよい。
>>> for i in range(10):
...   i,i*i
...
(0, 0)
(1, 1)
(2, 4)
(3, 9)
(4, 16)
(5, 25)
(6, 36)
(7, 49)
(8, 64)
(9, 81)

range関数は、実際にはリストを返している。
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

変則的なループ範囲の指定はrange関数の第2引数、第3引数を使えばよい。
>>> range(5,10) #5からスタート
[5, 6, 7, 8, 9]
>>> range(0,10,2) #step 2
[0, 2, 4, 6, 8]
>>> range(9,-1,-1) #step -1
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

2重ループ
>>> for i in range(1,10):
...   for j in range(1,10):
...     print i*j, #最後に,を入れると改行しない
...   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

以上でループ(第1回)は終わりです。

0 件のコメント:

コメントを投稿