比較演算子
使いすぎているのかどうか、プログラムは何も言ってくれない
第 2 章までのレシートは、使った金額を書き出すだけでした。それが多いのか少ないのかは何も言ってくれません。ここから、プログラムに「くらべる」ことを覚えさせます。
くらべるための道具が 比較演算子 です。2 つの値を左右に置くと、その関係が正しいかどうかを True か False で答えてくれます。
Python
print(7 > 3) # True より大きい
print(7 < 3) # False より小さい
print(3 >= 3) # True 以上
print(3 <= 2) # False 以下
print(3 == 3) # True 等しい
print(3 != 3) # False 等しくない> と < は算数と同じ向きで、とがったほうが小さい側を指します。>= と <= は「以上」「以下」なので、等しいときも True です。=> と書くとエラーになるので、不等号が先と覚えます。!= の ! は多くの言語で否定を表す記号で、文字列にも使えます。
代入の = と比較の == は別物
いちばん引っかかるのがここです。イコールが 1 つの = は代入、2 つの == は比較です。
Python
days = 7
print(days == 7)1 行目は「等しい」という主張ではなく「入れる」という命令、2 行目が「なのか」と聞いています。くらべたいのにイコールを 1 つしか書かないと SyntaxError になります。= は「する」、== は「なのか」。日本語に直して読むと取り違えにくくなります。
比較の結果は、値である
> が返す True と False は bool 型の値です。ここが大事なところで、比較は「その場で判定して終わり」ではなく、1 つの値を作る式 です。
Python
result = 7 > 3
print(type(result).__name__)bool と出ます。値なので、変数に入れることも、関数からそのまま返すこともできます。True や False を自分で書き分ける必要はありません。
なお "3000" > 3000 のように文字列と数値をくらべると TypeError です。数として比べたいなら、先に int を通しておきます。
やってみよう
関数 is_over を実装してください。引数は total と budget の 2 つで、total が budget を 超えている とき True、そうでないとき False を返します。
is_over(3200, 3000) は True、is_over(2500, 3000) は False です。ちょうど同じ金額の is_over(3000, 3000) は、超えてはいないので False になります。
この境目の 1 つをどちらに入れるかは、いつも仕様で決めておく必要があります。「予算を超えたら」なら >、「予算に達したら」なら >= で、答えが変わります。バグの大半は境界値で起きるので、テストには必ずちょうどの値を混ぜてください。
要件
- 関数名は is_over で、引数は total と budget の2つ
- total が budget より大きいとき True を返す
- total と budget が等しいときは False を返す
- True や False を自分で書かず、比較の式をそのまま return してよい
入出力例
is_over(3200, 3000) → true
is_over(2500, 3000) → false
is_over(3000, 3000) → false
is_over(3001, 3000) → true
is_over(0, 3000) → false
is_over(120, 0) → true