if文の基本

このレッスンで作るもの — if を使って、金額が大きいときだけ違う答えを返す price_alert を作ります。

if 文の基本

第 3 章では price >= 1000 のような比較が TrueFalse を返すことを扱いました。ただし判定の結果を手に入れただけでは、プログラムの動きは変わりません。結果によって 実行する処理そのものを切り替える 道具が if です。

おこづかい帳で言えば「1000 円以上の買い物をしたときだけ警告を出す」という動きが、ここではじめて書けるようになります。

条件分岐は、プログラムがはじめて「考えて動いている」ように見える瞬間です。ここから先、書けるものの幅が一気に広がります。

文法を確認する

if のうしろに条件を書き、行末に半角のコロンを置きます。次の行から、条件が True のときだけ動く処理を 半角スペース 4 つ分下げて 書きます。

if price >= 1000: return "高額" return "通常"

条件が成り立てば return "高額" に進み、関数はそこで終わります。成り立たなければ if の中は丸ごと飛ばされ、下の return "通常" に進みます。

この下げ幅を インデント と呼びます。Python ではインデントが「どこからどこまでが if の中身か」を決める文法そのものです。他の言語のような波かっこは使いません。

def price_alert(price): if price >= 1000: return "高額" return "通常"

def の中で if を使うと、インデントは 2 段になります。def の中身が 4 つ分、if の中身がさらに 4 つ分です。

動きを追ってみる

price_alert(1500) を呼んだときの流れは下記のとおりです。

  1. price1500 が入る
  2. 1500 >= 1000 を計算し、True になる
  3. if の中に入り、return "高額" で関数が終わる

price_alert(300) なら 2 の判定が False になるので、if の中身は 1 行も動かず、そのまま下の return "通常" に落ちます。

diagram (will load when visible)

if は通せんぼだと思うと分かりやすいです。条件が True のときだけ道が開き、False のときは中身をまるごと素通りします。

三項演算子との使い分け

第 3 章の三項演算子を使えば、同じことが 1 行でも書けます。

def price_alert(price): return "高額" if price >= 1000 else "通常"

結果はまったく同じです。では if は要らないのかというと、そうではありません。三項演算子が書けるのは 2 つの値のどちらかを選ぶ ときだけで、if のように複数行の処理を入れることはできません。

第 3 章で作った check_budgetif で書き直せます。三項演算子でひとまとめにしていた判定をほどくと、オーバーのときだけ行を足す、といった拡張がしやすくなります。

1 行で収まる値の選択なら三項演算子、処理が 2 行以上になるなら if 文。この線引きを先に決めておくと毎回迷わずに済みます。

手元で動かしてみる

kakeibo.py に下記を書いて保存し、実行してみます。

def price_alert(price): if price >= 1000: return "高額" return "通常" print(price_alert(1500)) print(price_alert(300))

高額通常 が 1 行ずつ出れば正解です。price_alert(1000) も足して呼んでみると、>= が「ちょうど」を含んでいることが目で確認できます。

よくある間違い

  1. コロンを忘れるif price >= 1000 と書いて末尾の : を落とすと SyntaxError になります。if の行は必ずコロンで終わります。
  2. インデントがずれる — 半角スペース 4 つが基本です。タブと混ぜたり、2 つと 4 つが混在したりすると IndentationError になります。
  3. === を取り違える — 条件で使うのは比較の == です。代入の = を書くと SyntaxError になります。

>= は「以上」、> は「より大きい」です。1000 ちょうどをどちら側に入れるかで結果が変わるので、境目の値は必ず自分の手で確かめます。

やってみよう

関数 price_alert(price) を実装してください。price1000 以上なら文字列 "高額" を、そうでなければ "通常" を返します。1000 ちょうどは「高額」に入れます。

ifreturn の組み合わせで書いてみてください。書けたら 9991000 の 2 つを渡して、境目で答えが切り替わることを確かめてみてください。

要件

  1. 関数名は price_alert で、引数は price の 1 つ
  2. price が 1000 以上なら "高額" を return する
  3. price が 1000 未満なら "通常" を return する
  4. if の行は末尾にコロンを付け、中身は半角スペース 4 つ分インデントする

入出力例

price_alert(1500)"高額" price_alert(1000)"高額" price_alert(999)"通常" price_alert(300)"通常" price_alert(0)"通常"

ヒント

生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部
main.py
main.py
学習モード

メモ

if文の基本

⌘S で保存