【初心者向け】第4章 比較演算子と論理演算子【Python】

Python

比較演算子について

条件分岐する際、何かしらの比較が必要です。その時に比較演算子を使います。

「もし晴れていたら」をプログラムのように表現すると「もし 天気 == 晴れ だったら」となります。この時の「==」が比較演算子です。


「バナナが200円以下だったら買う」のように大小で比較する際は「<=」を使います。


比較演算子には以下があります。

a == b # a と b が等しい
a != b # a と b が等しくない
a > b # a が b より大きい
a >= b # a が b より大きいか等しい
a < b # a が b より小きい
a <= b # a が b より小さいか等しい
a in b # b に a という要素が含まれている 
a not in b # b に a という要素が含まれていない


比較演算子による結果は ブール型(True/False) を返します。

等号

等号は数値が等しいか等しくないかを確認します。


コード

# 変数宣言
num1 = 1
num2 = 1
num3 = 2

# 条件式の結果を代入
result_equal1 = num1 == num2 # True
result_equal2 = num1 == num3 # False

result_not_equal1 = num1 != num2 # False
result_not_equal2 = num1 != num3 # True

# 結果出力
print("num1 == num2:", result_equal1)
print("num1 == num3:", result_equal2)

print("num1 != num2:", result_not_equal1)
print("num1 != num3:", result_not_equal2)


実行結果

num1 == num2: True
num1 == num3: False
num1 != num2: False
num1 != num3: True


等号では、str型とint型で比較すると同じ数字だったとしても、別の値として扱われることに注意してください。つまり「1 == “1”」は False ,「1 != “1”」は True になります。


コード

# 変数宣言
num1 = 1
str2 = "1"

# 条件式の結果を代入
result_equal1 = num1 == str2
result_not_equal1 = num1 != str2

# 結果出力
print("num1 == str2:", result_equal1)
print("num1 != str2:", result_not_equal1)


実行結果

num1 == str2: False
num1 != str2: True

比較

比較は数値の大小を確認します。

より大きい/より小さいをプログラムで確認します。


コード

# 変数宣言
num1 = 1
num2 = 2
num3 = 2

# 条件式の結果を代入
result_bigger1 = num1 > num2 # 1 > 2
result_bigger2 = num2 > num1 # 2 > 1
result_bigger3 = num2 > num3 # 2 > 2

result_smaller1 = num1 < num2 # 1 < 2
result_smaller2 = num2 < num1 # 2 < 1
result_smaller3 = num2 < num3 # 2 < 2

# 結果出力
print("num1 > num2:", result_bigger1)
print("num2 > num1:", result_bigger2)
print("num2 > num3:", result_bigger3)

print("num1 < num2:", result_smaller1)
print("num2 < num1:", result_smaller2)
print("num2 < num3:", result_smaller3)


実行結果

num1 > num2: False
num2 > num1: True
num2 > num3: False
num1 < num2: True
num2 < num1: False
num2 < num3: False


比較では、str型とint型を比較するとエラーになります。


コード

# 変数宣言
num1 = 1
num2 = "2"

# 条件式の結果を代入
result_bigger1 = num1 > num2 # 1 > "2"

# 結果出力
print("num1 > num2:", result_bigger1)


実行結果

Traceback (most recent call last):
  File "/Users/python/python-for-blog/compare-operation.py", line 6, in <module>
    result_bigger1 = num1 > num2 # False
TypeError: '>' not supported between instances of 'int' and 'str'

in と not in

inは比較対象の中に要素が含まれているかを判定する時に使います。


集合の中に、要素が含まれているかを判定します。
この例では、集合 [ 0, 1, 2] の中に、要素 1 が含まれているため True となります。


集合の部分には、リスト、タプルや辞書など入ります。[ 0, 1, 2 ] はリストとなりますが、これらの解説は後半の章で行います。


「in」についてはプログラムで書くと以下のようになります。


コード

# 条件式を代入
result_in1 = 1 in [ 0, 1, 2]
result_in2 = 3 in [ 0, 1, 2]

result_not_in1 = 1 not in [ 0, 1, 2]
result_not_in2 = 3 not in [ 0, 1, 2]

