プログラミング

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("判定が終わりました")
合格です
判定が終わりました

動く順番は次のとおりです。

  1. score に72を代入する
  2. score >= 60 を調べる
  3. Trueなので、字下げされた行を実行する
  4. 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("寒い")

解説:判定が重ならない理由

  1. 30以上を最初に調べます。該当すれば、その場で表示が決まります。
  2. elif へ来た時点で、30未満であることは確認済みです。
  3. そこで15以上なら「過ごしやすい」。残りは15未満なので「寒い」です。

elif に temperature < 30 を追加しなくてもよいのは、前の条件で30以上を除いているからです。

入力 予想する表示
14.5 寒い
15 過ごしやすい
29.9 過ごしやすい
30 暑い

1回動いたら終わりにせず、15と30の境目も試すと安心です。なお、数ではない文字が入った場合の対応は、この練習にはまだ含めていません。

まとめ:条件を読んでから、進む道をたどろう

if文が分かりにくくなったときは、条件を日本語へ言い換えます。そのうえで具体的な値を1つ決め、「TrueかFalseか」「次の条件を調べるか」を順に追ってください。

記号を覚えるだけでなく、境目の値を試すことまでできれば、条件分岐のミスを見つけやすくなります。

前の記事:Python超入門② 変数と入力

次の記事:Python超入門④ while文とfor文

← 記事一覧へ戻る