スポンサーリンク

コードが書ける!数式が書ける!AAが書ける!スタンプが貼れる!

無料の匿名掲示板型SNS「このはちゃんねる

新規会員募集中!

【Python】ブール演算、not, and, orの使い方【入門第19回】

100, 2019-08-12

目次

ブール演算とは?

こんにちは、narupoです。

今回は前回の比較演算に続いて、ブール演算というのをやっていきます。
このブール演算というのは比較演算とよく一緒に使われます。
覚えておくと、より複雑な条件で比較ができるようになるで覚えておきましょう。

具体的には↓を見ていきます。

  • not(否定)
  • and(AかつB)
  • or(AまたはB)
  • not, and, orの優先順位
  • notの賢い使い方

not(否定)

notは真偽値を反転させる演算子です。
TrueFalseにしたり、FalseTrueにします。

たとえば、

not True

という演算の結果はFalseになります。Truenotで反転させてるからですね。

not False

↑の演算結果はTrueになります。

notは比較演算などの結果を反転させたい時に使います。
たとえば↓のようにです。

not 1 == 1

ブール演算子と比較演算子を組み合わせた場合、比較演算のほうが優先されます。
よって↑の場合は先に1 == 1が演算されます。
1 == 1の演算の結果はTrueですが、その結果をnotで反転させているので最終的な結果はFalseになります。

notは2つ以上つらねることができます。
たとえば↓のようにです。

not not True

↑の演算は、not Trueで結果はFalse, そしてその結果をさらにnotで反転させているのでTrueになります。

and(AかつB)

andは左項と右項の演算の結果がともにTrueだった場合に、Trueになる演算です。
たとえば、

True and True

という演算の結果はTrueになります。andの左項と右項がともにTrueだからです。
いっぽう、↓の演算を見てみましょう。

True and False

↑の演算の結果はFalseになります。andの右項の演算結果がFalseで、左項と右項の演算結果が共にTrueではないからです。

たとえば次の比較演算との組み合わせを見てみましょう。

1 == 1 and 2 == 2

1 == 1の演算の結果はTrueで、かつ2 == 2の演算の結果がTrueなので、andの演算結果はTrueになります。

このandを使うと複雑な演算ができるようになります。
たとえば↓のような変数を定義します。

age = 5
name = 'ミケ'

この変数を使って↓のような比較演算をしてみます。

age >= 3 and name == 'ミケ'

この演算は、age3以上、かつnameミケならTrueになる演算です。
↑の演算の結果はTrueになります。
age1にしてみましょう。

age = 1

すると、先ほどの演算の結果はFalseになります。
age >= 3という演算がFalseになり、その結果andの演算の結果がFalseになるからです。

また、andは2つ以上つらねることも可能です。

True and True and True

↑の演算の結果はTrueになります。
andでつなげている式の結果がすべてTrueになるので、andによる最終的な演算の結果もTrueになります。
↓のように式の一部をFalseにすると、

True and True and False

演算の結果はFalseになります。

オペランド

この記事では左項、右項などと表現していますが、正確には式の演算子以外の要素はオペランド(被演算子)といいます。
いっぽう、演算子は英語でオペレーターと言います。
左オペランド、右オペランドよりは左項、右項のほうがわかりやすいと思うので、この記事ではそのような表現を使っています。

or(AまたはB)

orは左項と右項のどちらかいっぽうがTrueだった場合に、Trueになる演算です。

True or True

↑の演算の結果はTrueになります。

True or False

↑の演算の結果もTrueになります。
orの左項がTrueだからですね。

False or True

↑の演算の結果もTrueです。

False or False

↑の演算の結果はFalseになります。
両方ともFalseだからですね。

1 == 0 or 2 == 2

↑の演算の結果はどうでしょうか。
1 == 0の演算の結果はFalseですが、2 == 2の演算の結果はTrueになります。
よってorの演算の結果もTrueになります。

また、orも2つ以上つらねることができます。

False or False or True

↑の演算の結果はTrueになります。
このようにorは、どれかひとつでも式の演算の結果がTrueになれば結果がTrueになります。

not, and, orの優先順位

not, and, orは組み合わせて書くことが出来ます。
このとき、それぞれの優先順位はどうなるのでしょうか?
たとえば、

not True and True or True

↑のような演算を行ったとき、どれから演算されるのかという話です。
↓が演算の優先順位です。

  1. not(高い)
  2. and
  3. or(低い)

まず、notの優先順位がいちばん高いので、notが先に演算されます。
次にandで、最後にorです。
よって、先ほどの↓の演算は、

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になります。

この演算の優先順位を変えたい場合はカッコ(())を使います。

not (True and True)

↑の演算ではまずカッコの中の演算が優先されます。
そのため最初にTrue and Trueという演算がされます。これの結果はTrueです。
次にnotの演算がされます。not Trueの演算結果はFalseになるので、↑の演算の結果はFalseになります。

(True or False) and True

↑の演算でも最初にカッコの中の演算が優先されます。
True or Falseの演算結果はTrueになり、True and TrueTrueになるので、最終的な演算結果はTrueです。

not ((True and True) or True)

↑の演算はどうでしょうか。
カッコが入れ子になっている場合は、内側のカッコの中の演算が優先されます。
つまり、↑の場合では最初にTrue and Trueが演算されます。
その次にTrue or Trueが演算され、最後にnot Trueが演算されます。
よって、↑の演算結果はFalseになります。

目が回るな~

notの賢い使い方

ここで皆さんにだけ、notの賢い使い方をご紹介します。
ほかの人には内緒ですよ。
notを使うとむずかしい条件の演算も簡単に書けるようになります。

たとえば、次の条件を考えてみましょう。

age5以上で、かつweight4以上の猫」

この条件を書くと、普通は↓のようになります。

age >= 5 and weight >= 4

ageweightはともに整数が入る変数です。
では次のような条件を書きたい場合はどうなるでしょうか。

age5以上で、かつweight4以上。それ以外の猫」

この条件を書きたい場合「それ以外」なので、最初は次のような考えで演算を書こうとします。

えーっと、age5以上の、それ以外だから、age5より下で、weight4以上の、それ以外だからweight4より下……。

これはこれで正しい考え方なのですが、こういう時にnotを使えば簡単にそういった条件を書けるようになります。

not (age >= 5 and weight >= 4)

↑で完了です。
最初の「age5以上で、かつweight4以上の猫」という条件の演算を、notで反転させているだけです。
このようにnotを使うと、少し頭を使わなければいけない演算も簡単に書けるようになります。
これは覚えておいて損は無いので覚えておきましょう。

おわりに

今回はブール演算(not, and, or)を見てきました。
これらの演算を使えるようになると、より複雑な条件のプログラムを書けるようになります。

もっとも、そういった複雑な条件を使ったプログラムと言うのはあまり好まれるものではありません。
だれに好まれないのかと言うと、他のプログラマーや未来の自分にです。
一般的に、誰の目から見てもわかりやすい条件を使ったプログラムが好まれる傾向があります。
よって、腕のいい人ほどわかりやすい条件を作ります。

みなさんもこれらの演算子を使って複雑な条件を書けるようになったら、次はその複雑な条件を簡単にする方法を考えるようにするといいでしょう。
そうすればより開発効率は上がります。

以上、次回に続きます。

また見てね

関連動画

投稿者名です。64字以内で入力してください。

必要な場合はEメールアドレスを入力してください(全体に公開されます)。

投稿する内容です。

スポンサーリンク

スポンサーリンク

スポンサーリンク

スポンサーリンク