論理演算子
条件が 2 つ重なると、もう書けない
前回で、1 つの条件を True か False に変えられるようになりました。ただ実際の判定は「金額が大きくて、しかも食費のとき」のように、条件が 2 つ以上重なることがほとんどです。
条件どうしをつなぐのが 論理演算子 です。and と or と not の 3 つで、記号ではなく英単語なのが Python らしいところです。
and は両方、or はどちらか
and は左右の 両方 が True のときだけ True になります。or は どちらか一方 が True なら True です。
Python
rest = 800
days = 3
print(rest >= 500 and days <= 5)
print(rest >= 1000 or days <= 5)上は両方満たしているので True。下は前半が外れていますが、後半が当たっているので True です。他の言語の && や || は Python では使えず、SyntaxError になります。
and の右側にも完全な条件を書いてください。rest >= 500 and days のように条件の形をしていないものを置くと、意図した意味になりません。
残りの not は、1 つの値の前に置いて True と False を反転します。
Python
print(not (days > 10))これは days <= 10 と同じ意味です。多くの場合、not を使わずに書けるならそちらのほうが読みやすくなります。二重否定は書けますが、読み手を混乱させるので避けてください。
左が外れたら、右は見ない
論理演算子には強さの順番があり、not がいちばん強く、次が and、いちばん弱いのが or です。比較はそれより先に済むので、rest >= 500 and days <= 5 は (rest >= 500) and (days <= 5) と同じ意味になります。迷ったらかっこを付けて構いません。動きを変えずに、意図だけをはっきりさせられます。
and は、左が False になった時点で結果が決まるので、右を見ずに打ち切ります。これを 短絡評価 と呼びます。or は逆に、左が True なら右を見ません。
やってみよう
関数 is_big_food を実装してください。引数は category と price の 2 つで、category が "食費" と等しく、かつ price が 1000 以上のときだけ True を返します。それ以外は False です。
is_big_food("食費", 1200) は True、is_big_food("食費", 900) は False、is_big_food("娯楽", 5000) も False です。
ちょうど 1000 円のときは「1000 円以上」に含まれるので True になります。or でつなぐと 100 円の食費まで当たってしまうので、日本語の「かつ」と対応しているかを確かめてください。
要件
- 関数名は is_big_food で、引数は category と price の2つ
- category が "食費" と等しく、かつ price が 1000 以上のときだけ True を返す
- 条件をつなぐには and を使う(&& は使えない)
- ちょうど 1000 円のときは True になるようにする
入出力例
is_big_food("食費", 1200) → true
is_big_food("食費", 900) → false
is_big_food("娯楽", 5000) → false
is_big_food("食費", 1000) → true
is_big_food("交通費", 200) → false
is_big_food("食費", 0) → false