Pythonにおけるif文での条件分岐の基本的な使い方について解説します。
Contents
if文による条件分岐処理
Pythonでは、ある条件に一致した場合に処理を分岐させる際にif文を使用します。
本記事では、Pythonにおけるif文による条件分岐の基本的な使い方とifを用いた三項演算子の使い方についても紹介していきます。
if文の基本的な使い方
Pythonによるif文の構文は以下になります。
if 条件式A: 条件式Aが真の場合の処理 elif 条件式B: 条件式Bが真の場合の処理 else: すべての条件式が偽の場合の処理
if文は条件式に一致する場合(真:True)の場合にブロック内の処理に入ります。複数条件がある場合には、elifで条件式を記載します。elifは複数条件がある場合は複数記載することができます。記載したすべての条件式に一致しない(偽:False)の場合には、elseのブロックで記載した処理を実行します。
以降で例を使ってif文の条件分岐を見ていきましょう。
ブール値を使ったif文の条件分岐
if文では、条件式がTrueかFalseかによって条件を分岐します。条件式がTrueの場合は、if文の次の行の処理へ進みますが、Falseの場合は、elseの次の行の処理へ進みます。
以下は、FLAGに設定したブール値の内容をチェックして処理を分岐する例になります。
print("FLAGがTrueのとき") FLAG = True if FLAG: print("正解") else: print("不正解") print("FLAGがFalseのとき") FLAG = False if FLAG: print("正解") else: print("不正解")
【実行結果】 FLAGがTrueのとき 正解 FLAGがFalseのとき 不正解
FLAGにTrueを設定した場合、”正解”という文字が表示され、Falseの時は、”不正解”と表示されるようになっています。
比較演算子を用いたif文の条件判定
if文の条件式の部分には、もちろん比較演算子を用いた式を指定することができます。
以下は、文字列が等しいかどうかを==演算子を用いた比較式で条件指定し、処理を分岐している例です。
# 比較演算子を使った条件分岐 data1 = "japan" print(f"data1: {data1}, data1 == 'japan'の評価結果: {data1 == 'japan'}") if data1 == "japan": print("Japanese") else: print("Unknown") data2 = "USA" print(f"data2: {data2}, data2 == 'japan'の評価結果: {data2 == 'japan'}") if data2 == "japan": print("Japanese") else: print("Unknown")
【実行結果】 data1: japan, data1 == 'japan'の評価結果: True Japanese data2: USA, data2 == 'japan'の評価結果: False Unknown
上記例では、文字列が”japan”と等しいかどうかを判定し、等しければ”Japanese”と出力し、等しくなければ”Unknown”と表示するようにしています。
参考に==演算子の結果をprintしていますが、==演算子は等しければTrueを、等しくなければFalseを返しています。つまり、if文は比較演算子が評価して返却した結果がTrueかFalseかを判定して処理を分岐するという処理をしているわけです。
上記の==演算子の他にも、Pythonでは以下のような比較演算子を使った条件分岐が可能です。
比較内容 | 演算子 |
---|---|
等しい | == |
等しくない | != |
より小さい | < |
以下 | <= |
より大きい | > |
以上 | >= |
含まれる | in |
比較演算子での条件分岐について説明しましたが、if文がTrueかFalseかを判定して条件分岐をしているという特徴を考えれば、もちろん比較演算子に限らず、例えば開発者が作った判定関数をifに指定することで関数が返却した値をもとに条件分岐させることも可能なことがわかるかと思います。
elifを用いた複数の条件判定
if文で複数の条件を指定したい場合については、以下のようにelifを用います。
data1 = "japan" if data1 == "japan": print("Japanese") elif data1 == "USA": print("American") else: print("Unknown") data2 = "USA" if data2 == "japan": print("Japanese") elif data2 == "USA": print("American") else: print("Unknown") data3 = "China" if data3 == "japan": print("Japanese") elif data3 == "USA": print("American") else: print("Unknown")
【実行結果】 Japanese American Unknown
上記例では、文字列が”japan”と等しければ”Japanese”を、”USA”であれば”American”を、その他の場合は”Unknown”と表示するようにしています。
上記の例では、1つのelifしか使用していませんが、もちろん条件が複数ある場合には、elifを続けて記載すれば複数条件分岐を実装することができます。
論理演算子(and、or、not)で条件式を指定する
分岐する際にの条件式が複数である場合や、条件を否定したもので分岐させるには以下のように論理演算子(and、or、not)を使用することができます。
def is_positive_and_even(number): """正の数 かつ 偶数""" if number > 0 and number % 2 == 0: return True else: return False def is_positive_or_even(number): """正の数 または 偶数""" if number > 0 or number % 2 == 0: return True else: return False def is_not_positive(number): """正の数ではない""" if not number > 0: return True else: return False print("===== 正の数 かつ(and) 偶数") for i in range(-2, 3): print(f"{i:2}: {is_positive_and_even(i)}") print("===== 正の数 または(or) 偶数") for i in range(-2, 3): print(f"{i:2}: {is_positive_or_even(i)}") print("===== 正の数ではない(not)") for i in range(-2, 3): print(f"{i:2}: {is_not_positive(i)}")
【実行結果】 ===== 正の数 かつ(and) 偶数 -2: False -1: False 0: False 1: False 2: True ===== 正の数 または(or) 偶数 -2: True -1: False 0: True 1: True 2: True ===== 正の数ではない(not) -2: True -1: True 0: True 1: False 2: False
上記例では「正の数 かつ(and) 偶数」「正の数 または(or) 偶数」「正の数ではない(not)」を判定する簡単な判定関数を定義して、-2~2までの数値の判定結果を表示しています。
各関数の中でif文を定義していますが、見ていただければわかるように論理積(かつ)の場合はandを、論理和(または)の場合はorで条件をつなげます。条件を否定をする場合はnotで否定することが可能です。
複数演算子を連結した条件式の記載
Pythonでは、例えば「0 <= x and x < 3」のような条件を「0 <= x < 3」のように連結して記載することができます。以下のようにif文の条件式に複数演算子を連結した条件式を記載しても問題ありません。
numbers = range(-3, 4) print(list(numbers), "\n") print("===== 複数演算子を連結した条件式") for i in numbers: if 0 <= i < 3: print(f"{i:2}: {True}") else: print(f"{i:2}: {False}") print("===== andで条件を書く場合") for i in numbers: if i >= 0 and i < 3: print(f"{i:2}: {True}") else: print(f"{i:2}: {False}")
【実行結果】 [-3, -2, -1, 0, 1, 2, 3] ===== 複数演算子を連結した条件式 -3: False -2: False -1: False 0: True 1: True 2: True 3: False ===== andで条件を書く場合 -3: False -2: False -1: False 0: True 1: True 2: True 3: False
上記のように複数演算子を連結した条件式で記載することができます。参考にand条件で書く例も記載いています。複数演算子を連結して条件式を書くと値の範囲を見やすくなるので便利です。
True、False判定の考え方
if文を扱うときに一つ覚えておくべき重要な項目はTrue、Falseの判定の考え方についてです。if文はTrueかFalseを判定しているわけですが、if文の判定は必ずしもブール値である必要はありません。
Pythonでは、以下の表に示すような値についてはFalseとして扱います。言い換えれば、以下に該当しないものについてはTrueと判定されるわけです。
False判定となるもの | 具体的な値 |
---|---|
ブール値の偽 | False |
null値 | None |
整数のゼロ | 0 |
小数のゼロ | 0.0 |
空文字 | ” または”” |
空のリスト | [] |
空のタプル | () |
空の辞書 | {} |
空の集合 | set() |
例えば、以下の例は空のリストかどうかで判定するようなプログラムです。
# 空リストの判定 data_l = [] if data_l: print("リストには値が入っています。") else: print("リストは空です。") data_l = [10, 20, 30] if data_l: print("リストには値が入っています。") else: print("リストは空です。")
【実行結果】 リストは空です。 リストには値が入っています。
このように、ブール型に限らずにif文の判定を実行することができるということは覚えておきましょう。
- Pythonのif文の条件は必ずしもブール値である必要はない
- null値であるNone、数値の0, 0.0、空文字、空のリスト、空のタプル、空の辞書、空の集合もFalseとして判定される。
三項演算子でif文を1行で記載する
上記でif文の基本的な使い方を紹介してきました。Pythonには、if…else…を使用して条件分岐を用いた式を1行で記載する三項演算子と言われる記載方法があります。
三項演算子の基本的な使い方
三項演算子の構文は以下になります。
条件式が真のときの評価式 if 条件式 else 条件式が偽のときの評価式
「条件式が真のときの評価式」「条件式」「条件式が偽の時の評価式」の三つの項目から構成されるため「三項」演算子と呼ばれています。
以降で条件式(三項演算子)の使い方の例をいくつか見ていきましょう。
条件によって変数に代入する値を切り替える
条件によって変数に代入する値を切り替えるには以下のように三項演算子を使用します。
# 三項演算子で条件により設定する値を切り替える num = 1 result = "even" if num % 2 == 0 else "odd" print(result) num = 2 result = "even" if num % 2 == 0 else "odd" print(result) # 三項演算子で条件により式を切り替える num = 3 result = num * 2 if num % 2 == 0 else num * 3 print(result) num = 4 result = num * 2 if num % 2 == 0 else num * 3 print(result)
【実行結果】 odd even 9 8
num=1とnum=2の例では、条件によって偶数”even”か奇数”odd”といった文字列をresultへ設定します。また、num=3とnum=4の例では、偶数であれば2倍、奇数であれば3倍するような式の結果をresultへ設定します。
このように変数に設定する値を条件によって分岐させる場合にif…else…を使った三項演算子の使用が便利です。
リスト内包表記と三項演算子の組み合わせ
三項演算子は、リスト内包表記と組み合わせて使用すると条件に応じてリストを作成する際の値を分岐させることが簡単にできます。なお、リスト内包表記については「リスト(list)内包表記の使い方」でまとめていますので興味があれば参考にしてください。
以下の例で見てみましょう。
# リスト内包表記と三項演算子の組み合わせ result = ["even" if i % 2 == 0 else "odd" for i in range(10)] print(result)
【実行結果】 ['even', 'odd', 'even', 'odd', 'even', 'odd', 'even', 'odd', 'even', 'odd']
上記例では、偶数か奇数かで”even”を使うか”odd”を使うかを分岐させながらリストを作成しています。
ラムダ(lambda)関数と三項演算子の組み合わせ
三項演算子は、ラムダ(lambda)関数と組み合わせて使用すると条件に応じて返却値が変わるラムダ関数を簡単に表現できます。なお、ラムダ関数については「ラムダ(lambda)関数:無名関数の使い方」でまとめていますので興味があれば参考にしてください。
以下の例で見てみましょう。
# 三項演算子とラムダ関数の組み合わせ get_even_or_odd = lambda x: "even" if x % 2 == 0 else "odd" num = 1 print(get_even_or_odd(num)) num = 2 print(get_even_or_odd(num))
【実行結果】 odd even
上記例では偶数の場合は”even”、奇数の場合は”odd”を返却する関数をラムダ関数で定義して、返却値計算で三項演算子を使用しています。
この例ではラムダ関数を変数に代入して使用していますが、pep8やpylint等の構文チェックを使用すると警告が出るかと思います。もともとラムダ関数は名前を付けずに使うためのものなので名前を付けるのであればdefで関数宣言しなさいということになるのですが、今回はラムダ関数の構文で三項演算子が使えることの紹介で分かりやすくするためにということでご理解ください。
まとめ
Pythonにおけるif文での条件分岐の基本的な使い方について解説しました。
if文による条件分岐の基本的な使い方とif…else…を用いた三項演算子の使い方についても説明しています。
if文はPythonに限らずプログラミング言語では非常に重要な条件分岐の構文になります。是非しっかりと使い方を覚えてもらえたらと思います。
上記で紹介しているソースコードについてはgithubにて公開しています。参考にしていただければと思います。