Pythonのif文による条件分岐の書き方

Pythonのif文による条件分岐について説明します。

if文の基本(if, elif, else) 比較演算子などで条件を指定 数値やリストなどで条件を指定 論理演算子(and, or, not)で複数条件や否定を指定 条件式を改行して複数行で記述

条件分岐を一行で記述する三項演算子もあります。

if文の基本(if, elif, else)

if文の基本的な形は以下のようになります。

if 条件式1:
    `条件式1Trueのときに行う処理`
elif 条件式2:
    `条件式1Falseで条件式2Trueのときに行う処理`
elif 条件式3:
    `条件式1, 2Falseで条件式3Trueのときに行う処理`
...
else:
    `すべての条件式がFalseのときに行う処理`

elifはC言語などにおけるelse ifに相当し、何個あってもよい。 条件式が一つだけの場合やFalseのときの処理が必要ない場合は、elifブロックとelseブロックは省略できます。

比較演算子などで条件を指定

比較演算子などのbool型(Ture, False)を返す演算で条件を指定します。 Pythonの比較演算子は以下の通り。演算子 結果 x < y xがyより小さければTrue x <= y xがyより小さいか等しければTrue x > y xがyより大きければTrue x >= y xがyより大きいか等しければTrue x == y xとyの値が等しければTrue x != y xとyの値が等しくなければTrue x is y xとyが同じオブジェクトであればTrue x is not y xとyが同じオブジェクトでなければTrue x in y xがyに含まれていればTrue x not in y xがyに含まれていなければTrue例を示す。便宜上、def文で関数として定義しています。

def if_test(num):
    if num > 100:
        print('100 < num')
    elif num > 50:
        print('50 < num <= 100')
    elif num > 0:
        print('0 < num <= 50')
    elif num == 0:
        print('num == 0')
    else:
        print('num < 0')

if_test(1000)
# 100 < num

if_test(70)
# 50 < num <= 100

if_test(0)
# num == 0

if_test(-100)
# num < 0

Pythonならではの書き方として、a < x < bというような書き方もできます。詳細は

def if_test2(num):
    if 50 < num < 100:
        print('50 < num < 100')
    else:
        print('num <= 50 or num >= 100')

if_test2(70)
# 50 < num < 100

if_test2(0)
# num <= 50 or num >= 100

==, !=は値の比較で、オブジェクトの同一性を比較するにはis, is notを使います。 例えば、整数intと浮動小数点数floatを比較する場合、値が等価であれば==はTrueを返すが、異なるオブジェクトなのでisはFalseを返します。

i = 10
print(type(i))
# <class 'int'>

f = 10.0
print(type(f))
# <class 'float'>

print(i == f)
# True

print(i is f)
# False

リストや文字列に特定の要素(文字)が含まれているかを条件にすることもできます。in(含む)、not in(含まない)を使います。

def if_test_in(s):
    if 'a' in s:
        print('a is in string')
    else:
        print('a is NOT in string')

if_test_in('apple')
# a is in string

if_test_in('melon')
# a is NOT in string

数値やリストなどで条件を指定

if文の条件式には、bool型(True, False)ではない数値やリストなどのオブジェクトを指定することもできます。

if 10:
    print('True')
# True

if [0, 1, 2]:
    print('True')
# True

Pythonのif文の条件式において、偽Falseとみなされるのは以下のオブジェクト。

bool型のFalse None 数値(int型やfloat型)の0, 0.0 空の文字列'' 空のコンテナ(リスト、タプル、辞書など)[], (), {}

これ以外はすべて真Trueとみなされます。 オブジェクトがどう判定されるかはbool()で確認することができます。文字列において空の文字列''以外はTrueとなるため、'False'という文字列もTrueとなるので気をつけてください。

print(bool(10))
# True

print(bool(0.0))
# False

print(bool([]))
# False

print(bool('False'))
# True

これを利用すると、リストが空の場合の処理などがシンプルに書けます。

def if_test_list(l):
    if l:
        print('list is NOT empty')
    else:
        print('list is empty')

if_test_list([0, 1, 2])
# list is NOT empty

if_test_list([])
# list is empty

'True'や'False'など特定の文字列を1, 0に変換するにはdistutils.utilモジュールのstrtobool()を使います。

論理演算子(and, or, not)で複数条件や否定を指定

論理演算子(and, or, not)を使うことで、複数の条件の論理積(かつ)や論理和(または)、否定(でない)を扱うことができます。演算子 (if文の条件式での)結果 x and y xもyもTrueであればTrue x or y xとyいずれかがTrueであればTrue not x xがTrueであればFalse、x がFalseであればTruedef if_test_and_not(num):

    if num >= 0 and not num % 2 == 0:
        print('num is positive odd')
    else:
        print('num is NOT positive odd')

if_test_and_not(5)
# num is positive odd

if_test_and_not(10)
# num is NOT positive odd

if_test_and_not(-10)
# num is NOT positive odd

なお、実際はx and yとx or yはTrue, Falseではなくx, yいずれかの値を返します。if文の条件式で使う限りは、その値がTrueかFalseのいずれかに評価されるので特に気にする必要はない。詳細は

andやorを複数回使用することもできます。

def if_test_and_not_or(num):
    if num >= 0 and not num % 2 == 0 or num == -10:
        print('num is positive odd or -10')
    else:
        print('num is NOT positive odd or -10')

if_test_and_not_or(5)
# num is positive odd or -10

if_test_and_not_or(10)
# num is NOT positive odd or -10

if_test_and_not_or(-10)
# num is positive odd or -10

条件式を改行して複数行で記述

複数の条件式をandやorで接続して使う場合などで一行が長くなると、条件式を改行して複数行で記述したいときがあります。 バックスラッシュ\を使うか、全体を括弧()で囲むことで改行ができます。

def if_test_and_backslash(num):
    if num >= 0 \
       and not num % 2 == 0:
        print('num is positive odd')
    else:
        print('num is NOT positive odd')

if_test_and_backslash(5)
# num is positive odd

def if_test_and_brackets(num):
    if (num >= 0
        and not num % 2 == 0):
        print('num is positive odd')
    else:
        print('num is NOT positive odd')

if_test_and_brackets(5)
# num is positive odd

バックスラッシュ\を使えば何度改行してもいい。同じく、括弧()内であれば何度改行してもいい。インデントの制限もない。 なお、これはif文に限ったことではなくPythonのコードどこでも使えるテクニック。

Last Updated: 6/26/2019, 10:34:03 PM