今日は、IF文、For文、While文などの、各種制御文の勉強をしました。
IfとかForとかの条件分岐が出てくると、一気にプログラミングっぽくなってきますね。
if文
Pythonでのif文は、ほとんどVBAのif文と同じ感じなので、VBAをちょっとかじったことある人だったらすぐに理解できると思います。
こんな感じで、aが20だとして、
if文(1)最初にifの条件(a < 10)を判定して、
(2)当てはまらないからelseへ行き、bへ200を代入
(3)で、bをprintすると、200が表示される
という具合です。
ちなみに、if文の分岐について、VBAだと「elseif」と書くところ、Pythonだと「elif」と、ちょっと短い感じになります。
こんな感じです↓
更に、1つのif文の中に、入れ子でif文を入れることもできます。
上記の例は、
「a<10の時の処理」の中に、更に「Cが10に等しいかどうか」のif文が入っている感じになります。
で、aは20で10より大きいため、elseの処理に流れて、if c == 30 :と、cは30に等しいため、bには300が代入されます。
そして、インデント(行頭ぞろえ)が解除されて、if文から抜けた後に、「b += 1」とあるため、1がbにプラスされて、print(b)では、301が表示されています。
for文
for文を使うと、同じような繰り返し処理を簡潔に表現できます。
たとえば、下記はaのリストを、最初から順番にbに代入、代入した値を2倍してprint、という処理を、aのリストの最初から最後まで繰り返している処理になります。
ちなみに、range()を使っても繰り返し処理ができます。
下記のrange(7)の場合、0からrange( )内の数よりも一つ小さい、6までの値がaに入って、繰り返しprintされています。
なお、range()は、開始値、終了値、ステップ(何個おきか)を指定することができます。
下記の例だと、range(10,30,3)とすることで、10から30まで、3ごとの値がaに入ります。
10(開始値)、13、16・・・、という感じで、最後は28になります。(30だと28から3空いてないので表示されません)
ちなみに、for文とは違いますが、range()を使うと、以下のようにしてリストを作ることもできます。
for文を使うと、スマートな感じでコードがまとまるので、プログラム文が短くて済みます。
while文
while文は、処理を繰り返す回数が決まってない場合に使うと便利です。
たとえば、以下のような感じで、aが10になるまで、0に2を足してprint、2に2を足してprint・・・、ということを繰り返します。
で、8+2=10まで繰り返して、次はaが10ですが、a<10を満たさなくなるので、ループがストップします。
while文は、「条件を満たすまで繰り返す」という命令文になるので、命令文を満たすことがない条件を入れてしまうと、無限ループになってプログラムが終わらなくなってしまうので、気を付けなければいけないですね。
ループと分岐の組み合わせ
ループと分岐を組み合わせると、よりプログラミングっぽくなってきます。
下記の例は、aというリストの中の数字から、2で割って余りがゼロ、つまり偶数を選んでprintする、というプログラムになります。
for b in a: で、変数bにaのリストを順番に入れていき、b%2(bを2で割ったあまり)が0だったら、bをprintして表示しています。
なお、同じように偶数をprintするプログラムを、while文を使っても表現できます。
こんな感じです↓
bがlen(a)(aリストの中の要素数)になるまで、b=0番目から数字をcに代入。
cに代入した数字を2で割って、余りが0だったら(if c%2 == 0:)、cをprintする。
そして、b(aのリストの順番)に1をプラスして、処理を繰り返す。
・・・という表現の仕方になっています。
breakとcontinue
ループの途中で「break」を使うと、その時点でループを中断し、ループから抜け出します。
下記の例だと、リストは7までありますが、途中で5まで行ったらbreakが入っているので、ループを抜けて「ループストップゥッッッッ」がprintされます。
続いてcontinueです。
continueを使うと、ループの途中で、そのループの回だけスキップされます。
下記の例だと、5の回だけcontinueが働いて、5だけprintされません。
内包表記
リストから新たなリストを作るときに、「内包表記」を使うと、新しいリストを簡単に作ることができます。
たとえば、下記の例だと、aのリストの数値を2倍にしたbというリストを作っています。
が、この書き方を、内包表記を使うと、以下のようにスッキリ短いプログラム文で表現できます。
更に、ifを使って条件式を追加することができます。
下記は、if c < 5 で、1,2,3,4までリストに入れています。
上記は以下のような作りになっています。
b(新たなリスト) = [ c*2(要素への処理) for c(要素) in a(リスト) if c < 5(条件式) ]
ちなみに、ifの条件式の部分はなくてもOKです。
上記の例はリストでの表記になっていますが、リストと同じような、タプルや辞書、セットでも同様に内包表記をつかうことができます。
だんだんとややこしくなってきましたね。。。
シンプルでエレガントなコードをかけるように、いろいろな書き方ができるようにしておいた方が良いですね!