【Pythonチュートリアル】真偽判定と論理演算

monitor Python

論理演算子(or、and)を使った真偽判定の方法について解説します。

はじめに

Pythonチュートリアル > 5.7. 条件についてもう少しより、以下のサンプルコードを見てみます。

>>> string1, string2, string3 = '', 'Trondheim', 'Hammer Dance'
>>> non_null = string1 or string2 or string3
>>> non_null

'Trondheim'

電気系学部出身の私には、なぜ、’Trondheim’が出力結果になるか分からなかったので、色々調べてみました。

論理演算子について、電気回路とプログラミング言語の違い

電気回路的な理解は以下の通り。

論理演算入力出力
or(論理和)全て’0′0
or(論理和)いずれか1つでも’1′1
and(論理積)全て’1′1
and(論理積)いずれか1つでも’0′0

0をFalse、1をTrueと置き換えれば、プログラミングにおいても概ね理解としては合っているようです。

ただし、文字列同士の論理演算については、上記の理解では足りていない(というわけで、はじめの疑問に行き着く)。

プログラミング言語においては、短絡評価という評価方法が存在します。
短絡評価方法は以下の通り。

論理演算評価方法
or(論理和)評価対象の引数がTrueの場合、その引数を結果として出力。
評価対象の引数がFalseの場合、その次の引数を評価。
and(論理積)評価対象の引数がTrueの場合、その次の引数を評価
評価対象の引数がFalseの場合、その引数を結果として出力。

‘0’、’1’の評価においても、全ての値を評価しなくても結果が得られるので、効率が良さそうな評価方法です。

言語によっては、非短絡評価と短絡評価を区別されているもの、いずれか一方のみを使えるもの、とがあります。
Pythonについては、短絡評価のみを取り扱います。

Pythonにおける、文字列の論理演算

はじめに示したサンプルコードを、もう一度見直してみます。

>>> string1, string2, string3 = '', 'Trondheim', 'Hammer Dance'
>>> non_null = string1 or string2 or string3
>>> non_null

'Trondheim'

それぞれの変数をbool値で評価すると以下の通り。

string1 = ‘ ‘         → False
string2 = ‘Trondheim’    → True
string3 = ‘Hammer Dance’ → True

orで短絡評価した場合、左から順に初めてTrueになる値が出力されるため、’Trondheim’が出力結果として得られます。

結構スッキリしました。

参考

タイトルとURLをコピーしました