このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Python入門】複雑な条件式

複雑な条件式

 三項演算子(条件式)を用いると、複数の条件に基づいて短いコードで結果を返すことができ、if文よりもコンパクトに記述できる場合があります。ここでは、複雑な条件式を使って、複数の条件に応じた結果を1つの式で返す方法を学びます。今回は、ユーザが入力した「試験の点数」に応じて、評価メッセージを返すプログラムを例に、三項演算子を活用した条件式のサンプルプログラムを紹介し、各構文要素の説明や処理の流れを表で整理します。

プログラムのダウンロード

 「ダウンロード」から、JupyterLab で実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。

1.三項演算子の基本構文と処理の流れ

1.1. 単一の条件式の基本構文

三項演算子は、以下の基本書式で記述します。

式A if 条件式 else 式B

この式は、条件式がTrueの場合に式Aの値を返し、Falseの場合に式Bの値を返します。

# ユーザから点数を入力してもらい、合格か不合格かを判定する
score = int(input("Enter your score: "))
result = "Pass" if score >= 60 else "Fail"
print(result)

実行結果

Enter your score:  60
Pass

解説

  • input("Enter your score: ") により、ユーザから点数が入力され、int() で整数に変換されます。
  • 条件式 score >= 60 がTrueの場合は "Pass"、Falseの場合は "Fail" が返され、変数 result に代入されます。

1.2. 複数の条件を連ねた三項演算子

 複数の条件を連ねることで、3通り以上の結果を1つの式で返すことが可能です。書式は以下のようになります。

式A if 条件X else 式B if 条件Y else 式C

 この式は、まず条件Xを評価し、Trueなら式Aの値を返し、Falseの場合は条件Yを評価し、Trueなら式B、すべてFalseなら式Cの値を返します。

以下は、ユーザが入力した試験の点数に応じて、評価メッセージを返すプログラムです。

  • 点数が90以上なら "Excellent!"
  • 点数が75以上90未満なら "Good job!"
  • 点数が50以上75未満なら "Needs Improvement"
  • それ以外は "Fail"
# ユーザから試験の点数を入力してもらう
score = int(input("Enter your score: "))

# 三項演算子を使って評価メッセージを返す
print("Excellent!" if score >= 90 else 
      "Good job!" if score >= 75 else 
      "Needs Improvement" if score >= 50 else "Fail")

実行結果

Enter your score:  80
Good job!

解説

  • 入力された点数は整数に変換され、変数 score に格納されます。
  • 最初に score >= 90 を評価し、Trueなら "Excellent!" を返します。
  • それ以外の場合、次に score >= 75 を評価し、Trueなら "Good job!" を返します。
  • さらに、score >= 50 がTrueなら "Needs Improvement" を返し、どの条件も満たさなければ "Fail" が返されます。
  • 各条件の判定結果に応じたメッセージが1行のprint文で出力され、条件式の途中で改行してインデントを揃えることで可読性が向上しています。

【条件式の処理の流れの表】

条件返されるメッセージ
score >= 90 が True"Excellent!"
score < 90 かつ score >= 75 が True"Good job!"
score < 75 かつ score >= 50 が True"Needs Improvement"
それ以外"Fail"

2.三項演算子の利用時の注意点と構文の詳細

2.1. インデントと改行の重要性

 長い条件式の場合、PEP8のガイドラインに従い、各行で条件式や結果の先頭が揃うように改行とインデントを用いることが推奨されます。

print("Excellent!" if score >= 90 else 
      "Good job!" if score >= 75 else 
      "Needs Improvement" if score >= 50 else "Fail")

実行結果

Good job!

解説

  • 各行の最初の部分が同じ位置に揃っており、条件式全体の構造が視覚的に明確になります。
  • 改行とインデントにより、どの条件に対してどの結果が対応するかが一目でわかるようになっています。

2.2. 三項演算子とif文の比較

 三項演算子は、if文と同様の条件分岐を1行で実現できますが、条件が複雑になりすぎると可読性が低下するため、状況に応じて使い分ける必要があります。

if文を使った場合

score = int(input("Enter your score: "))
if score >= 90:
    print("Excellent!")
elif score >= 75:
    print("Good job!")
elif score >= 50:
    print("Needs Improvement")
else:
    print("Fail")

実行結果

Enter your score:  60
Needs Improvement

三項演算子を使った場合

score = int(input("Enter your score: "))
print("Excellent!" if score >= 90 else 
      "Good job!" if score >= 75 else 
      "Needs Improvement" if score >= 50 else "Fail")

実行結果

Enter your score:  80
Good job!

表:if文と三項演算子の比較

特徴if文の例三項演算子の例
記述の長さ複数行に分かれて記述1行または改行を利用して短く記述可能
可読性複雑な条件分岐にも適している。シンプルな条件分岐に最適、複雑だと読みにくくなる場合がある。
使用例複数行の if-elif-else 文ネストされた条件式(例: 条件A if 条件式1 else 条件B if 条件式2 else ...)

まとめ

 三項演算子を使うことで、if文と同じ条件分岐の処理を短く簡潔に1行または少ない行数で記述できるため、コードの冗長性を軽減できます。

  • 基本構文は、式A if 条件式 else 式B で、条件に応じた値を返します。
  • 複数条件の連結により、3通り以上の結果を1つの式で返すことができ、if文のelif節に類似した動作を実現します。
  • 改行とインデントを適切に用いることで、条件式が複雑になっても可読性を保つことができます。
  • if文との使い分け: 条件がシンプルであれば三項演算子が有効ですが、複雑な条件や複数の処理を実行する場合は、通常のif-elif-else文の方が適切です。

 これらの知識を活用して、条件に応じた処理を簡潔に記述し、プログラムの読みやすさと保守性を向上させましょう。