Python超入門③ if文で条件によって処理を分けよう
Pythonのif、elif、else、比較演算子、and、or、notを使い、条件に応じた処理を作ります。
点数が60点以上なら「合格」、そうでなければ「もう少し」。こんなふうに、値によって違う処理をしたくなることがあります。
そこで使うのがif文です。「条件が正しいなら、この処理をする」とPythonへ伝えます。今回は、条件を書くところから始めて、複数の選択肢を順番に判定するところまで進めましょう。
準備:TrueとFalseを確かめる
Python 3で、各コード欄を別々に試してください。変数や入力がまだ分からなければ、第2回を先に読むとつながりやすくなります。
条件式は、条件が成り立つかを調べる式です。
score = 72
print(score >= 60)
print(score < 60)
True
False
True は正しい、False は正しくないことを表します。72 >= 60 は「72は60以上か」なのでTrueです。
最初は「if文の中で特別なことが起きる」というより、この判定結果で進む道を変えると考えてみてください。
1. if文の基本を、1行ずつ読む
score = 72
if score >= 60:
print("合格です")
print("判定が終わりました")
合格です
判定が終わりました
動く順番は次のとおりです。
scoreに72を代入するscore >= 60を調べる- Trueなので、字下げされた行を実行する
- if文のまとまりを抜け、最後の表示へ進む
条件の後ろの : はコロンです。その下にある、半角スペース4個で字下げした行が「条件に合った場合の処理」です。字下げをインデントと呼びます。
score を40にすると「合格です」は表示されません。それでも「判定が終わりました」は表示されます。最後の行はif文の外にあるからです。
2. 比較の記号は、日本語に直して読もう
| 記号 | 意味 | 例 |
|---|---|---|
== |
等しい | score == 60 |
!= |
等しくない | score != 60 |
> |
より大きい | score > 60 |
< |
より小さい | score < 60 |
>= |
以上 | score >= 60 |
<= |
以下 | score <= 60 |
とくに、> と >= は境目で違います。60 > 60 はFalseですが、60 >= 60 はTrueです。
「60点以上」と決めたなら、60点ちょうども含めなければいけません。書いた後は59、60、61で確かめると、境目の間違いを見つけやすいですよ。
=と==は別物
score = 60 は代入。score == 60 は比較です。
if score = 60: と書くと、この書き方では文法エラーになります。「条件なのに等号が1個になっていないか」を確認してください。Python公式の比較の説明も参照できます。
3. elseを付けると、反対の場合も書ける
score = 48
if score >= 60:
print("合格です")
else:
print("もう一度確認しましょう")
もう一度確認しましょう
else は、前の条件に合わなかった場合の処理です。ここには新しい条件を書きません。
この一組のif・elseでは、どちらか一方だけが動きます。「両方の文章が出ることはある?」と迷ったら、条件の結果を先に1つ決めて、その道だけをたどると分かりやすいです。
なお、「60点で合格」はこの記事の練習用ルールです。学校や試験で実際に使う合格基準とは別です。
4. elifで、選択肢を3つ以上にする
80点以上なら「よくできました」、60点以上なら「合格」、それ以外なら「復習してみよう」に分けます。
score = 85
if score >= 80:
print("よくできました")
elif score >= 60:
print("合格です")
else:
print("復習してみよう")
よくできました
elif は「前の条件に合わなかったら、次の条件を調べる」という書き方です。
| score | 最初の >= 80 |
次の >= 60 |
結果 |
|---|---|---|---|
| 85 | True | 調べない | よくできました |
| 72 | False | True | 合格です |
| 48 | False | False | 復習してみよう |
85は60以上でもあります。でも、最初の条件に合った時点でこのif・elif・elseの一組は決まるので、「合格です」までは表示しません。if文の公式説明
順番を逆にすると、80点以上の処理へ届かない
if score >= 60: を先に置き、次を elif score >= 80: にすると、85は最初で判定が終わります。
「先に広い条件で拾ってしまっていないか」を確認しましょう。この例なら、より高い点数の条件から並べると意図した動作になります。どんな条件でも厳しい順が正解、という意味ではなく、先に判定したい条件から並べることが大切です。
5. ifを2つ書いた場合との違い
score = 85
if score >= 80:
print("よくできました")
if score >= 60:
print("合格です")
よくできました
合格です
こちらは独立したif文が2つです。1つ目の結果とは別に、2つ目も判定するので両方表示されます。
- 一つだけ選びたい:if・elif・elseを一組にする
- 条件ごとに別々の処理をしたい:独立したif文を使う
記号は似ているのに、処理のつながり方で結果が変わるんですね。もし予想より多く表示されたら、elif にしたい場所が if になっていないか見てみてください。
6. and・or・notで条件を組み合わせる
and:両方の条件を満たす
age = 19
has_ticket = True
if age >= 18 and has_ticket:
print("入場できます")
else:
print("入場条件を確認してください")
この記事の例では「18歳以上」「チケットを持っている」の両方が必要、という架空のイベントルールです。
has_ticket はTrueなので、そのまま条件として使えます。and でつなぐと、両方がTrueの場合だけ入場できます。
or:少なくとも一方を満たす
is_student = False
has_coupon = True
if is_student or has_coupon:
print("割引の対象です")
この例では「学生か、クーポンがある人」を対象にしています。両方Trueでも対象です。「どちらか一方だけで、両方はだめ」という意味ではありません。
not:条件を反対にする
is_closed = False
if not is_closed:
print("受付中です")
not False はTrueになります。「閉まっていないなら、受付中」という読み方です。
and と or を一緒に使う場合は、(is_student or has_coupon) and not is_closed のように括弧でまとまりを示すと、読む人にも条件が伝わりやすくなります。これらは左から必要な範囲だけを判定する性質もあります。公式のブール演算の説明
7. 入力値の範囲も確認しよう
score = int(input("0から100の点数: "))
if 0 <= score <= 100:
print("点数を受け取りました")
else:
print("0から100の範囲で入力してください")
0 <= score <= 100 は、0以上かつ100以下という意味です。Pythonでは、このように比較をつなげて書けます。
ただし、このコードが確認しているのは数に変換した後の範囲だけです。abc のような文字は int() で変換できず、if文へ進む前に止まります。
「文字を整数にできるか」と「整数が範囲内か」は別の確認です。前者への対応は第7回のエラー処理で扱います。
8. 練習:気温で表示を変えよう
気温を入力して、次のルールで表示を変えてください。これはif文の練習用の区切りで、暑さや寒さの感じ方を決める基準ではありません。
- 30度以上:「暑い」
- 15度以上、30度未満:「過ごしやすい」
- 15度未満:「寒い」
14.5のような小数も入力できるようにします。
模範解答
temperature = float(input("気温: "))
if temperature >= 30:
print("暑い")
elif temperature >= 15:
print("過ごしやすい")
else:
print("寒い")
解説:判定が重ならない理由
- 30以上を最初に調べます。該当すれば、その場で表示が決まります。
elifへ来た時点で、30未満であることは確認済みです。- そこで15以上なら「過ごしやすい」。残りは15未満なので「寒い」です。
elif に temperature < 30 を追加しなくてもよいのは、前の条件で30以上を除いているからです。
| 入力 | 予想する表示 |
|---|---|
| 14.5 | 寒い |
| 15 | 過ごしやすい |
| 29.9 | 過ごしやすい |
| 30 | 暑い |
1回動いたら終わりにせず、15と30の境目も試すと安心です。なお、数ではない文字が入った場合の対応は、この練習にはまだ含めていません。
まとめ:条件を読んでから、進む道をたどろう
if文が分かりにくくなったときは、条件を日本語へ言い換えます。そのうえで具体的な値を1つ決め、「TrueかFalseか」「次の条件を調べるか」を順に追ってください。
記号を覚えるだけでなく、境目の値を試すことまでできれば、条件分岐のミスを見つけやすくなります。
前の記事:Python超入門② 変数と入力