Pythonを勉強するために本を買ったけど,積読してる.
最初の方の数値や算術演算,文字列の扱いで止まっている.
「ブール」って何?
比較演算子や論理演算子ってたくさんあるけど整理したい.
そんな方が,ブール型・比較演算子・論理演算子を理解して,if文,while文, for文などの制御構文の学習に進むための記事です.
本記事の内容
これまでの記事で,整数,浮動小数点数,文字列,リスト,タプル,辞書,集合と,Pythonであらかじめ準備された組み込みデータ型(組み込みクラス)を学んできました.その中で,算術演算子(+, – など)や代入演算子(=, += など)を扱ってきました.本記事では,比較演算子,論理演算子について解説します.比較演算子は,ある条件の大小を比較する演算子です.論理演算子は,複数の条件を組み合わせる演算子です.比較演算や論理演算では,ブールというデータ型を使用して評価することが多いです.まずは,このブールについて学び,比較演算と論理演算で使ってみましょう.これまでの記事と同様に,コードを打ちながら学んで行きましょう.余力のある方は,部分的にコードを変更して実験してみましょう.
ブール型
これまで,Pythonであらかじめ準備された組み込みデータ型(組み込みクラス)を学んできました(表1).ブールの値は,「True」と「False」の2つのみです.各々「真」,「偽」を意味します.一般的な使い方は,値の比較などの条件が,「真」ー条件が成立するかー,または,「偽」ー成立しないかーの評価です.
表1. Pythonデータ型
型(クラス) | ミュータブル | シーケンス型 |
---|---|---|
整数(int) | × | × |
浮動小数点数(float) | × | × |
複素数(complex) | × | × |
文字列(str) | × | ◯ |
ブール(bool) | × | × |
リスト(list) | ○ | ○ |
タプル(tuple) | × | ○ |
辞書(dict) | ○ | × |
集合(set) | ○ | × |
ブールの例
後述する比較を用いて,ブールがどのように表示されるかをみてみましょう.
1 < 10 # 1が10未満かどうかを評価
1 > 10 # 1が10より大きいかどうかを評価
このように条件に対して,TrueまたはFlaseと出力されます.
ブールのルール
Pythonは,何をTrue,Falseと見なしているのでしょうか?表2のような値は,すべてFalseと評価されます.
表2.Falseとなる値
値 | |
---|---|
ブール値 | False |
値の非存在 | None |
浮動小数点のゼロ | 0.0 |
空文字列 | '' |
空リスト | [] |
空タプル | () |
空辞書 | {} |
空集合 | set() |
データ型の確認方法
type()関数を使って確認します.「bool」と表示されるか確認してみましょう.
type(True)
type(False)
ブールへのデータ型の変換
変換という語弊があるかも知れませんが,bool()関数を使ってデータ型を変換できます.表2で示した値はFalseと出力されます.
ブールに変換
bool(0)
bool([])
bool(['砂糖', '塩', '酢', '醤油', '味噌'])
ブールを整数に変換
int(True)
int(False)
ブールを浮動小数点数に変換
float(True)
float(False)
ブールを複素数に変換
complex(True)
complex(False)
では,比較演算子,論理演算子を使用して,ブール型がいかに役立つかを見ていきましょう!
比較演算子(<, >, <=, >=, ==, !=)
比較演算子は,ある条件の大小を比較する演算子です(表3).Pythonでの比較演算子は表3の通り,小中学校で習ったものとほとんど同じ形式です.演算例のようにコードを入力して,実行するとTrueかFalseのブール値が返ってきます-正しければTrueが,誤りであればFalseが返ってきます.
表3.比較演算子
演算 | 比較演算子 |
---|---|
より小さい・未満(小なり, 左不等号) | < |
以下(小なりイコール) | <= |
より大きい(大なり, 右不等号) | > |
以上(大なりイコール) | >= |
等しい(イコールイコール) | == |
等しくない(ノットイコール) | != |
比較の条件の真偽を評価してみましょう.代表的な比較条件は数値なので, 数値を例に練習してみましょう.算術演算子を含む式や,変数に代入しても演算できます.
未満(小なり, 左不等号)
1 < 10
10 < 1
以下(小なりイコール) <=
10 <= 10
10 <= 1
より大きい(大なり, 右不等号) >
10 > 1
1 > 10
以上(大なりイコール) >=
10 >= 10
1 >= 10
等しい(イコールイコール) ==
10 == 10
1 == 10
等しくない(ノットイコール) !=
1 != 10
10 != 10
算術演算子を含む式や,変数を含む式
H = 1 He = 2 H < He
文字列の比較
文字列についても比較演算子を使えますが,大小関係は文字コード (unicode)の番号で行われます.
"水素" < "ヘリウム"
"H" < "He"
あくまでPython内で決められた定義や演算をもとに真偽が評価されます.
論理演算子(and, or ,not)
論理演算子は,複数の条件を組み合わせて,条件を評価する演算子です(表4).ブール演算子とも呼ばれます.後述のように,論理演算子は,算術演算子や比較演算子よりも優先順位が低いため,論理演算子を挟む条件部分が先に計算され,その後論理演算が行われます.
論理演算の法則として,分配法則やド・モルガンの法則を高校数学で習ったと思います...論理演算の用途としては,「ある条件を満たすならAを,そうでないならBを実行する」などのプログラムの記述です.
表4.論理演算子
演算 | 論理演算子 |
---|---|
論理積 | and |
論理和 | or |
否定 | not |
論理条件の真偽を評価してみましょう.代表的な論理演算の条件は数値なので, 数値を例に(xに3.14を代入した変数を用いて)練習してみましょう.
x = 3.14
論理積
表5.論理積の組み合わせと結果
条件A | 論理演算子 | 条件B | 結果 |
---|---|---|---|
True | and | True | True |
True | and | False | False |
False | and | True | False |
False | and | False | False |
x > 3.05 and x <=3.14 # xが1より大きく,かつ,yが3.14以下 # 条件は共にTrue
x >= 3.05 and x < 3.14 # xが3.05以上,かつ,yが3.14未満 # x >= 3.05がTrueで,y < 3.14がFalse
変数が一つの場合,論理積を使用することなく条件を連結できる.
3.05 < x <= 3.14 # x > 3.05 and x <=3.14と同じ.
論理和
表6.論理和の組み合わせと結果
条件A | 論理演算子 | 条件B | 結果 |
---|---|---|---|
True | or | True | True |
True | or | False | True |
False | or | True | True |
False | or | False | False |
x >= 3.05 or x < 3.14 # xが3.05以上,または,yが3.14未満 # x >= 3.05がTrueで,y < 3.14がFalse
x == 3.05 or x < 3.14 # xが3.05,または,yが3.14未満 # 条件は共にFalse
否定
x = 3.14 not x >= 3.05 and x < 3.14 # xが3.05以上ではない(xが3.05未満),かつ,yが3.14未満 # not x >= 3.05がFalseで,y < 3.14がFalse
x >= 3.05 and not x < 3.14 # xが3.05以上,かつ,yが3.14より小さくない(xが3.14以上) # x >= 3.05がTrueで,y < 3.14がTrue
not(not x > 3.05 or x < 3.14) # ド・モルガンの法則
演算子の優先順位
比較演算子.論理演算子を学び,さらに数値(整数,浮動小数点数,複素数)の記事で算術演算子も解説しましたね.
ここで改めて,計算の優先順位を整理しましょう.数値の記事でも解説したように,結局のところ,実行したい計算の順番に合わせて丸括弧()を括れば正しく計算されます.
- ()の中
- **
- * / % //
- + -
- < > <= >= == !=
- not
- and
- or
ブール型と,比較演算子・論理演算子について,基本を学べましたでしょうか?
次は「制御構文」について学びましょう!
最後まで読んでくださり,ありがとうございます☺️