slow-starter

なにをやるにもslow start……。

python_009

三項演算子

真偽判定を普通に分かりやすく記載すると以下のような感じ

a = "True"
if True:
    print(a, "is True")
else:
    print(a, "is False")
# True is True

上記だと面倒なので、以下のような記載で1行で条件分岐を記載すると、確認しやすい。

a = "True";print(a, "is True") if True else print(a, "is False")
# True is True

True/False (False が False)

for i in [True, False]:
    a = i; print(a, "is True") if i else print(a, "is False")
# True is True
# False is False

だけど、'False'という文字列はTrue…。

for i in ["True", "False"]:
    a = i; print(a, "is True") if i else print(a, "is False")
# True is True
# False is True

数字 (0 が False)

for i in range(-1,2):
    a = i; print(a, "is True") if i else print(a, "is False")
# -1 is True
# 0 is False
# 1 is True

ゼロの数値型はFalse

from decimal import *
from fractions import *
for i in [0, 0.0, 0j, Decimal(0), Fraction(0, 1)]:
    print(type(i))
    a = i; print(a, "is True") if i else print(a, "is False")

# <class 'int'>
# 0 is False
# <class 'float'>
# 0.0 is False
# <class 'complex'>
# 0j is False
# <class 'decimal.Decimal'>
# 0 is False
# <class 'fractions.Fraction'>
# 0 is False

空(から)のシーケンスはFalse

for i in [[],(),{},set(),range(0)]:
    print(type(i))
    a = i; print(a, "is True") if i else print(a, "is False")

# <class 'list'>
# [] is False
# <class 'tuple'>
# () is False
# <class 'dict'>
# {} is False
# <class 'set'>
# set() is False
# <class 'range'>
# range(0, 0) is False