←目次
python,Qiita初心者なので、備忘録として記載していきます。
なにせ初心者なので、知識不足はご理解ください。
知識を深めながら追記していきたいと思います。
論理演算子とは
基本
- 複数の式や値を比較し、真偽値の場合bool型を返す
- bool型だけでなく、数値や文字列、リストなども真偽値として処理される
and, orの返り値はbool値とは限らない
以下の演算子がある
論理演算子 | 記号 | 説明 |
---|---|---|
論理積 | and(かつ) | すべての条件が真(True)のとき真(True)になる |
論理和 | or(または) | 条件が1つでも真(True)であれば真(True)になる |
否定 | not | 上記の結果を反転させる |
真偽表
x | y | and(かつ) | or(または) |
---|---|---|---|
真 (True) | 真 (True) | 真 (True) | 真 (True) |
真 (True) | 偽 (False) | 偽 (False) | 真 (True) |
偽 (False) | 真 (True) | 偽 (False) | 真 (True) |
偽 (False) | 偽 (False) | 偽 (False) | 偽 (False) |
論理演算子の優先順位
「not」>「and」>「or」
and(かつ)
>>> 4 < 5 and 6 < 7
True
>>> True and True
True
>>> True and False
False
>>> False and True
False
>>> False and False
False
or(または)
>>> 4 < 5 or 6 < 7
True
>>> True or True
True
>>> True or False
True
>>> False or True
True
>>> False or False
False
not(否定)
>>> not True
False
>>> not False
True
>>> not (4 < 5 and 6 < 7)
False
# 上と同じ条件文
>>> not(4 < 5) and not(6 < 7)
False
>>> not (4 < 5 or 6 < 7)
False
# 上と同じ条件文
>>> not(4 < 5) or not(6 < 7)
False
bool型以外のオブジェクトの場合
Pythonの論理演算において、偽(False)とみなされるのは以下のオブジェクト
- 定数: NoneとFalse
- 数値型におけるゼロ: 「0」, 「0.0,」 「0j」(複素数), Decimal(0), Fraction(0, 1)
- 空のシーケンスまたはコレクション: '', (), [], {}, set(), range(0)
上記以外はすべて真(True)とみなされる
bool関数()で真偽値の確認
>>> bool(10)
True
>>> bool(0)
False
>>> bool('0')
True
>>> bool('False')
True
>>> bool('')
False
>>> bool([False])
True
>>> bool([])
False
and, orの返り値はbool値とは限らない※notは除く
【論理演算子:必ずBool値を返す】という先入観
他言語の影響から、論理演算子は必ずBool値を返すという先入観があり、ご指摘を受けました。
pythonやJavaScript等はそれ以外の値も返すようです。。。
ショートサーキット(短絡評価)
Pythonでは標準でショートサーキット(短絡評価)が実装されている。
※対義語としてロングサーキット(完全評価)がある
(ユーザー定義関数を実装するなどが必要)
●and
・左辺評価時、真であれば右辺以降も評価される
・左辺評価時、偽であれば右辺以降は評価されない
●or
・左辺評価時、真であれば右辺以降は評価されない
・左辺評価時、偽であれば右辺以降も評価される
VB.NETで例えると
AndAlso
OrElse
C#で例えると
&&
||
pythonの真同士の評価
>>> x = 10
>>> y = 100
# -- 右辺まで評価されたため右辺の値を返す --
>>> x and y
100
>>> y and x
10
# -- 左辺で評価されたため左辺を返す --
>>> x or y
10
>>> y or x
100
pythonの偽同士の評価
>>> x = 0
>>> y = 0.0
# -- 左辺で評価されたため左辺を返す --
>>> x and y
0
>>> y and x
0.0
# -- 右辺まで評価されたため右辺の値を返す --
>>> x or y
0.0
>>> y or x
0
bool型で扱いたい場合は以下のようにすればよい
bool関数()を使用する
>>> bool(x and y)
False
文字列絡みのケース
bool型以外のオブジェクトの扱い
# -- 最後に評価された値を返す --
>>> 'Hit' and False
False
>>> 'Hit' and True
True
>>> 'Dead' and 'Alive'
'Alive'
>>> 'Dead' or 'Alive'
'Dead'
おまけ
answer.py
# -- 三項演算子のようにも使えるカモ --
answer = ''
ok = ''
answer = ok or "NG"
# -- 三項演算子だと --
answer = "OK" if ok == ('OK') else "NG"
print(answer)
# -- 出力結果 --
"NG"
answer = ''
ok = 'OK'
answer = ok or "NG"
# -- 三項演算子だと --
answer = "OK" if ok == ('OK') else "NG"
print(answer)
# -- 出力結果 --
"OK"