Pythonをはじめとするプログラミング言語と論理演算には切っても切れない関係があります。何か自分でプログラムを組みたいと思ったとき論理演算は必ず出てくることになるでしょう。
この記事では、そんなPythonをつかった論理演算の基礎を丁寧に解説しています。是非お付き合いください。
この記事で分かること
・論理演算の概要 ・論理演算子の使い方
「論理演算」という言葉はあまり聞きなれないかもしれませんが、難しいものではありません。少し覚えればすぐに理解できます。Pythonをつかった論理演算の基本が分かるようになるまで、なるべく整理して順番に説明していきます。
真と偽
論理演算は高校1年生の数学で勉強する「集合と命題」から考えると親しみやすいです。
高校数学ではその命題が正しいといえる時「真」、逆に間違っているとき「偽」としていました。論理演算はこの「真」と「偽」の2つをつかって計算するものであるので、まずはここから理解する必要があります。
「真」、「偽」とは、どういったことなのか、簡単な例を挙げてみます。 図2-4-1を見てください。

箱の中にリンゴが3つ入っていますよね。ここで「箱の中にはリンゴが3つ入っている」と私が言ったとします。この事実は正しいので、「箱の中にはリンゴが3つ入っている」の命題は「真」であるということができます。
反対に、もし「箱の中にはリンゴが2個入っている」といった場合、これは事実ではないので「偽」といえます。
「真と偽」が何なのかが少しわかったところで、もっとプログラムによせた例を挙げてみます。下のコードを見てください。
apple=3
print(apple==3)
"""
実行結果:True
"""
コードの中の「apple==3」の「==」の部分は両辺が一致しているかどうかを判定する比較演算子のひとつです。つまりこのコードは、変数appleが「3」であるか否かを判定しています。
「==」は両辺が一致しているとき「True」を返し、一致していないとき「False」を返します。実際に、上のコードでは、appleは3であるので、「True」がかえってきています。
これらの例から、コードも図の例えもやっていることは同じであり、Pythonの「True」と「False」は「真」と「偽」の役割を持っているということが理解できます。
ここまでで「真と偽」がどういったもので、Pythonでどう扱われているのか理解していただけたでしょうか。
比較演算
先ほどまでの例では「両辺が等しい」という判定のみを紹介してきました。
この判定には 「左辺よりも右辺の方が大きい」など、ほかにも種類があります。 下によく使う比較演算子をまとめます。
比較演算子 | 意味 |
== | 両辺が等しいときにTrueを返す |
!= | 両辺が等しくないときにTrueを返す |
> | 右辺よりも左辺の方が大きいときにTrueを返す |
< | 左辺よりも右辺の方が大きいときにTrueを返す |
>= | 左辺が右辺以上のときにTrueを返す |
<= | 右辺が左辺以上の時にTrueを返す |
これだけ種類があれば「真」と「偽」の条件を設定するのに困らなそうです。ちなみに、これらの比較演算子は2つ同時にも使うことができるので、範囲指定などをしたいときには積極的に使うとコードがすっきりとします。
論理演算
「真と偽」について理解が深まったところでいよいよ論理演算について説明していきます。先ほど、論理演算とは「真と偽」を使って計算をすると書きましたが、これはまさに言葉の通りで、数字ではなくこの「真と偽」を計算します。
ここでも高校の数学から入っていくとわかりやすいので、はじめは高校数学の「集合」という単元の問題から考えてみることにします。
例えば、集合Aの要素であり、Bの要素でもある、「AかつB」の範囲を選択したときに図2-4-2のようになります。

高校数学での集合とはこのような考え方でした。この考え方を少しだけ論理演算に応用していきます。
図2-4-2は「ある要素がAやBの範囲にあるか?」と考えている図でしたが、今度は「条件AやBが真であるか偽であるか?」について考えている図をかいてみます。図2-4-3を見てください。

真と偽が出てきて少し論理演算っぽくなってきたかと思います。ここで、さっきの例でいうところの「AかつB」というのは「AもBも真」に該当することが分かります。
このように条件A・Bの真と偽をつかってこのように高校数学の「かつ」や「または」の考え方ができるわけです。そしてこの「かつ」や「または」などを考えることが論理演算になります。
これで論理演算とはどのようなものなのかがよくお判りいただけたと思います。次からは具体的な計算に入っていきます。
AND
ではついに具体的な論理演算に入ります。初めにANDの計算を考えます。これは「AもBも真である」という命題について、真であるか偽であるか調べる演算ということもできます。
AとBそれぞれのすべてのパターンから、ANDの演算である「AもBも真である」の命題を考えたときの真と偽を考えたのが下の表です。

文字通りAもBも真の時に「真」になりました。プログラムでも計算してみます。Pythonでは論理演算子「and」をつかって実装することができます。
A=True
B=True
print(A and B)
A=True
B=False
print(A and B)
A=False
B=True
print(A and B)
A=False
B=False
print(A and B)
"""
実行結果:True
False
False
False
"""
ANDの演算についてわかっていただけたでしょうか?
これだけだと、実際どのように使うかわかりづらいと思いますので、簡単な使用例として「年齢が20歳以上60歳未満の場合のみTrueをになるようなプログラムを下に示します。
"""
年齢確認プログラム
"""
age=20 #ここには好きな数字を
A=age>=20
B=age<60
print(A and B)
OR
次にORの演算について説明します。ORは高校数学でいうところの「または」に該当し、「AまたはBのどちらかが真」という命題を調べる演算ということもできます。
先ほどと同じように表にまとめたものを下に示します。

これも「または」の意味そのままの結果となりました。同じようにプログラムでも示します。論理演算子は「or」を使います。
A=True
B=True
print(A or B)
A=True
B=False
print(A or B)
A=False
B=True
print(A or B)
A=False
B=False
print(A or B)
"""
実行結果:True
True
True
False
"""
これでORの演算に関してはできるようになったと思います。実際の使用例としては「12歳以上または親と一緒の場合のみOKにする」みたいなシステムで使えるかと思います
まとめ
今回の記事では、よくPythonのコードで用いられる「AND」「OR」のみを扱いましたが、実際には「NAND」や「NOR」、「XOR」などほかにも種類があります。コンピュータの仕組みそのものを理解するときにはこれらについても知っておく必要があるので、興味のある方はご自身で調べてみてください。
この記事で扱ったことは、繰り返しや分岐処理で重要になります。少しでも皆様のお役に立てたなら幸いです。
コメント