今回は、Pythonの「論理演算子」について、
- Python の論理演算子とは?
- 論理演算子には、どんなものがあるの?
- そもそも「論理」って?
について、Python 初心者向けにサクッと解説します。
本記事を読むことで、あなたは
- Python の論理演算子の知識(かつ / または / でない / 異なる)
- Python の論理演算子に種類(and / or / not / ^)
- 「論理」についての知識
について理解することができます。
【Python 文法 独学】Python の「論理演算子」とは?具体的にどんなもの(and or not xor )があるの?「または」の注意点などについて、サクッとまとめました【Python 学習 初心者】
今回は、Python の論理演算子についての解説です。
以下のことについて解説しています。
- Python での論理は、「論理演算子」を使って表現
論理演算子には、以下のものが用意されている。
- 「かつ(and)」 ⇨ 『 and 』
- 「または(or) 」 ⇨ 『 or 』
- 「でない(not)」⇨ 『 not 』
- 「2つのものが異なる時だけ(xor)」 ⇨ 『 ^ 』
なのですが、プログラミングでの論理がわかりづらい〜って方の場合、
- 普段使う「論理」
- プログラミングでの「論理」
の違いについて、正確に理解していない可能性があります。
これらを区別しておくことで、理解が進みますし、なんとなくモヤモヤしたりすることも減るかと思います。
そこで本記事では、
まず、一般的な論理について、サクッと説明した後で、
Python での論理の使い方について解説します。
そもそも「論理」ってなに?
論理のことは理解してるよ!
って方は、サッと下に読み進めてくださいね。
一般的に使う「論理」とは
論理の「論」は議論(ぎろん)の論、「理」は理性の理と考えるとわかりやすいかもしれません。
論理は、相手との議論を理性的に進めるための手段の1つにです。
”論理的に考える”などの使い方をしますが、これは、
物事の筋道を意識しながら
(思い込みでなく・誰でも納得できる)物事と物事の関係を考えていくこと
になります。
つまり、
論理は、物事の関係と、筋道のことを指した言葉
と言えます。
物事の関係とか筋道って難しいそう
って思われるかもしれませんが、
実はとてもシンプルなので、大丈夫です。
論理の具体例としては、
以下の(例1)から(例3)のような
部品の組み合わせで、作られています。
(例1)桃とメロンが好きです
この文は、
桃(かつ)メロンが好きです
と言っても同じ意味ですよね。
「桃」と「メロン」の関係は、「かつ」という関係になっています。
こういう関係を「論理積(ろんりせき)」という言い方もして、一般的に記号で「and」で表したりします。
(例2)桃かメロンを食べたい
この文は、
桃(または)メロンを食べたい
と言っても同じ意味です。
なので、「桃」と「メロン」の関係は、「または」という関係になっています。
こういう関係を「論理和(ろんりわ)」と言います。
一般的に記号で「or」で表したりします。
(例3)メロンは食べない
「メロン」は、「でない」という「否定(ひてい)」の関係になっています。
一般的に記号で「not」で表したりします。
(例4)桃だけ食べ、メロンは食べない
この文は、
2つのものが異なることを指しています。
この文で、「桃」と「メロン」の関係は、
「2つのものが異なる場合」だけのことで、
「2つの場合が同じ場合」は含んでない関係になっています。
こういう関係を「排他的論理和(はいたてきろんりわ)」と言います。一般的に記号で「xor」で表したりします。
このように論理は、
- 「かつ」という関係
- 「または」という関係
- 「でない」という関係
- 「2つのものが異なる時だけ」という関係
を使って、組み立てることができます。
プログラミングでの論理も同じで、
式の関係について、論理演算子を使って表現します。
論理って、思ったよりシンプルだな〜
と感じてもらえたのではないでしょうか。
ただし、日常の論理とは違う感覚もあるので、その辺に注意しながら理解してもらえたらと思います。
というわけで、Python での論理は以下でまとめます。
Python の論理演算子とは
Python での論理は、「論理演算子」を使って表現します。
Python 論理演算子には、以下のものが用意されています。
- 「かつ」 ⇨ 『 and 』
- 「または」 ⇨ 『 or 』
- 「でない」 ⇨ 『 not 』
- 「2つのものが異なる時だけ」 ⇨ 『 ^ 』
(排他的論理和の時は、「xor」でなく「^(ハット)」を使うので注意してください)
これらを説明するために、2つの式を準備をしておきます。
『 変数1(hensu1)が1より大きい 』について、
比較演算子を使って、
『 hensu1 > 1 』
と書けます。同様に、
『 変数2(hensu2) が3より小さい 』は、
『 hensu2 < 3 』
と書けます。
以下では、2つの変数 hensu1, hensu2 を使って説明していきます。
比較演算子ってなに?って方は、以下の記事で解説してますので、先に読んでおくと理解が深まります↓
『【Python 文法 独学】Python の「比較演算子」とは?具体的にどんなものがあるの?について、サクッとまとめました【Python 学習 初心者】』
具体的には以下の感じになります↓
もし、変数ってなんだっけ?という方は、こちらをどうぞ↓
『【Python 文法 独学】Python の「変数」について、変数とは?変数名のコツなど、サクッとまとめました【Python 学習 初心者】』
Python 「and 演算子」: かつという関係
「 リンゴ かつ メロン 」のような関係を書くとき、
Pythonでは「and」を使います。
『これら2つを、どちらも満たすかどうか』を調べるには、
『 ( hensu1 > 1 ) and ( hensu2 < 3 ) 』
のような感じで使います。
and 演算子の左右の式を評価した後で、
- どちらもTrueなら、(全体として)True
- どちらもTrueでないなら、(全体として)False
が出力されます。
具体的には、以下の感じです↓
<解説していきますね>
In[5] では、
まず、andの左の部分の式(hensu1 > 1)が評価されます。
hensu1 = 2 なので、2 > 1 となり、これは正しい式(True)です。
次に、andの左の部分の式(hensu2 < 3)が評価されます。
hensu2 = 2 なので、2 < 3 となり、これは正しい式(True)です。
最後に、and の演算子での評価が行われます。
(hensu1 > 1) and(hensu2 < 3)
という式は、上の評価から、
True and True
と言い換えることができます。
どちらもTrueなので、全体として、True になります。
これが Out[5] に出力されていることが確認できます。
In[6] では、
(hensu1 > 3)はFalse, (hensu2 < 3)はTrue で、
全体として、False and True
どちらもTrueでないので、全体として、False (Out[6] )
In[7] では、
(hensu1 > 1)はTrue, (hensu2 < 1)はFalse で、
全体として、True and False
どちらもTrueでないので、全体として、 False (Out[7] )
In[8] では、
(hensu1 > 3)はFalse, (hensu2 < 1)はFalse で、
全体として、False and False
どちらもTrueでないので、 全体として、False (Out[8] )
というわけで、and 演算子では、
左右の式を評価した後で、
- どちらもTrueなら、(全体として)True
- そうでない場合には、(全体として)False
というのがポイントになります。
Python 「or 演算子」: またはという関係
「リンゴかメロンのどちらか」のような関係を書くとき、
Pythonでは「 or 」を使います。(パイプと読みます)
「 リンゴ または メロン 」
のような言い方で使うことがあります。
(が注意です。注意の理由は以下で説明しますね)
『どちらか片方を満たすかどうか』を調べるには、
『 ( hensu1 > 1 ) or ( hensu2 < 3 ) 』
のような感じで使います。
or 演算子の左右の式を評価した後で、
- どちらかがTrue、True
- どちらもTrueでないなら、False
が返ってきます。
ただし「または」の場合は、これだけだと不十分です。
Python『 または 』の注意点
ここで注意なのですが、
- 私たちが普段使う「または」
- Python での「または」
は違います。
どういうことかというと、
普段私たちはが使う「または」は、
『 リンゴ または みかん 』と言ったとき、
- リンゴだけ
- みかんだけ
のとき、正しい意味ですよね。
「リンゴとみかん両方」の意味は含んでいません。
Python での「 または:or 」は、違います。
『 リンゴ または みかん 』と言ったとき、
- リンゴだけ
- みかんだけ
に加えて、
- リンゴとみかん両方の意味も含んでいます。
普段使う「または」と違う感覚ですよね。
つまり、
『 hensu1 > 1 or hensu2 < 3 』
の結果は、or 演算子の左右の式を評価した後で、
- どちらかがTrue、True
- どちらもTrueなら、True
- どちらもTrueでないなら、False
として判断されます。
日常の感覚とは違いますので、赤の部分をしっかり理解しておきましょう!
具体的には、以下の感じになります。
<解説していきますね>
In[10] では、
まず、orの左の部分の式(hensu1 > 1)が評価されます。
hensu1 = 2 なので、2 > 1 となり、これは正しい式(True)です。
次に、orの左の部分の式(hensu2 < 3)が評価されます。
hensu2 = 2 なので、2 < 3 となり、これは正しい式(True)です。
最後に、or の演算子での評価が行われます。
(hensu1 > 1) or(hensu2 < 3)
という式は、上の評価から、
True or True
と言い換えることができます。
どちらもTrueなので、全体として、True になります。
これが Out[10] に出力されていることが確認できます。
In[11] では、
(hensu1 > 3)はFalse, (hensu2 < 3)はTrue で、
全体として、False or True
どちらかがTrueなので、全体として、True (Out[11] )
In[12] では、
(hensu1 > 1)はTrue, (hensu2 < 1)はFalse で、
全体として、True or False
どちらかがTrueなので、全体として、True (Out[12] )
In[13] では、
(hensu1 > 3)はFalse, (hensu2 < 1)はFalse で、
全体として、False or False
どちらもTrueでないので、全体として、False (Out[13] )
or 演算子では、
左右の式を評価した後で、
- どちらかがTrue、True
- どちらもTrueなら、True
- どちらもTrueでないなら、False
というのがポイントになります。
Python 「not 演算子」: でないという関係
「メロンでない」のような関係を書くとき、
Pythonでは「not」を使います。
『満たさないどうか』を調べるには、
『 not ( hensu1 > 1 ) 』
のような感じで使います。
not 演算子の左の式を評価して、
- 式がTrueなら、notを含めた全体として、False
- 式がFalseなら、notを含めた全体として、True
が返ってきます。
not 演算子は、式の評価と反対の評価を返してきます。
具体的には以下の感じになります↓
<解説していきますね>
In[16] では、
まず、notの右の式(hensu1 > 1)が評価されます。
hensu1 = 2 なので、2 > 1 となり、これは正しい式(True)です。
次に、not の演算子での評価が行われます。
not(hensu1 > 1)
という式は、上の評価から、
not True
と言い換えることができます。
TrueとFalseを入れ替えて、結果が、False になります。
これが Out[16] に出力されていることが確認できます。
In[17] では、
(hensu1 > 3)はFalse で、
全体として、not False なので、
TrueとFalseを入れ替えて、True になります。 (Out[17] )
Python 「xor 演算子」:異なる時だけという関係
「リンゴかメロンのどちらかだけ」のような関係を書くとき、
Pythonでは「 ^ 」を使います。
上の「または」との違いは、どちらも含む場合は含まないことになります。
hensu1, hensu2 を使うと、
『2つのものが異なるかどうか』を調べるには、
『 ( hensu1 > 1 ) ^ ( hensu2 < 3 ) 』
のような感じで使います。
^ 演算子の左右の式をそれぞれ評価した後、、
- 2つの真偽が違う場合には、True
- 2つの真偽が同じ場合には、False
が返ってきます。
具体的には以下の感じになります↓
<解説していきますね>
In[19] では、
まず、^ の左の部分の式(hensu1 > 1)が評価されます。
hensu1 = 2 なので、2 > 1 となり、これは正しい式(True)です。
次に、^ の左の部分の式(hensu2 < 3)が評価されます。
hensu2 = 2 なので、2 < 3 となり、これは正しい式(True)です。
最後に、^ の演算子での評価が行われます。
(hensu1 > 1) ^ (hensu2 < 3)
という式は、上の評価から、
True ^ True
と言い換えることができます。
真偽が同じなので、全体として、False になります。
これが Out[19] に出力されていることが確認できます。
In[20] では、
(hensu1 > 3)はFalse, (hensu2 < 3)はTrue で、
全体として、False ^ True
真偽が異なるので、全体として、True (Out[20] )
In[21] では、
(hensu1 > 1)はTrue, (hensu2 < 1)はFalse で、
全体として、True ^ False
真偽が異なるので、全体として、True (Out[21] )
In[22] では、
(hensu1 > 3)はFalse, (hensu2 < 1)はFalse で、
全体として、False ^ False
真偽が同じなので、全体として、False (Out[22] )
^ 演算子では、
左右の式をそれぞれ評価した後、
- 2つの真偽が違う場合には、True
- 2つの真偽が同じ場合には、False
と考えるのがポイントです。
本記事を読むことで、あなたは
- Python の論理演算子の知識(かつ / または / でない / 異なる)
- Python の論理演算子に種類(and / or / not / ^)
- 「論理」についての知識
について理解が深まったのではないでしょうか
というわけで、本記事では、
- Python での論理は、「論理演算子」
- 「かつ(and)」 ⇨ 『 and 』
- 「または(or) 」 ⇨ 『 or 』
- 「でない(not)」⇨ 『 not 』
- 「2つのものが異なる時だけ(xor)」 ⇨ 『 ^ 』
について、具体的な例とともにまとめました。
こちらもございます↓
論理演算はこちらの書籍でも解説しています↓