比較演算子について
条件分岐する際、何かしらの比較が必要です。その時に比較演算子を使います。
「もし晴れていたら」をプログラムのように表現すると「もし 天気 == 晴れ だったら」となります。この時の「==」が比較演算子です。
「バナナが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文 を解説します。