初心者のためのPython入門~条件分岐:if-else文と比較演算子,論理演算子~

どうも~むるむるです~

今回の記事では「条件分岐:if-else文と比較演算子,論理演算子」について学んでいきたいと思います.

このシリーズではプログラミング初心者が最低限のPythonの知識を最短で身に着けることを目標としています.

このシリーズでは以下の順番でPythonの基本的な知識を学習していきます.

条件分岐:if文

どんなプログラミング言語を学んでいても出てくるIf文は条件分岐の時に使用され,以下のように書くことができます.

if (条件式):
   条件式がTrueの時に実行される処理
else:
   条件式がFalseの時に実行される処理

条件式とは結果がbool型(True/False)になるような式のことです.条件式によく使われる比較演算子などについては,後でこの記事で説明します.

if ~の後とelseの後に「:」を打ち忘れないようにしましょう.あとは,if-else文の中身を書くときは1つ分だけインデントをしなくてはなりません.

インデントをするとは,行のはじめにいくつかスペースを入れて字下げを行うことを言います.スペースの数は「4つ」が推奨されています.ここでのスペースは半角スペースです.くれぐれも全角スペースを使わないように気を付けてください.エラーがでます.

Pythonでは同じ数のスペースでインデントされたまとまりを一つのブロックとみなし,処理を行います.

具体例を見た方がわかりやすいかもしれないので早速具体例を見ちゃいましょう.

x = -3
if x > 0:
    print(x)
    print('xは正')
else:
    print(-x)
    print('xは0か負')

以上のコードでは,「x>0」,つまり「x」が0より大きいなら「x」の値をそのまま出力し「’xは正’」という文字列を出力します.この二つの出力は同じ数のインデントで一つのブロックとして認識されているのがわかると思います.
「x>0」 ではないとき,「x」を-1倍して出力し「’xは0か負’」と出力します.

if文を使うことによってxの値がいくつであっても正の値(xの絶対値)を出力するになっています.実際にコードを書いて,xの値を変えて試してみてください.

条件分岐は一つの条件式のTrue/Falseだけではなく「elif」を使うことで以下のように複数の条件を考えることもできます.

score = 70
if score > 80:
    print('すばらしい!!!')
elif score > 60:## 上の条件式がFalse かつ この条件式がTrue のときこの中身が実行される
    print('合格')
else: #上の二つの条件式がFalseの時にこの中身が実行される
    print('不合格')

比較演算子

比較演算子は二つの値やオブジェクトの比較によって結果をbool型(真偽値)で返すものです.

以下がよく使われる比較演算子です.

a == baの値とbの値が等しいときTRUE
a != baの値とbの値等しくないときTRUE
a >  baの値がbの値より大きいときTRUE
a < baの値がbの値より小さいときTRUE
a >= baの値がbの値より大きいか等しいときTRUE
a <= baの値がbの値より小さいか等しいときTRUE
a is baとbが同一のオブジェクトであるときTRUE
a is not baとbが同一のオブジェクトでないときTRUE
a in baという要素がbに存在するときTRUE
a not in baという要素がbに存在しないときTRUE

初めの内は「=」と「==」を混同してしまうかもしれませんが「=」 は代入をするときに使う演算子(代入演算子)で「==」は二つの値が同じかどうか調べるときに使う比較演算子です.二つは別物なので気を付けてください.

例を見てみましょう.

a = 1
b = 2
c = 3
d = [1, 2]
if a == b:
    print('a==b')
if a != b:
    print('a!=b')
if a > b:
    print('a > b')
if c == (a+b):
    print('c == (a+b)')
if c >= (a+b):
    print('c >= (a+b)')
if a in d:
    print('a in d')
if c in d:
    print('c in d')
if a is d:
     print('a is d')
 '''
出力結果:
a!=b
c == (a+b)
c >= (a+b)
a in d
'''

上の例では条件式がTrueになるものだけが出力されています.コードと表を見比べてみてください.

論理(ブール)演算子

論理演算子はbool値(True/False)を組み合わせて評価する場合に使用される演算子です.下の表見てください.

論理積a and baとbが両方TrueならばTrue.それ以外False
論理和a or baとbの少なくともどちらかがTrueならばTrue.それ以外False
否定not aaがFalseならばTrue.aがTrueならばFalse

論理積と論理和をごっちゃにしないよう気を付けてください.論理積は両方がTrueのときのみTrue. 論理和は片方,もしくは両方がTrueのときにTrueを返します.

否定は,bool値を逆にします.

以下の例を見てみましょう.

a = 1
b = 2
if a > 0 and b > 0:
    print('a > 0 and b > 0')
if a > 0 and b < 0:
    print('a > 0 and b < 0')
if a > 0 or b < 0:
    print('a > 0 or b < 0')
if a < 0 or b < 0:
    print('a < 0 or b < 0')
if not a > 0:
    print('not a > 0')
'''
出力結果:
a > 0 and b > 0
a > 0 or b < 0
'''

上の例を一つ一つ確認してみてください.先ほどと同様,条件式がTrueのときだけ出力されるようになっています.

論理演算子はいくつも組み合わせることができます.複数論理演算子がある場合には優先順位が決まっており「or < and < not」の順番で優先順位が上がっていきます.これを知らずに論理演算子を並べるとおかしなことが起きることがあるので気を付けてください.

括弧「( )」でくくることで優先順位を変えることができるので,そちらの方をお勧めします.そっちの方がコードがわかりやすいし,ミスも少ないと思います.

以下の例を見てください.

a = 1
b = 2
c = 1
## 1つ目
if a <= c or a > b and not a == c :
    print('1つ目')
## 2つ目
if (a <= c or a > b) and (not a == c) :
    print('2つ目')
'''
出力結果:
1つ目
'''

上の例では一つ目の条件式がTrue,二つ目の条件式がFalseとなっています.なぜそうなるか優先順位に気を付けて 少し考えてみてください.

一つ目の例では「a <= c or a > b and not a == c」→ (「not a == c」 はFalse)→「a <= c or a > b and False」 →(「a > b and False」 はFalse)→「 a <= c or False」→ True という流れで計算されているため最終結果はFalseになります.

二つ目は括弧をつかって優先順位を決めているので「(a <= c or a > b) and (not a == c)」→(「 a <= c or a > b 」はTrueで「not a == c 」はFalse)→「True and False」→ Falseという流れで最終結果はFalseとなります.

少しややこしいですが,自分でもコードを色々書いてみてください.それが慣れるのに一番近道です.

確認クイズ

クイズ1

以下のコードで出力される値を考えてみてください.考えたら実際にコードを書いてみて当たっているか確認してみましょう.

temp = 37.0

if temp > 38:
    print('インフルエンザです')
elif temp > 37.5:
    print('風邪です')
elif temp > 37:
    print('微熱です')
else:
    print('健康です')

クイズ2

次の「x」,「y」, 「z」がTrueになるかFalseになるか考えてみてください.

x = True and False or False
y = (2 == 1) and (not -2 > -4) or (4 > 0)
z = True or (not x and y)

次回

次回は「繰り返し:For文,While文」について学習します.

次の記事はこちら.

機械学習のためにしっかりとPythonを勉強したいなら,ある程度の基礎を身に着けた後に下の本を読むのがお勧めです.この本をこなせば,より高いレベルへ到達できるでしょう.

最新情報をチェックしよう!