if文の基本
比べた結果を持っていても、動きは変わらない
第 3 章で price >= 1000 が True か False になることを見ました。ただ、判定の結果を手に入れただけでは、表示される内容は 1 文字も変わりません。結果によって 実行する処理そのもの を切り替える道具が if です。
Python
memo = "レシートを撮り忘れた"
mark = "メモなし"
if memo != "":
mark = "メモあり"
print(mark)memo に中身があるので mark は "メモあり" に置き換わります。空文字なら if の中は 1 行も動かず、mark は "メモなし" のまま残ります。条件が成り立ったときだけ通れる通せんぼだと思うと分かりやすいです。
下げ幅が「どこまでが if の中身か」を決める
if のうしろに条件を書き、行末に半角のコロンを置きます。次の行から、条件が True のときだけ動く処理を 半角スペース 4 つ分下げて 書きます。この下げ幅を インデント と呼びます。
Python ではインデントが文法そのものです。他の言語のような波かっこは使いません。だからインデントを戻した行は if の外側にあり、条件が False でも必ず動きます。
Python
def mark_memo(memo):
mark = "メモなし"
if memo != "":
mark = "メモあり"
return markdef の中で if を使うと、インデントは 2 段になります。def の中身が 4 つ分、if の中身がさらに 4 つ分で、合わせて 8 つ分です。return の行は 4 つ分に戻してあるので、if を通っても通らなくても実行されます。
境目の値は、両側を自分の手で試す
>= は「以上」、> は「より大きい」です。ちょうどの値をどちら側に入れるかで答えが変わるので、境目は必ず 2 つ試します。
Python
print(1000 >= 1000)
print(1000 > 1000)True と False が出ます。この 1 文字の違いが、そのまま判定の食い違いになります。
if の行の末尾にコロンを書き忘れると SyntaxError、インデントがそろっていないと IndentationError です。どちらも実行する前に止まり、メッセージに行番号が出るので、そこを見にいけば直せます。
やってみよう
関数 price_alert(price) を実装してください。price が 1000 以上なら文字列 "高額" を、そうでなければ "通常" を返します。1000 ちょうどは「高額」に入れます。
書けたら 999 と 1000 の 2 つを渡して、境目で答えが切り替わることを確かめてみてください。
要件
- 関数名は price_alert で、引数は price の 1 つ
- price が 1000 以上なら "高額" を return する
- price が 1000 未満なら "通常" を return する
- if の行は末尾にコロンを付け、中身は半角スペース 4 つ分インデントする