Python If、For、Whileの制御文

内包表記 Python入門
内包表記

今日は、IF文、For文、While文などの、各種制御文の勉強をしました。

IfとかForとかの条件分岐が出てくると、一気にプログラミングっぽくなってきますね。

 

if文

Pythonでのif文は、ほとんどVBAのif文と同じ感じなので、VBAをちょっとかじったことある人だったらすぐに理解できると思います。

こんな感じで、aが20だとして、
if文

if文(1)最初にifの条件(a < 10)を判定して、
(2)当てはまらないからelseへ行き、bへ200を代入
(3)で、bをprintすると、200が表示される

という具合です。

 

ちなみに、if文の分岐について、VBAだと「elseif」と書くところ、Pythonだと「elif」と、ちょっと短い感じになります。

こんな感じです↓

if文

if文

 

更に、1つのif文の中に、入れ子で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のリストの最初から最後まで繰り返している処理になります。

for文

for文

 

ちなみに、range()を使っても繰り返し処理ができます。
下記のrange(7)の場合、0からrange( )内の数よりも一つ小さい、6までの値がaに入って、繰り返しprintされています。

for文

for文

 

なお、range()は、開始値、終了値、ステップ(何個おきか)を指定することができます。

下記の例だと、range(10,30,3)とすることで、10から30まで、3ごとの値がaに入ります。

10(開始値)、13、16・・・、という感じで、最後は28になります。(30だと28から3空いてないので表示されません)

for文

for文

ちなみに、for文とは違いますが、range()を使うと、以下のようにしてリストを作ることもできます。

for文

for文

for文を使うと、スマートな感じでコードがまとまるので、プログラム文が短くて済みます。

 

while文

while文は、処理を繰り返す回数が決まってない場合に使うと便利です。

たとえば、以下のような感じで、aが10になるまで、0に2を足してprint、2に2を足してprint・・・、ということを繰り返します。

で、8+2=10まで繰り返して、次はaが10ですが、a<10を満たさなくなるので、ループがストップします。

while文

while文

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されます。

break

break

 

続いて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です。

上記の例はリストでの表記になっていますが、リストと同じような、タプルや辞書、セットでも同様に内包表記をつかうことができます。

 

だんだんとややこしくなってきましたね。。。

シンプルでエレガントなコードをかけるように、いろいろな書き方ができるようにしておいた方が良いですね!

 

タイトルとURLをコピーしました