条件分岐を使ってみよう

条件分岐とは?

条件によってプログラム上の処理を変化させるような処理のことを条件分岐と呼びます。例えば年齢が18歳未満の場合と以上の場合で処理を分ける場合について考えてみます。

  • 年齢が18歳未満の場合、メッセージ「購入できません」を出力する

このような条件分岐をPythonで書いてみましょう。1行目でキーボードから入力した値をinput_valに格納し、2行目で数値に変換してageに格納しています。

input_val = input("年齢 = ")
age = int(input_val)
if age < 18:
    print("購入できません")

input_valの値を色々変更して実行してみてください。

上のコードの通りPythonで条件分岐をする場合、以下のようなif文という文を使用します。

if 条件式:
    条件式が真の場合に実行する処理

条件式とは、ずばりそのまま条件を表す式です。いくつか数値での例を見てみましょう。xは数値を格納した変数とします。

意味
x == 10 xは10と等しい
x != 10 xは10と等しくない
x < 10 xは10より小さい
x > 10 xは10より大きい
x >= 10 xは10以上
10 <= x < 20 xは10以上20未満

2022/02 上表にて「x != 10」の説明が「xは10と等しい」となっておりましたが誤りです。「xは10と等しくない」となります。ご指摘くださった方ありがとうございます。

いかがでしょうか?数学で学んだ不等式とほとんど同じなのでなんとなくわかるのではないでしょうか。ただし大なりイコール、小なりイコールの場合は半角のイコールと合わせて<=、>=と書きます。このように等しいか、大きいかなど変数や値を比較する演算を比較演算と呼びます。

if文の中はスペース4つ分インデントをつけます。この、インデントを付けられた箇所を「ブロック」と呼びます。if文等のブロックは入れ子にすることが可能です。入れ子の例については末尾の演習で紹介します。また、分岐を終える場合はインデントを戻します。

もう少し練習してみましょう。

例題1

先程のコードを真似して入力した値がが20より大きい場合、「入力した値は20より大きいです」というメッセージを出すプログラムを作成してください。また、処理の最後に「処理が終了しました。」というメッセージを表示させてください。

解答例

input_val = input("x = ")
x = int(input_val)
if x > 20:
    print("入力した値は20より大きいです")

print("処理が終了しました。")

例題2

先程のコードを値が100と等しい場合「入力した値は100と等しいです」というメッセージを出すプログラムに書き直してみてください。

解答例

input_val = input("x = ")
x = int(input_val)
if x == 100:
    print("入力した値は100と等しいです")

print("処理が終了しました。")

コメントを付けてみよう

さて、ここで大変重要な用語を解説します。それは「コメント」です。コメントとは、プログラム上に記述することができる注釈で、実行しても処理に影響しないものを指します。また、ブロック内のコメントはインデントをつける必要があります。

Pythonのコメントは#を使用します。以下は最初のコードに対してコメントを付けた例となります。

# キーボードから年齢を入力
input_val = input("年齢 = ")

# intに変換
age = int(input_val)

# ageが18より小さい場合はメッセージを表示する
if age < 18:
    # メッセージ表示
    print("購入できません")

分岐や今後説明するループ処理、関数などが増えると読み手にコードの意図を正しく伝える必要が出てきますが、その際にコメントを活用するようにしてください。

複数の条件分岐を使ってみよう

elseを使用すると、if文の条件に合致しない場合の処理を行うことができます。例えば、18歳未満は500円、それ以外1000円といった料金計算をするプログラムを組んでみましょう。以下のようなコードが考えられます。

# キーボードから年齢を入力
input_val = input("年齢 = ")

# intに変換
age = int(input_val)

if age < 18:
    price = 500
else:
    price = 1000

print("値段:", price)

また、elif(英語のelse ifの略)を使用すると複数並べることも可能です。例えば、先程のコードについて、18歳未満は500円、18歳以上65歳未満は1000円、それ以外は700円というように条件を変えてみます。

# キーボードから年齢を入力
input_val = input("年齢 = ")

# intに変換
age = int(input_val)

if age < 18:
    price = 500
elif 18 <= age < 65:
    price = 1000
else:
    price = 700

print("値段:", price)

演習

演習問題

会員かどうかと年齢を入力させ、以下の料金計算をするプログラムを作成してください。また、適宜コメントを記入してください。

  • 会員の場合

    • 18歳未満:100円
    • 18歳以上:1000円
  • 非会員の場合

    • 18歳未満:1000円
    • 18歳以上:2000円

解答例

前述のとおり、if文などのブロックは入れ子にすることができます。解答例ではif文が入れ子になっています。

# 会員を入力
input_kaiin = input("会員の場合はYを入力してください。>>:")

# 年齢を入力
input_age = input("年齢を数字で入力してください。>>")

# 年齢の入力値を整数に変換
age = int(input_age)

# 会員/非会員で処理分岐
if input_kaiin == "Y":
    # 会員の場合

    # 年齢で処理分岐
    if age < 18:
        # 18歳未満の場合
        price = 100
    else:
        # それ以外の場合
        price = 1000

else:
    # 会員以外の場合

    # 年齢で処理分岐
    if age < 18:
        # 18歳未満の場合
        price = 1000
    else:
        # それ以外の場合
        price = 2000

print("値段:", price)