Pythonで数値を比較する(算術演算子の基本):Pythonは同じ整数と浮動小数点数を同じ数値とみなすが、数値と文字列は異なるものとみなす
Python で数値を比較するときは <
や <=
といった算術演算子を使います。
a = 3
b = 3
if a < b:
print('bはaより大きい')
if a <= b:
print('bはa以上である')
if a >= b:
print('aはb以上である')
if a == b:
print('aとbは等しい')
if a != b:
print('aはbと異なる')
結果:
bはa以上である
aはb以上である
aとbは等しい
「大きい」「小さい」は <
と >
を使います。「以上」「以下」は <=
と >=
を使います。不等号、等号の順です。特に >=
は慣れない記号ですが、混乱したときは「等号はいつも後にくる」という決まりを思い出してください。
「等しい」は ==
です。=
だと代入になってしまいます。そして !=
は「異なる」を意味します。これも「等号はいつも後にくる」というルールにしたがっています。
if を使わなくても boolean 値を取得できる
次のコードを見て Python の if が評価しているものを考えてみましょう。
a = (3 < 4)
b = (3 > 4)
c = (3 == 4)
print(a) # True
print(b) # False
print(c) # False
print(type(a)) # <class 'bool'>
if は bool (ブール/ブール値)を評価します。bool は True または False のどちらかしかありません。
b = (3 > 4)
これは「3 は 4 よりも大きい」が本当かウソかを b に代入している文です。初めてプログラミングを勉強すると、こうした文はとても難しく感じられますが、何回か if 文の中身をチェックするとコツがわかってきます。
以下の説明ではブール文がたくさん出てきます。
Python は整数と浮動小数点数を同じ数値とみなす
Python の if は同じ整数と浮動小数点数を同じとみなします。
a = 3
b = 3.0
if a == b:
print('a と b は等価')
else:
print('a と b は異なる')
# a と b は等価
厳密な型チェックをするプログラミング言語に慣れている人は戸惑うかもしれません。Python は整数の 3 と浮動小数点数の 3.0 は区別しませんが、3 と文字列の 3 は区別します。
a = (3 == 3.0)
b = (3 == '3')
c = (3.0 == '3')
print(a) # True
print(b) # False
print(c) # False
それぞれの型をチェックしてみましょう。
a = 3
b = 3.0
c = '3'
print(type(a)) # <class 'int'>
print(type(b)) # <class 'float'>
print(type(c)) # <class 'str'>
Python は「数値と文字列が一致しているかどうか」でブール値を返すが、大小関係の比較は例外になる
ここは話が複雑です。Python 初心者の方はとばしてください。上の例からわかるように数値の 3 と文字列の 3 が一致しているかどうかで、Python は False と判定しました。
この事実を念頭に、次のコードを見てください。
a = (3 < '4')
b = (3.0 < '4')
print(a) # TypeError: '<' not supported between instances of 'int' and 'str'
print(b) # TypeError: '<' not supported between instances of 'float' and 'str'
例外が起きています。
整数/浮動小数点数と複素数は比較不可能
実数と複素数は比較できません。Python で複素数は i でなく j で表します。
a = (3 < 3.0)
b = (3 < 3 + 0j)
c = (3.0 < 3 + 0j)
print(a) # False
print(b) # TypeError: '<' not supported between instances of 'int' and 'complex'
print(c) # TypeError: '<' not supported between instances of 'float' and 'complex'
実数と複素数を比較しようとすると TypeError になります。