こんにちは。
最近はPythonを学習しています。
Pythonを動かしている環境については簡単に言うと以下です。
- Windows 10 64bit
- python 3.9.4
- PyCharm Community Edition 2021.1 x64
より詳細は以下の記事に記載してあります。
今回はPythonによるプログラミングについて、比較演算子の基本的な使い方を試してみました。この記事は学習内容の備忘録です。
ブール値
比較の結果はブール値のTrueまたはFalseになります。この2つは予約語です。真理値を表すために使われます。
TrueとFalseはbool型の値です。以下のサンプルプログラムでは、type()関数でTrueとFalseを格納した変数の型を出力しています。
ソース
a = True
b = False
print(type(a))
print(type(b))
結果
<class 'bool'>
<class 'bool'>
上記のように、bool型であることが出力されました。
値の大小を比較する
最初に値の大小を比較するための演算子を試してみました。
変数a, bに整数が格納されていたとします。変数aとbの値の大小を比較するには、次のように式を使います。
式 | 結果 |
---|---|
a > b | aがbより大きい場合True。それ以外はFalse。 |
a >= b | aがb以上の場合True。それ以外はFalse。 |
a < b | aがbより小さい場合True。それ以外はFalse。 |
a <= b | aがb以下の場合True。それ以外はFalse。 |
以下、サンプルプログラムを作って実行しました。
ソース
a = 1
b = 2
print(f'{a=}, {b=}')
print(a > b)
print(a >= b)
print(a < b)
print(a <= b)
a = 3
b = 3
print(f'{a=}, {b=}')
print(a > b)
print(a >= b)
print(a < b)
print(a <= b)
結果
a=1, b=2
False
False
True
True
a=3, b=3
False
True
False
True
もし、変数a, bのどちらかが文字列の場合、エラーが発生します。例えば、a > bを実行した場合、以下のエラーが出力されます。
- TypeError: ‘>’ not supported between instances of ‘str’ and ‘int’
ただし、変数a, bの両方が文字列の場合、エラーは発生しません。辞書式順序で比較されます。
以下は文字列同士の比較のサンプルプログラムです。
ソース
a = 'ABC'
b = 'ABD'
print(f'{a=}, {b=}')
print(a > b)
a = 'ABC'
b = 'AB'
print(f'{a=}, {b=}')
print(a > b)
結果
a='ABC', b='ABD'
False
a='ABC', b='AB'
True
上記はアルファベットの文字列の比較をしています。アルファベット順で比較した結果になっています。
値が等しいか比較する
変数a, bに整数が格納されているとします。aとbの値が等しいか等しくないかを比較するには、以下のように記述します。
式 | 結果 |
---|---|
a == b | aとbの値が等しい場合True。それ以外はFalse。 |
a != b | aとbの値が等しくない場合True。それ以外はFalse。 |
以下、サンプルプログラムを作って実行しました。
ソース
a = 1
b = 2
print(f'{a=}, {b=}')
print(a == b)
print(a != b)
a = 3
b = 3
print(f'{a=}, {b=}')
print(a == b)
print(a != b)
結果
a=1, b=2
False
True
a=3, b=3
True
False
なお、上記でaとbのどちらかに文字列が格納されていても、エラーは発生しませんでした。例えば、a=3, b=’3’の場合、a == bの結果はFalseでした。
所属しているか、部分文字列であるか
リスト型や集合型がある要素を含んでいるかどうかを調べるため演算子があります。変数aの値がリスト型変数bに格納されたリストに含まれているかを調べるには以下のように記述します。
式 | 結果 |
---|---|
a in b | aが要素である場合、True。それ以外はFalse。 |
a not in b | aが要素でない場合、True。それ以外はFalse。 |
また、文字列にも使うことができます。先に文字列に対して、この演算子を使ってみました。
以下は変数aに格納された文字列が変数bに格納された文字列の一部分であるかを調べています。
ソース
a = 'is'
b = 'This is a pen.'
print(f'{a=}')
print(f'{b=}')
print(a in b)
print(a not in b)
結果
a='is'
b='This is a pen.'
True
False
上記のように文字列が含まれているかどうかの判定に使うことが出来ます。
次にリスト型で試してみました。
ソース
a = 'AB'
b = ['A', 'AB', 'ABC']
print(f'{a=}')
print(f'{b=}')
print(a in b)
print(a not in b)
結果
a='AB'
b=['A', 'AB', 'ABC']
True
False
上記の変数bにリストを格納しています。角括弧を使い、項目をカンマで区切ることで定義することができます。
変数aに格納された文字列はリストbに含まれているため、a in bがTrueになります。
同じオブジェクトであるかどうか
変数aと変数bが同じオブジェクトであるかは以下のように判定することができます。
式 | 結果 |
---|---|
a is b | aとbが同じオブジェクトである場合True。それ以外はFalse。 |
a is not b | aとbが同じオブジェクトでない場合True。それ以外はFalse。 |
以下、リスト型を使って試してみました。
ソース
a = [1, 2, 3]
b = a
c = [1, 2, 3]
print(f'{a=}, {b=}, {c=}')
print(a is b)
print(a is c)
結果
a=[1, 2, 3], b=[1, 2, 3], c=[1, 2, 3]
True
False
変数bに変数aの値を代入しているため、変数aとbは同じオブジェクトが格納されています。そのため、a is bはTrueになります。
変数cは内容は同じですが、別途定義したリストなので別のオブジェクトです。そのため、a is cはFalseになります。
以上、参考になれば幸いです。