akuruhinode's blog

pythonやC#を中心に興味を持った内容について調べています。

Python ブール型以外でTrueやFalseと判定される値

はじめに

Pythonでは、ブール型以外にもTrueやFalseと判定される値があります。ここではそれらの値と判定値を整理します。

TrueやFalseと判定される値

ブール型以外でTrueやFalseと判定される値は以下の通りです。

判定値
0 False
0.0 False
''(空文字列) False
上記以外 True

実行例

Falseとなる例

以下はFalseとなる例です。if文の評価結果がFalseとなっていることがわかると思います。

  • 例1
if 0:
    print('True')
else:
    print('False')
False
  • 例2
if 0.0:
    print('True')
else:
    print('False')
False
  • 例3
if '':
    print('True')
else:
    print('False')
False

Trueとなる例

以下はTrueとなる例です。ここでは1例のみ紹介しますが、Falseとなる例で説明した内容以外であれば、すべてTrueとなります。

if 1:
    print('True')
else:
    print('False')
True

TrueやFalse判定を利用したコードの簡易化

TrueやFalseと判定される値を利用するとコードを簡易化できます。

例えば、空文字が入力されている間whileループを繰り返す処理を考えます。
input()で入力した文字が空文字かどうか判定する場合、TrueやFalse判定を利用するとコードを簡易化できます。

  • TrueやFalse判定を利用しない場合の例
name = ''
while name == '': # not name != ''でも同様
    print('名前を入力してください')
    name = input()
print('こんにちは' + name + 'さん')
  • TrueやFalse判定を利用した場合の例
name = ''
while not name: # 空文字が入力された場合にFalse判定されることを利用して簡易化
    print('名前を入力してください')
    name = input()
print('こんにちは' + name + 'さん')

TrueやFalse判定で不具合を生まないために

間違えやすいのがマイナスの値です。0や0.0はFalseと判定されますが、マイナスの値はTrueと判定されます。
例えば年齢を入力してもらう処理を考えます。ここでTrue、False判定を誤解していると、不具合を埋め込んでしまう可能性があります。
年齢は0以上の値なので、条件式は age >= 0となります。しかし以下のTrue、False判定を誤解した間違った例ではage != 0という条件式になっています。

  • 間違った例
print('年齢を入力してください')
age = int(input())
if age: # この条件式は age != 0と同等
    print(str(age) + '歳ですね')
else:
    print('0以上の値を入力してください')
  • 正しい例
print('年齢を入力してください')
age = int(input())
if age >= 0:
    print(str(age) + '歳ですね')
else:
    print('0以上の値を入力してください')