こんにちは!
株式会社キカガクで機械学習講師をしている篠原です!
苦手な人の気持ちに寄り添うことを忘れない」をモットーに、18 歳から集団指導塾や高校の学内予備校で教えていました!
この記事も、これから Python を学習する方向けに丁寧に書きましたので、ぜひご覧ください!
プログラミングを学んでいると出会うのが、「かつ」や「または」といった日本語、and or not といった英単語です。これらには英単語以上に意味が含まれており、ここを理解するとプログラミングの演算が得意になります!
ぜひ、この記事を通じて少しでも理解が深まれば幸いです。
- Python を学び始めたけど、 かつ(and) や または(or) でつまづいてしまう
- height 50 and weight 100 などと聞いてもいまいちピンとこない
- そもそも、論理演算子ってなに?
ゼロから始めるプログラミング
スモールステップで Python を基礎から学べる、初学者の方向けの講座です。演習問題を通して Python の使い方を理解し、データ分析や機械学習実装のための基礎を身につけることを目指します。
DX を推進する AI ・データサイエンス人材育成コース
プログラミング未経験から、AI やデータサイエンスを学ぶことのできる 6 ヶ月間のコースです。転職実績も豊富で、自走できる AI人材を多く輩出しています。
論理演算子を理解するために
True と False とは?
論理演算子を知る上で、ここを理解できると定着がグッと捗ります!
少し遠回りになりますが紹介させてください!
Python を学ぶ上で、この値によく遭遇します。
これらの値は真偽値といい、正解→True / 不正解→False という認識で一般的に使われます。
簡単なコードで参考に
x=1
y=2
x+y == 3
True
x + yの値 と 3 を比較しています。
結果があっているので True を出力しました。
少しふざけて、こんな計算式もみてみましょう。(小学校 1 年生レベル!)
x=1
y=2
x+y == 5
x + y の計算結果は5ですか?
・・・流石に違いますよね。
False
結果が間違っているので False を出力しています。
このように、比較した結果があっていれば True を、間違っていれば False を受け取ります。
論理演算子とは?
ようやく本題です。論理演算子とはなんのことでしょうか?
一言で言うと「真偽( True / False )を判定するための演算子」です。
あなた
と思いますよね?(私は初めて学んだ時に疑問で仕方ありませんでした。)
人間は状況状況に応じて臨機応変に脳を働かせますが、パソコンの世界ではそんなことはありません。
実は2進法という考え方で物事を処理しています。
1 と 0 の数を組み合わせて、解決しているのです。
2 値で表すのがこの世界の常識であり、「True / False」を返すのはこのためです。
パソコンの世界で計算するには、パソコンの世界の処理に合わせてあげます。
0 と 1の二値で考えます。郷に入れば郷に従いましょう!
さらにこの論理演算子には大きく 3 つの種類に分かれます。
- 論理和 ( or )
- 論理積 ( and )
- 否定 ( not )
です。
- 論理演算子を知るために・・・真偽値 ( True と False ) の理解が必要!
- 論理演算子とは、真偽値を判定するための演算子
次はそれぞれに注目して学んでいきましょう!
or と and と not それぞれの説明
or (論理和) または
日本語に置き換えた際、「または」でつながる条件を作成するときに、or(論理和) を使用します。
例えば学校のテストで先生が言う「今週の小テストで 30 点以上 または 期末試験で 65 点以上で合格です!」や
遊園地のお化け屋敷の案内に書いてある「身長120cm以下 または 年齢 12 歳以下 は 1 人でご利用になれません。」などです。
2 つの条件式のどちらかが True だった場合、True を返します。
Mini_test = 41
Test_score = 69
if (Mini_test >= 30) or (Test_score >= 65):
print('あなたは合格です!')
else:
print("残念ながら不合格です。")
この結果を表示させると・・・
出力:あなたは合格です!
優等生は合格と表示されました!
では、次の例はどう表示されるでしょうか。
Mini_test = 20
Test_score = 78
if (Mini_test >= 30) or (Test_score >= 65):
print('あなたは合格です!')
else:
print("残念ながら不合格です。")
出力:あなたは合格です!
この生徒も合格と表示されました!
小テストは20点と届きませんでしたが、期末試験が65点以上 (78点) だったので合格です!
それでは、次の生徒はどうでしょうか。
Mini_test = 37
Test_score = 62
if (Mini_test >= 30) or (Test_score >= 65):
print('あなたは合格です!')
else:
print("残念ながら不合格です。")
この結果を表示させると・・・
出力:あなたは合格です!
よかった。合格です!
小テストが合格点 (30点以上の 37点 ) だったので、期末試験が62点でしたが救われました。
それでは、最後、次の生徒はどうでしょうか。
Mini_test = 12
Test_score = 49
if (Mini_test >= 30) or (Test_score >= 65):
print('あなたは合格です!')
else:
print("残念ながら不合格です。")
この結果を表示させると・・・
出力:残念ながら不合格です。
このように、いくつかの条件式のうち、1 つでも当てはまる (True) ならば True を返してくれる。
このような論理演算子が or 論理和 です。
学年に1人はいた優しいタイプの先生みたいですね!
担当:篠原
and (論理積)かつ
日本語に置き換えた際、「かつ」でつながる条件を作成するときに、and (論理積)を使用します。
例えば
大学教授が言う単位取得条件の「授業へ 10 回以上の出席 かつ 最後の期末試験で 60 点以上 」などです。どちらかを満たさないと単位がもらえない、そんな状況を想像してみてください。(厳しい…)
2 つの条件式が 両方とも True だった場合のみ、True を返します。
コード例
Attend = 10
Test_score = 100
if (Attend >= 10) and (Test_score >= 60):
print('合格!')
else:
print("単位は上げられません。")
出力:合格!
文句なしに合格と出力されましたね。
では、次の例です。
Attend = 10
Test_score = 50
if (Attend >= 10) and (Test_score >= 60):
print('合格!')
else:
print("単位は上げられません。")
出力:単位は上げられません。
テストが 50 点だったため、残念ながら単位はもらえませんでした。
あくまでも、テスト 60 点以上 かつ 出席 10 回以上ですからね。
Attend = 4
Test_score = 100
if (Attend >= 10) and (Test_score >= 60):
print('合格!')
else:
print("単位は上げられません。")
出力:単位は上げられません。
テストは100点でしたが、出席がたったの4回だったため、単位はもらえませんでした。
テストで点数が取れているのだから、単位くれてもいいじゃん…と思いますよね笑
このように、いくつかの条件式の全てが当てはまる( True )時のみ True を返す。
このような論理演算子が and論理和 です。
すごく厳しい条件を作りたいときにぴったりですね!!!
担当:篠原
not (否定) でない
1つの条件式が False だった場合、True を返します。一番イメージ通りです。
True と False をそのまま反転するときに使用します。
age = 20
if not(age < 20) :
print('お酒を飲んでOKです!')
これは、20歳未満でなければ、お酒を飲んでもOKです。と出力するプログラムです。
出力:お酒を飲んでOKです!
真偽をひっくり返すんですね!
担当:篠原
and, or, not の優先順位
算数や数学で 1 + 2 × 3 という計算式を見たとき、 1 + 2 よりも先に 2 × 3 を優先して計算しますよね。これと同じことが論理演算子にも起こります。優先順位はこのようになります。
not > and > or
そのため、3 つの論理演算子が複雑に組まれているときは、この順番で真偽を更新していく必要があります。
ではいきなりですが、次の真偽は True でしょうか。False でしょうか?考えてみましょう!
次の場合、優先順位などを考慮すると、真偽 (True/False) はどちらになるだろうか。
1 True or False →
2 not False and True →
3 True or False and (not False) →
4 True or True and False →
答え・解説
考えるポイントは 2 つです。
① 優先順位(not > and > or)通りの着眼点で考えられているか。
② or, and, not の性質をきちんと抑えられているか。
- or は 優しい先生 (1つでも真(1) があれば、結果は真)
- and は 厳しい先生 (2つとも真でないと、結果は真にならない)
- not は 否定(ひっくり返す)
それでは、解説を見ていきましょう!
1 True or False → True
or は、どちらか片方でも True ならば True を返す優しい先生でしたね。
よって、True or False は True を出力します。
2 not False and True → True
まず今回の優先は、not > and なので、まずは not が影響を与えます。
よって、 not False and True
→ True and True
となります。
さらに and は、両方とも True ならば True を返す厳しい先生のような振る舞いでしたね!出力は True です。
3 True or False and (not False) → True
今回もまずは not を優先しますので、
True or False and (not False)
→ True or False and True
となります。
次に、and > or より、後ろの and を処理しますので、
True or False and True
→ True or False
となります。
最後に、or は片方でも True なら True を出力するので、答えは True となります。
4 True or True and False → True
まずは後ろの and に着目し、True or True and False
→ True or False
となります。
この後は 3 番と同じで、出力結果は True です。
bool 型以外のオブジェクトに対する論理演算子
Python では論理演算子として and
、or
、not
が提供されていますが、これらは真偽値(boolean)に対する操作を表すだけではなく、非 bool 型のオブジェクトに対しても使用することができます。これらの論理演算子が bool 型以外のオブジェクトに対してどのように働くかを見ていきましょう!
and
演算子: and
演算子は左から評価を始め、最初に False
と評価される値を返します。もしすべての値が True
と評価されるならば、最後の値を返します。つまり、非 bool 型の場合でも、False
と評価される値(0、空文字、空リストなど)があればその値を返し、そうでなければ最後の値を返します。
print(1 and 0) # 0
print(1 and 'hello') # 'hello'
print('' and 'world') # ''
or
演算子: or
演算子も左から評価を始め、最初に True
と評価される値を返します。もしすべての値が False
と評価されるならば、最後の値を返します。つまり、非 bool 型の場合でも、True
と評価される値(0以外の数、空でない文字列やリストなど)があればその値を返し、そうでなければ最後の値を返します。
print(1 or 0) # 1
print(0 or 'hello') # 'hello'
print('' or 'world') # 'world'
not
演算子: not
演算子は、単一のオブジェクトに対する演算子で、そのオブジェクトが False
と評価される場合に True
を、True
と評価される場合に False
を返します。
print(not 0) # True
print(not '') # True
print(not 'world') # False
以上が、Python の論理演算子が bool 型以外のオブジェクトにどのように作用するかの基本的な説明です。これらの振る舞いは非常に有用で、コードの簡略化や可読性の向上に役立ちます!
Python において、論理的に False
と評価される値を”Falsy”な値とも呼びます。以下に Python で False
と評価される主な値をリストアップします:
- None: Python の
None
は何もないことを示す特別な値で、論理的にはFalse
になります。 - ゼロ値: 数値型の
0
および0.0
はFalse
と評価されます。 - 空のシーケンスまたはコレクション: 空の文字列(
""
)、空のリスト([]
)、空のタプル(()
)、空の辞書({}
)、空のセット(set()
)などはすべてFalse
と評価されます。 - 空のカスタムクラスのインスタンス: カスタムクラスで
__bool__()
メソッドまたは__len__()
メソッドが定義されており、それがFalse
や0
を返す場合、そのインスタンスはFalse
と評価されます。
class MyCustomClass:
def __len__(self):
return 0
print(bool(MyCustomClass())) # False
これら以外の値は、基本的には True
と評価されます。これを “Truthy” な値と呼びます。例えば、空でない文字列やリスト、None
以外のオブジェクト、ゼロ以外の数値などがこれに該当します。
Python における False
と評価される値について理解することは、論理演算子の挙動を理解し、効率的なコードを書く上で重要です。
最後に
今回は Python の論理演算子についてまとめました。
- 真偽値とは何かをしっかり抑える
- 3 つの論理演算子の性質を抑える
- 優先順位を抑え、どの処理から行われるのかを理解する
論理演算子は、プログラミングを理解していく上で基礎中の基礎になりますので、苦手な方は何度も読み込んで復習してくださいね!
また、Python に苦手意識がある方は、この記事も併せてご覧ください。知識がより整理されますよ!
また、プログラミング初心者向けにこんな記事もご用意しています。是非ご覧ください!
これからも初学者目線でつまづくポイントをブログにて解説していきますので、他の記事もぜひご覧ください!
最後まで読んでいただきありがとうございました!
篠原
まずは無料で学びたい方・最速で学びたい方へ
まずは無料で学びたい方: Python&機械学習入門コースがおすすめ
AI・機械学習を学び始めるならまずはここから!経産省の Web サイトでも紹介されているわかりやすいと評判の Python&機械学習入門コースが無料で受けられます!
さらにステップアップした脱ブラックボックスコースや、IT パスポートをはじめとした資格取得を目指すコースもなんと無料です!
最速で学びたい方:キカガクの長期コースがおすすめ
続々と転職・キャリアアップに成功中!受講生ファーストのサポートが人気のポイントです!
AI・機械学習・データサイエンスといえばキカガク!
非常に需要が高まっている最先端スキルを「今のうちに」習得しませんか?
無料説明会を週 2 開催しています。毎月受講生の定員がございますので確認はお早めに!
- 国も企業も育成に力を入れている先端 IT 人材とは
- キカガクの研修実績
- 長期コースでの学び方、できるようになること
- 料金・給付金について
- 質疑応答
ゼロから始めるプログラミング
スモールステップで Python を基礎から学べる、初学者の方向けの講座です。演習問題を通して Python の使い方を理解し、データ分析や機械学習実装のための基礎を身につけることを目指します。
DX を推進する AI ・データサイエンス人材育成コース
プログラミング未経験から、AI やデータサイエンスを学ぶことのできる 6 ヶ月間のコースです。転職実績も豊富で、自走できる AI人材を多く輩出しています。