Pythonの繰り返し処理(反復処理)は、記述がシンプルです。
基本的には、while文とfor文の2種類があります。
豊富なサンプルでPythonの繰り返し処理を解説します。
多くの書籍やサイトではfor文から説明しているようですが、繰り返し処理の考え方をきちんと学ぶには、最初にwhile文から入るべき、とわたしは考えています。
よって、本記事では、次の順序で説明します。
1.while文
2.for文
while文による繰り返し処理
まずは実行イメージです。
0 1 2 3 4 繰り返し 5回
これは次のようなスクリプトで成り立っています。
ファイル名:34_while_kihon.py
1 2 3 4 5 6 | # 繰り返し処理の基本(while) i = 0 while i< 5 : print (i) i = i + 1 print ( "繰り返し {}回" . format (i)) |
解説
5回同じ処理を繰り返すプログラムです。
繰り返し処理のポイントは、3つあります。
- カウンタ変数を準備( i = 0 )
- 繰り返し条件を設定( i < 5 が成り立つ間繰り返す)
- カウンタ変数を1ずつ増やす( i = i + 1 )
イメージ図です。
while文の後の i < 5 は条件式です。繰り返し条件と呼びます。
繰り返し処理は、条件が成り立つ間繰り返します。
繰り返す対象はタブで字下げされた行となります。条件が成り立たなくなったら繰り返し処理を抜け次の処理に移ります。
先ほどのスクリプトに処理の流れと解説を加えるとこうなります。
条件の i < 5 は、変数 i が 0~4の間成り立ちます。変数 i が 5 になった時、成り立たなくなるので、この場合は print(“繰り返し{}回”.format(i)) の部分に移ることになります。
i = i + 1 などのように式の左辺と右辺に同じ変数がある場合、それまでの変数の値に1加えた値を入れなおすことになります。変数が i = 0 だったとすると、次の処理で i = i + 1とすれば、i = 0 + 1 が実行されたことになり、i = 1 となります。つまり1加算されます。
i = i + 1 などの式はよく使うので、 i += 1 と省略して記述することもできます。
例えば、 i = i + 2 なら i += 2 と省略して記述できます。
よって、先ほどのスクリプトは、以下のように記述しても同じです。
1 2 3 4 5 6 | # 繰り返し処理の基本(while) i = 0 while i< 5 : print (i) i + = 1 print ( "繰り返し {}回" . format (i)) |
while文の例
キーボードから入力した数だけ★を表示
実行イメージ
いくつ? 7 [Enter]
★★★★★★★
ファイル名:35_while_star.py
1 2 3 4 5 6 7 8 | # while文:キーボードから入力した数だけ★を表示 print("いくつ? ", end="") star = int(input()) i = 0 while i < star: print("★", end="") i += 1 |
5の倍数のときだけ数値の横に * を表示
実行イメージ
1
2
3
4
5*
6
:
:
94
95*
96
97
98
99
100*
ファイル名:36_while_5bai.py
1 2 3 4 5 6 7 8 9 10 | # while文の例 # 1~100まで表示 # 5の倍数のときだけ数値の右に*を表示 i = 1 while i< = 100 : if i % 5 = = 0 : print ( "{}*" . format (i)) else : print ( "{}" . format (i)) i + = 1 |
for文による繰り返し処理
前述のwhile文の処理をfor文を使って記述するとシンプルになります。
実行イメージ
0
1
2
3
4
繰り返し 4回
上記の最後で「繰り返し 4回」と表示されているのは、間違いではありません。
前述のwhile文との違いを知ってもらうためにあえてこうしています。
ファイル名:37_for_kihon.py
1 2 3 4 | # for文で5回繰り返す for i in range ( 5 ): print (i) print ( "繰り返し {}回" . format (i)) |
解説
while文では、5行あった処理がわずか3行になってしまいました。
変数 i の初期値設定 i = 0 が存在しないのと、繰り返し条件 i < 5 もありません。更にカウンタ変数 i を1ずつ増やす処理 i = i + 1 もありません。
すべては、for i in range(5) がまかなっています。
range(5)は、0, 1, 2, 3, 4 と0から5回分数値を1ずつ増やしていきます。
i in range(5) とすると0, 1, 2, 3, 4 の数値が順に変数 i に代入されることになります。便利ですが、イメージがつかみにくいので、最初にwhile文を紹介したわけです。
ただし、実行結果を見てもらうと分かるようにfor文では、条件式 i < 5 が成り立たなくなって終わるわけではない、という事です。あくまで 0, 1, 2, 3, 4 と数値を増やしただけなので、最後に変数 i を表示しても 4 のままなのです。
for文のイメージです。
rangeの種類
for文と組み合わせて使うrangeには、いくつか記述方法があります。
3つの例を示します。
range(5)
意味:0から1ずつ増やして5未満まで
0, 1, 2, 3, 4
range(1, 10)
意味: 1から1ずつ増やして10未満まで
1, 2, 3, 4, 5, 6, 7, 8, 9
range(1, 10, 2)
意味:1から2ずつ増やして10未満まで
1, 3, 5, 7, 9
for文の例
1~10まで表示
実行イメージ
1
2
3
4
5
6
7
8
9
10
ファイル名:38_for_range.py
1 2 3 | # for文:1~10まで表示 for i in range ( 1 , 11 ): print (i) |
0~100まで5刻みで表示
実行イメージ
0 5 10 15 20 : 90 95 100
ファイル名:39_for_5kizami.py
1 2 3 | # for文:0~100まで5刻みで表示 for i in range ( 0 , 101 , 5 ): print (i) |
10~1まで1ずつ減らして表示
実行イメージ
10
9
8
7
6
5
4
3
2
1
ファイル名:40_for_herasu.py
1 2 3 | # for文:10~1まで1ずつ減らして表示 for i in range ( 10 , 0 , - 1 ): print (i) |
5つの数の合計値を求める
実行イメージ(キーボードから5回入力)
1個目の数? 10 [Enter]
2個目の数? 20 [Enter]
3個目の数? 30 [Enter]
4個目の数? 40 [Enter]
5個目の数? 50 [Enter]
合計は、150です
ファイル名:41_for_gokei.py
1 2 3 4 5 6 7 8 9 | # 5つの数の合計値を求める gokei = 0 for i in range ( 5 ): print ( "{}個目の数? " . format (i + 1 ), end = "") suti = int ( input ()) gokei + = suti print ( "合計は、{}です" . format (gokei)) |
指定した回数、数値を入力させ合計値を求める
実行イメージ(キーボードから入力)
何回?3 [Enter] 1回目の数? 34 [Enter] 2回目の数? 56 [Enter] 3回目の数? 78 [Enter] 合計は、168です
ファイル名:42_for_gokei2.py
1 2 3 4 5 6 7 8 9 10 11 12 | # 指定した回数、数値を入力させ合計値を求める gokei = 0 print ( "何回?" , end = "") kaisu = int ( input ()) for i in range (kaisu): print ( "{}回目の数? " . format (i + 1 ), end = "") suti = int ( input ()) gokei + = suti print ( "合計は、{}です" . format (gokei)) |
コメント