# 結果出力
print("1 in [ 0, 1, 2]:", result_in1)
print("3 in [ 0, 1, 2]:", result_in2)

print("1 not in [ 0, 1, 2]:", result_not_in1)
print("3 not in [ 0, 1, 2]:", result_not_in2)


実行結果

1 in [ 0, 1, 2]: True
3 in [ 0, 1, 2]: False
1 not in [ 0, 1, 2]: False
3 not in [ 0, 1, 2]: True

論理演算子について

論理演算子は「〇〇または〇〇なら」「〇〇かつ〇〇なら」と複数の条件式の結果を元に、真偽 (True/False) を判断するものです。


論理演算子には以下があります。

A or B # 論理和 (A か B どちらかが True ならば True を返す。)
A and B # 論理積 (両方とも True なら True を返す。)
not A # 否定 (A が True なら False を返す。)

論理和 ( or )

論理和 ( or ) は複数の条件式のうち、どれか一つでも True があるなら True 返します。


例えば「スポーツの最終戦で、チームAが勝つかチームBが負ければ、チームAが優勝」というのが 論理和 になります。
この場合、「チームAが勝つか」という条件式と「チームBが負けるか」という条件式の2つの条件式の論理和によって、「チームAが優勝か」という結果を返します。

チームA が 勝ち(True) なら チームB が 負け(True) でも 勝ち(False) でも チームA が 優勝(True)
チームB が 負け(True) なら チームA が 勝ち(True) でも 負け(False) でも チームA が 優勝(True)
チームA が 負け(False) で チームB が 勝ち(False) だと チームA が 優勝できない(False)

を返します。


True と False の関係をまとめた表(真偽値表)は以下になります。


論理和をプログラムで確認してみます。


コード

# 変数宣言
a_true = True
a_false = False
b_true = True
b_false = False

# 条件式を代入
result_or1 = a_false or b_false
result_or2 = a_true or b_false
result_or3 = a_false or b_true
result_or4 = a_true or b_true

# 結果出力
print("a_false or b_false:",result_or1)
print("a_true or b_false:",result_or2)
print("a_false or b_true:",result_or3)
print("a_true or b_true:",result_or4)


実行結果

a_false or b_false: False
a_true or b_false: True
a_false or b_true: True
a_true or b_true: True

論理積 ( and )

論理積 ( and ) は複数の条件式が全て True の場合に True を返します。


例えば「スポーツの最終戦で、チームAが勝ってチームBが負ければ、チームAが優勝」というのが 論理積 になります。
この場合、「チームAが勝つか」という条件式と「チームBが負けるか」という条件式の2つの条件式の論理積によって、「チームAが優勝か」という結果を返します。


チームA が 勝ち(True) で チームB が 負け(True) なら チームA が 優勝(True)
チームA が 負け(False) なら チームB が 勝ち(True) でも 負け(False) でも チームA は 優勝できない(False)
チームB が 勝ち(False) なら チームA が 勝ち(True) でも 負け(False) でも チームA が 優勝できな(False)

を返します。


真偽値表は以下の通りです。


論理積をプログラムで確認します。


コード

# 変数宣言
a_true = True
a_false = False
b_true = True
b_false = False

# 条件式を代入
result_and1 = a_false and b_false
result_and2 = a_true and b_false
result_and3 = a_false and b_true
result_and4 = a_true and b_true

# 結果出力
print("a_false and b_false:",result_and1)
print("a_true and b_false:",result_and2)
print("a_false and b_true:",result_and3)
print("a_true and b_true:",result_and4)


実行結果

a_false and b_false: False
a_true and b_false: False
a_false and b_true: False
a_true and b_true: True

否定 ( not )

否定 ( not ) は条件式が True なら False を、 False なら True と条件式の結果とは逆の値を返します。


真偽値表は以下の通りです。


否定をプログラムで確認します。


コード

# 変数宣言
a_true = True
a_false = False

# 条件式を代入
result_not1 = not a_false 
result_not2 = not a_true

# 結果出力
print("not a_false:",result_not1)
print("not a_true:",result_not2)


実行結果

not a_false: True
not a_true: False


次章では、比較演算子と論理演算子を使って条件分岐させる構文 if文 を解説します。