【Python】ブール演算、not, and, orの使い方【入門第19回】
目次
ブール演算とは?
こんにちは、narupoです。
今回は前回の比較演算に続いて、ブール演算というのをやっていきます。
このブール演算というのは比較演算とよく一緒に使われます。
覚えておくと、より複雑な条件で比較ができるようになるで覚えておきましょう。
具体的には↓を見ていきます。
not(否定)
and(AかつB)
or(AまたはB)
not, and, orの優先順位
notの賢い使い方
not(否定)
not
は真偽値を反転させる演算子です。
True
をFalse
にしたり、False
をTrue
にします。
たとえば、
:::python
not True
という演算の結果はFalse
になります。True
をnot
で反転させてるからですね。
:::python
not False
↑の演算結果はTrue
になります。
not
は比較演算などの結果を反転させたい時に使います。
たとえば↓のようにです。
:::python
not 1 == 1
ブール演算子と比較演算子を組み合わせた場合、比較演算のほうが優先されます。
よって↑の場合は先に1 == 1
が演算されます。
1 == 1
の演算の結果はTrue
ですが、その結果をnot
で反転させているので最終的な結果はFalse
になります。
not
は2つ以上つらねることができます。
たとえば↓のようにです。
:::python
not not True
↑の演算は、not True
で結果はFalse
, そしてその結果をさらにnot
で反転させているのでTrue
になります。
and(AかつB)
and
は左項と右項の演算の結果がともにTrue
だった場合に、True
になる演算です。
たとえば、
:::python
True and True
という演算の結果はTrue
になります。and
の左項と右項がともにTrue
だからです。
いっぽう、↓の演算を見てみましょう。
:::python
True and False
↑の演算の結果はFalse
になります。and
の右項の演算結果がFalse
で、左項と右項の演算結果が共にTrue
ではないからです。
たとえば次の比較演算との組み合わせを見てみましょう。
:::python
1 == 1 and 2 == 2
1 == 1
の演算の結果はTrue
で、かつ2 == 2
の演算の結果がTrue
なので、and
の演算結果はTrue
になります。
このand
を使うと複雑な演算ができるようになります。
たとえば↓のような変数を定義します。
:::python
age = 5
name = 'ミケ'
この変数を使って↓のような比較演算をしてみます。
:::python
age >= 3 and name == 'ミケ'
この演算は、age
が3
以上、かつname
がミケ
ならTrue
になる演算です。
↑の演算の結果はTrue
になります。
age
を1
にしてみましょう。
:::python
age = 1
すると、先ほどの演算の結果はFalse
になります。
age >= 3
という演算がFalse
になり、その結果and
の演算の結果がFalse
になるからです。
また、and
は2つ以上つらねることも可能です。
:::python
True and True and True
↑の演算の結果はTrue
になります。
and
でつなげている式の結果がすべてTrue
になるので、and
による最終的な演算の結果もTrue
になります。
↓のように式の一部をFalse
にすると、
:::python
True and True and False
演算の結果はFalse
になります。
オペランド
この記事では左項、右項などと表現していますが、正確には式の演算子以外の要素はオペランド(被演算子)といいます。
いっぽう、演算子は英語でオペレーターと言います。
左オペランド、右オペランドよりは左項、右項のほうがわかりやすいと思うので、この記事ではそのような表現を使っています。
or(AまたはB)
or
は左項と右項のどちらかいっぽうがTrue
だった場合に、True
になる演算です。
:::python
True or True
↑の演算の結果はTrue
になります。
:::python
True or False
↑の演算の結果もTrue
になります。
or
の左項がTrue
だからですね。
:::python
False or True
↑の演算の結果もTrue
です。
:::python
False or False
↑の演算の結果はFalse
になります。
両方ともFalse
だからですね。
:::python
1 == 0 or 2 == 2
↑の演算の結果はどうでしょうか。
1 == 0
の演算の結果はFalse
ですが、2 == 2
の演算の結果はTrue
になります。
よってor
の演算の結果もTrue
になります。
また、or
も2つ以上つらねることができます。
:::python
False or False or True
↑の演算の結果はTrue
になります。
このようにor
は、どれかひとつでも式の演算の結果がTrue
になれば結果がTrue
になります。
not, and, orの優先順位
not
, and
, or
は組み合わせて書くことが出来ます。
このとき、それぞれの優先順位はどうなるのでしょうか?
たとえば、
:::python
not True and True or True
↑のような演算を行ったとき、どれから演算されるのかという話です。
↓が演算の優先順位です。
- not(高い)
- and
- or(低い)
まず、not
の優先順位がいちばん高いので、not
が先に演算されます。
次にand
で、最後にor
です。
よって、先ほどの↓の演算は、
:::python
not True and True or True
まず最初にnot True
が演算されます。これの結果はFalse
です。
次にFalse and True
が演算されます(False
は先ほどのnot True
の演算結果です)。この結果はFalse
です。
最後にFalse or True
が演算されます(False
は先ほどのFalse and True
の演算結果です)。この結果はTrue
になります。
よって、↑の演算の結果はTrue
になります。
この演算の優先順位を変えたい場合はカッコ(()
)を使います。
:::python
not (True and True)
↑の演算ではまずカッコの中の演算が優先されます。
そのため最初にTrue and True
という演算がされます。これの結果はTrue
です。
次にnot
の演算がされます。not True
の演算結果はFalse
になるので、↑の演算の結果はFalse
になります。
:::python
(True or False) and True
↑の演算でも最初にカッコの中の演算が優先されます。
True or False
の演算結果はTrue
になり、True and True
はTrue
になるので、最終的な演算結果はTrue
です。
:::python
not ((True and True) or True)
↑の演算はどうでしょうか。
カッコが入れ子になっている場合は、内側のカッコの中の演算が優先されます。
つまり、↑の場合では最初にTrue and True
が演算されます。
その次にTrue or True
が演算され、最後にnot True
が演算されます。
よって、↑の演算結果はFalse
になります。
目が回るな~
notの賢い使い方
ここで皆さんにだけ、not
の賢い使い方をご紹介します。
ほかの人には内緒ですよ。
not
を使うとむずかしい条件の演算も簡単に書けるようになります。
たとえば、次の条件を考えてみましょう。
「age
が5
以上で、かつweight
が4
以上の猫」
この条件を書くと、普通は↓のようになります。
:::python
age >= 5 and weight >= 4
age
とweight
はともに整数が入る変数です。
では次のような条件を書きたい場合はどうなるでしょうか。
「age
が5
以上で、かつweight
が4
以上。それ以外の猫」
この条件を書きたい場合「それ以外」なので、最初は次のような考えで演算を書こうとします。
えーっと、age
が5
以上の、それ以外だから、age
が5
より下で、weight
が4
以上の、それ以外だからweight
が4
より下……。
これはこれで正しい考え方なのですが、こういう時にnot
を使えば簡単にそういった条件を書けるようになります。
:::python
not (age >= 5 and weight >= 4)
↑で完了です。
最初の「age
が5
以上で、かつweight
が4
以上の猫」という条件の演算を、not
で反転させているだけです。
このようにnot
を使うと、少し頭を使わなければいけない演算も簡単に書けるようになります。
これは覚えておいて損は無いので覚えておきましょう。
おわりに
今回はブール演算(not
, and
, or
)を見てきました。
これらの演算を使えるようになると、より複雑な条件のプログラムを書けるようになります。
もっとも、そういった複雑な条件を使ったプログラムと言うのはあまり好まれるものではありません。
だれに好まれないのかと言うと、他のプログラマーや未来の自分にです。
一般的に、誰の目から見てもわかりやすい条件を使ったプログラムが好まれる傾向があります。
よって、腕のいい人ほどわかりやすい条件を作ります。
みなさんもこれらの演算子を使って複雑な条件を書けるようになったら、次はその複雑な条件を簡単にする方法を考えるようにするといいでしょう。
そうすればより開発効率は上がります。
以上、次回に続きます。
また見てね