Python if文

第3ステージ?Python学習【365日チャレンジ!】31日目に突入したマスターU(@Udemy11)です。

いよいよというか、ついにプログラミングっぽい【if文の使い方】にたどり着きました。

ほんと、if文って、プログラミングの基本中の基本だと思うんですよね。

エクセルなどで使用するVBAでもif文は、条件分岐の基本構文ですし、エクセルの関数でも普通にIF関数を使うので、ちょっとわかったつもりになってしまってるんですよね。

まさにここが落とし穴!

普段から使っているから、わかったつもりでもきちんと理解していないので、なんとなくしか使い方がわかりません。

今回は、しっかりとif文の使い方をマスターしたいと思います。

昨日の復習

昨日は、複数行にコードを記載する書き方を学習しました。

Python学習を始めた頃と昨日の2回学習しているので、かなり頭には残っています。

以前、【Python】リストを使った具体的イメージの記事で【エビングハウスの忘却曲線】を紹介しましたが、復習するかしないかで記憶に留まる割合が変わってきますので、復習はとても大切です。

エビングハウスの忘却曲線

今日は、対話型シェルで昨日の復習をしてみましょう!

>>> x = 'aaaaaaaaaaaaaaaaa' \
... + 'bbbbbbbbbbbbbbbbb'
>>> x
'aaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbb'
>>> y = (1 + 1 + 1 + 1 + 1 + 1 + 1 
... + 1 + 1 + 1 + 1 + 1 + 1)
>>> y
13

対話型シェルでこのような書き方はあまりしないと思いますが、とりあえず試してみると丸括弧で始めるか、改行前にバックスラッシュを入れずに改行すると、その時点で変数が定義されます。

丸括弧で始めたり、バックスラッシュを入れると、改行後に、【…】が表示され、行の続きを入力することができます。

講座でやっていること以外のことを試してみれば、より理解が深まるので、試してみるってほんと大切です。

if文の基本

まさにプログラミングの基本中の基本である条件分岐が【if文】です。

エクセルでも最もポピュラーな条件分岐関数なので、誰もが一度は使ったことがあると思います。

ただ、エクセルと違うところもあるので、この機会にしっかりと学習しましょう!

x = 5
if x < 10:
    print('x is small')

出力結果

'x is small'

変数xを定義して、変数xが10より小さい場合は’x is small’と表示するコードです。
条件を満たしている場合、次の行を実行するので、5は10より小さいため、’x is small’と出力されます。

変数xが10の場合は、何も出力されません。

elseを加える

エクセルのIF関数なら、条件を満たした場合とそれ以外の場合に実行する命令が必要ですが、Pythonの場合は条件を満たした場合に次の行を実行するだけです。

条件を満たさないときの命令を入れなくてもエラーは起こりません。

ただ、普通は、条件を満たさないときの命令も入れるのが普通ですので、入れる場合は、【else】を付け加えます。

x = 20
if x < 10:
    print('x is small')
else:
    print('x is big')

出力結果

'x is big'

この場合は、変数xは10より小さくありませんので、elseのあとの命令を実行し、’x is big’が出力されます。

インデントは重要

C言語などは、{}(Braces)でくくってまとまりを分けていますが、Pythonの場合はインデントを揃えることでまとまりを判断しています。

基本は一つのインデントが半角スペース4つというのが暗黙のルールですが、半角スペース2つでもインデントを揃えていればきちんと認識してくれます。

Pycharmの場合は、改行したときに自動的に半角スペースが4つのインデントが入りますが、Pythonistaの場合は、半角スペース2つ分が自動的に挿入されます。

Pythonista Pycharm インデント

elifで条件を追加

エクセルのIF関数は、条件分岐をする場合はどんどんIF関数を入れ子にすることが多いですが、Pythonの場合は、elifをifとelseの間に入れて条件分岐を利用します。

x = 20
if x < 10:
    print('x is small')
elif x == 20:
    print('Bingo!!')
else:
    print('x is big')

出力結果

'Bingo!!'

この場合は、変数xが20のときだけ’Bingo!!’と出力し、その他の場合は条件を満たしたときとそれ以外のときで出力がわかれるようになっています。

elifはいくつでも追加できますが、もし同じ条件を記述してしまったときにその条件を満たした場合、上の行に書かれた条件が優先されます。

x = 20
if x < 10:
    print('x is small')
elif x == 20:
    print('x is twenty')
elif x == 20:
    print('Bingo!!')
else:
    print('x is big')

出力結果

'x is twenty'

条件を満たした時点で、if文がそこで終了するということですね。

仕組みが理解できれば、、エクセルのIF関数よりわかりやすい気がします。

ifの入れ子

エクセルのIF関数と同じように、Pythonのif文も入れ子にすることが可能です。

a = 1
b = 2
if a > 0:
    print('a is plus')
    if b > 0:
        print('b is plus')

出力結果

'a is plus'
'b is plus'

この場合だと、変数aが0より大きい場合は’a is plus’と表示して、さらに変数bをチェックして、0より大きい場合は’b is plus’と表示します。

もし、変数aが0より小さかった場合は、変数bのチェックは行われずにif文が終了するので、出力結果には何も表示されません。

変数aも変数bも必ず条件をチェックするためには2つ目のifを入れ子にするのではなく、最初のifと同じインデントにする必要があります。

a = -1
b = 2
if a > 0:
    print('a is plus')
if b > 0:
    print('b is plus')

出力結果

'b is plus'

この場合、変数aのチェックが終了後、必ず次のif文を実行することになるので、変数aが条件を満たしていない場合、何も出力せずに変数bのチェックを実行するので、出力結果は’b is plus’ということになります。

また、最初のif文でelseを使って条件分岐をして、2つ目のifのインデントを下げてしまうと、今度は最初のifの条件を満たしたときは、変数bのチェックは実行されません。

a = 3
b = 2
if a > 0:
    print('a is plus')
else:
    if b > 0:
        print('b is plus')

出力結果

'a is plus'

ちょっとした違いがおもしろい

こんな簡単な条件分岐でさえ、ちょっとした表記の違いで違った出力結果になってしまうのがプログラミングのおもしろいところですね。

ちなみに、インデントの位置がスペース1つ分ずれるとエラーを起こしてしまうので、きちんと見た目を整えることが大切です。

個人的には性格がきっちりしているので、見た目を整えるのは得意ですが、知らない間に間違った入力をしていたりするので、よくPythonにエラーを返されてしまいます。

といっても、たくさん間違えないことには、何度も確認しないので、どんどんコードを書いて、しっかり頭に刻んでいこうと思います。

それでは、明日もGood Python!