LoginSignup
0
2

More than 1 year has passed since last update.

python初学者の備忘録 論理演算子について

Last updated at Posted at 2021-09-09

←目次

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"
0
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2