三項演算子
True と False は、人に見せる言葉ではない
ここまでの判定は、すべて True か False を返すものでした。しかし画面に True と出しても、読んだ人には何のことか分かりません。本当にほしいのは「オーバー」のような 言葉 です。
True と False から別の値へ乗り換える道具が 三項演算子 です。書き方は下記のとおりです。
Python
値A if 条件 else 値B条件が True なら 値A、False なら 値B になります。
Python
rest = 0
print("補充が要る" if rest == 0 else "まだある")英語の語順そのままに「A である、もし条件なら、そうでなければ B」と読みます。慣れるまでは真ん中の if から読むのがコツです。まず条件、次に左、最後に右です。
条件が先に評価され、そのあとで左右のどちらか 片方だけ が採用されます。採用されなかった側は計算すらされません。
文ではなく、式であること
三項演算子は 式 です。式とは「計算すると 1 つの値になるもの」で、1 + 2 や count > 0 と同じ仲間です。値なので、そのまま返せますし、f-string の {} の中にも置けます。
Python
count = 12
print(f"記録は {'多い' if count >= 10 else '少ない'} です")f-string の {} の中では、外側とは別のクオートを使ってください。外がダブルクオート " なら、内はシングルクオート ' です。同じ種類を重ねると、そこで文字列が終わったと解釈されて SyntaxError になります。
else は省略できません。省くと SyntaxError です。式は必ず何らかの値にならなければいけないからです。if 条件 then A else B のような語順も Python にはありません。値が先、if、条件、else、値の順です。
つなげすぎない
入れ子にもできますが、2 段目からは急に読みづらくなります。三項演算子は 2 択のとき専用 の道具だと考えるのが健全です。3 分岐以上を 1 行に押し込むより、素直に分けたほうが結局は速く仕上がります。
やってみよう
関数 budget_label を実装してください。引数は total と budget の 2 つで、total が budget を超えていれば "オーバー"、そうでなければ "予算内" を返します。三項演算子の形で書いてください。
budget_label(3200, 3000) は "オーバー"、budget_label(2500, 3000) は "予算内" です。ちょうど同じ金額の budget_label(3000, 3000) は、3000 > 3000 が False になるので "予算内" です。境目の扱いは、条件に使う演算子で決まります。
要件
- 関数名は budget_label で、引数は total と budget の2つ
- total が budget を超えていれば "オーバー" を返す
- それ以外は "予算内" を返す(同額のときも "予算内")
- 三項演算子 A if 条件 else B の形で書く
入出力例
budget_label(3200, 3000) → "オーバー"
budget_label(2500, 3000) → "予算内"
budget_label(3000, 3000) → "予算内"
budget_label(3001, 3000) → "オーバー"
budget_label(0, 3000) → "予算内"
budget_label(120, 0) → "オーバー"