超初心者のための繰り返し処理(Python)
ここでは 「for文」と「 while文」の基本を取り扱います。
まずはこんな感じでインプットしてみてください。
・ 「 for 」は、決められた条件の中で同じ処理を繰り返します。
・ 「 while 」は、条件を満たす限り同じ処理を繰り返します。
ループ処理においてプログラムは実行された通りに繰り返します。そのため何か条件を決めて制御する必要があります。「for」と「while」はその制御の仕方が異なるだけです。
「for文」について
まずどういう動きをするのかイメージを持って頂きます。
- ボールは左から順に取り出して読み上げます。
- ボールの数字は変わりますが、読み上げる行為は毎回同じです。
- ボールがなくなったら終了です。
では、これをコードで書くことにします。
読み上げる処理は print( ) で良いですね。
箱と取り出す処理はどのように書けば良いでしょうか?
そうです、箱がリストで、取り出しは for文 です。
以上を踏まえてコードを書いてみます。
【書き方のルール】
- 1行目には、「for 変数 in 箱 :」で始まるコードを書く。
- 2行目はfor からtab1個分だけあけた後に処理を書く。(これをインデントと言います。forにぶら下がる繰り返し処理であることを明示します。)
【実際の動き方】
今回の箱は、[ 0, 1, 2, 3]のリストとなります。変数は適当に i と設定しています。
for で取り出したボール(コードでは数字)が順番に変数 i に代入されて、print( i )で出力されていきます。
[ 0, 1, 2, 3] ⇒ i (出力内容)
ループ1 ⇒ 0 print( 0) ⇒ 0
ループ2 ⇒ 1 print( 1) ⇒ 1
ループ3 ⇒ 2 print( 2) ⇒ 2
ループ4 ⇒ 3 print( 3) ⇒ 3
結果だけみると全部が一気に取り出されたように感じますが、一度に取り出されるのは一つのボール(数字)だけです。
また、当然のことながらリストは数字以外も取り扱えますので、書き方次第で色々な処理が出来ることは頭に入れておいてください。
while文について
こちらもまずイメージから入りたいと思います。「for文」と同じく箱からボールを取り出して読み上げます。
先ほどと同じように0、1と読み上げていきますが、最も違うのは箱が無限ということです。このままでは天に召されてしまいます。ではどうしましょうか。
そうですね、何らかのストッパー(処理を続けるための条件)をつけないといけませんね。
例えば、以下のようにしてみます。
取り出す個数に制限をかけることで処理を止めることが出来ました。「for文」との一番の違いはここです。「for文」は処理する物や数が最初から決まっていることが制限となります。一方「while文」は処理し続ける条件を決めることが制限になります。
では上記の内容をコードで書いてみます。
【書き方のルール】
- 1行目には、「while 条件 :」で始まるコードを書く。
- 2行目はfor文と同様に、 tab1個分だけあけた後に条件を満たした場合に実施する処理を書く。
【実際の動き方】
最初はi =0と書いたので0からスタートしてループ処理が開始します。
今回は「iが4より小さい」という条件を満たす限りループが走り続けます。
ループ処理における最初の2回の動きは以下のようになります。
【ループ1回目】 【ループ2回目】
i =0 ⇒ print(i) で「0」が出力 i=1 ⇒ print(i) で「1」が出力
(条件満たす) i+1 で、iが1となる。 (条件満たす) i+1 で、iが2となる。
続けて、3・4回目も以下のように繰り返されます。
【ループ3回目】 【ループ4回目】
i =2 ⇒ print(i) で「2」が出力 i=3 ⇒ print(i) で「3」が出力
(条件満たす) i+1 で、iが3となる。 (条件満たす) i+1 で、iが4となる。
ここでi が 4となった時点で 、続けるための条件「i<4」 を満たすことが出来ません。
【ループ5回目】
i =4 ⇒ print(i) は実行されない
(条件満たさない) i+1も実行されない。
条件を満たさないため出力されませんが、ループの5回目までは動いているのはご注意ください。この後も i は 4 のまま変わることがありませんので、ループはここで止まります。よって出力としては、「0,1,2,3」となり、「for文」の例と同じになりました。しかしながら、出力までの過程は大きく異なる点はお分かり頂けたかと思います。
「for文」について補足
「for文」の説明を簡単にするため箱という表現を用いて直接中身を置きました。
しかし、箱の内容を直接的に書くのは一般的ではないので他の方法を補足します。
①数字の場合は「 range(数字)」を用いる方法が一般的です。
最も単純にrange(4)と書くと、これは0~3までの連番数字を発生させます。
つまり例に出した [0,1,2,3] と同じ意味になります。
for i in range(4): print (i) :# 0,1,2,3 が順に出力される。
range( ) には色々な数字の発生のさせ方がありますので興味あったら調べてみてください。
②箱に変数を置く。
行いたい処理が非常に多い場合にいちいち箱に書いていては大変ですし、行が長くなってしまいます。例えば、1~1000の数字を取り出す時に
for i in [1,2,3, ~, 999,1000 ] :
なんて書いていたら日が暮れてしまいます。
変数としてあらかじめ代入しておき、それを利用する方が楽です。
box = [ 0, 1, 2, 3] # range(4) でもOkです。 for i in box: #↑で作ったboxから取り出される。 print (i) # 0,1,2,3 が順に出力される。
数字の場合は①のrange( ) を使った方が良く、こちらの方法②は数字以外のものを取り扱う時に便利だと思います。
まとめ
ループ処理として代表的な「for文」と「while文」について説明しました。
コード自体の仕組みは単純なのでどのように動作するのかのイメージが掴めればすぐに使いこなせると思います。
「if文」などとも組み合わせることで色々な処理を出来るようになりますが、まずは今回の基本を押さえてくださいね。