第5回:条件分岐(解答)#

※解答例はあくまで一例であり,他にも様々な解き方が考えられることに留意してください.

演習1:真偽値と条件式#

例題#

xy より小さい」を,比較演算子を用いて記述せよ. なお,変数 xy にはあらかじめ条件式が「True」となる適当な数値を代入しておくこと.

# 解答用セルの記入例
x = 1
y = 2

x < y
True

演習1-1#

xy より大きい」を,比較演算子を用いて記述せよ. なお,変数 xy にはあらかじめ条件式が「True」となる適当な数値を代入しておくこと.

# 解答例
x = 5
y = 3

x > y
True

演習1-2#

xy の2倍より大きい」を,比較演算子を用いて記述せよ. なお,変数 xy にはあらかじめ条件式が「True」となる適当な数値を代入しておくこと.

# 解答例
x = 15
y = 7
x > y * 2
True

演習1-3#

xy と等しくない」を,比較演算子を用いて記述せよ. なお,変数 xy にはあらかじめ条件式が「True」となる適当な数値を代入しておくこと.

# 解答例
x = 3
y = 1

x != y
True

演習1-4#

xy 以上である」を,比較演算子を用いて記述せよ. なお,変数 xy にはあらかじめ条件式が「True」となる適当な数値を代入しておくこと.

# 解答例
x = 5
y = 3

x >= y
True
# 解答例
x = 3
y = 5

x <= y
True

演習1-5#

「リスト [2, 4, 6, 8, 10] の中に 6 が含まれているか?」を比較演算子を用いて記述せよ.

出力例

True
# 解答例
6 in [2, 4, 6, 8, 10]
True

演習1-6#

「文字列 programming の長さが10文字以上か?」を,比較演算子を用いて記述せよ.

ヒント

文字列の長さを取得するには,どうすればよかったか思い出そう. 忘れた人は,前回の教材 を確認されたい.

出力例

True
# 解答例
len("programming") >= 10
True

演習2:if#

演習2-1#

変数 temperature の値が 30 以上の場合、「暑いです」と表示するプログラムを書け. なお,変数 temperature には適当な値を代入しておき,プログラムの実行結果も表示せよ.

# 解答例
temperature = 35

if temperature >= 30:
    print("暑いです")
暑いです

演習2-2#

文字列の変数 password の長さが8文字未満の場合、「パスワードが短すぎます」と表示するプログラムを書け. なお,変数 password には適当な値を代入しておき,プログラムの実行結果も表示せよ.

# 解答例
password = "abc123"

if len(password) < 8:
    print("パスワードが短すぎます")
パスワードが短すぎます

演習3:if ... else#

演習3-1#

変数 a の値が 3 で割り切れるときは「3で割り切れます」,そうでないときには「3で割り切れません」と表示するプログラムを作成せよ. なお,変数 a には適当な値を代入しておき,プログラムの実行結果も表示せよ.

ヒント

「割り切れる」を表現するためには,a3 で割った余りが 0 と等しくなればよい. 余りの計算方法は 第1回 または 第2回 の教材を参照されたい.

# 解答例
a = 15

if a % 3 == 0:
    print('3で割り切れます')
else:
    print('3で割り切れません')
3で割り切れます

演習3-2#

変数 score の値が 60 以上の場合は「合格」,そうでない場合は「不合格」と表示するプログラムを作成せよ. なお,変数 score には適当な値を代入しておき,プログラムの実行結果も表示せよ.

# 解答例
score = 75

if score >= 60:
    print("合格")
else:
    print("不合格")
合格

演習4:if ... elif ... else#

演習4-1#

参加者の年齢に応じて,適切な入場料金を表示するプログラムを考える. ここでは,3歳児以下は無料,15歳児以下は子供料金,そうでなければ大人料金となるとする.

年齢を表す変数 age の値が 3 以下であれば「入場料は無料です」,15 以下であれば「子供料金が必要です」,そうでなければ「大人料金が必要です」と表示するプログラムを作成せよ. なお,変数 age には任意の値を代入し,プログラムの実行結果も表示せよ.

# 解答例
age = 13

if age <= 3:
    print('入場料は無料です')
elif age <= 15:
    print('子供料金が必要です')
else:
    print('大人料金が必要です')
子供料金が必要です

演習4-2#

BMI(体格指数)に基づいて体型を判定するプログラムを作成せよ. BMIは体重(kg) / (身長(m)の2乗)で計算される. 判定基準は以下の通り:

  • 18.5未満:「痩せ型」

  • 18.5以上25未満:「普通体型」

  • 25以上:「肥満」

なお,変数 weight(体重)と height(身長)には適当な値を代入しておき,プログラムの実行結果も表示せよ.

# 解答例
weight = 70  # kg
height = 1.75  # m

bmi = weight / (height ** 2)

if bmi < 18.5:
    print("痩せ型")
elif bmi < 25:
    print("普通体型")
else:
    print("肥満")
普通体型

演習5:複数条件の組み合わせ#

演習5-1#

変数 x の値が「0でなく」かつ「2で割り切れる」場合のみ「条件に合致します」と表示し,そうでない場合に「条件に合致しません」と表示するプログラムを作成せよ. なお,変数 x には適当な値を代入しておき,プログラムの実行結果も表示せよ.

# 解答例
x = 2

if x != 0 and x % 2 == 0:
    print('条件に合致します')
else:
    print('条件に合致しません')
条件に合致します

演習5-2#

変数 day に格納された曜日(文字列)が平日( "Monday" から "Friday")であれば「仕事です」, "Saturday""Sunday" であれば「休日です」と表示するプログラムを作成せよ.

なお,変数 day には適当な曜日(文字列)を代入しておき,プログラムの実行結果も表示せよ.

day = "Saturday"

if day in ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]:
    print("仕事です")
elif day in ["Saturday", "Sunday"]:
    print("休日です")
休日です

演習6:発展課題#

これ以降は発展的な演習課題となります. 解くことは必須ではありませんが,条件分岐を応用する良い練習になるので,ぜひチャレンジしてみてください.

演習6-1:FizzBuzz問題#

変数 number の値に対し,次のことを出力せよ.

  • 3 で割り切れて 5 で割り切れないときは「Fizz」と出力

  • 5 で割り切れて 3 で割り切れない時は「Buzz」と出力

  • 両方で割り切れるときは「FizzBuzz」と出力

  • 両方で割り切れないときは,入力した数をそのまま出力

なお,変数 number には適当な値を代入し,プログラムの実行結果も表示せよ.

# 解答例①
# 上記の要件をそのままプログラムに落とし込むと以下のようになる(ただしやや冗長な書き方である).
number = 15

if number % 3 == 0 and number % 5 != 0:
    print('Fizz')
elif number % 5 == 0 and number % 3 != 0:
    print('Buzz')
elif number % 5 == 0 and number % 3 == 0:
    print('FizzBuzz')
else:
    print(number)
FizzBuzz
# 解答例②
# もう少しコンパクトに書いた場合.条件式は上から順番に判定されることを利用している.
number = 15

if number % 3 == 0 and number % 5 == 0:
    print('FizzBuzz')
elif number % 3 == 0:
    print('Fizz')
elif number % 5 == 0:
    print('Buzz')
else:
    print(number) 
FizzBuzz

演習6-2:3の倍数と3のつく数#

変数 number の値に対し,3の倍数と3のつく数の時だけ「3に関する数です」と出力するプログラムを作成せよ.なお,変数 number には適当な値を代入し,プログラムの実行結果も表示せよ.

# 解答例
number = 13

if (number % 3 == 0) or ('3' in str(number)):
    print('3に関する値です')
3に関する値です

解答の解説

おそらく躓きやすいポイントとしては,「3のつく数かどうか」を条件式としてどのように表現するか,であろう.

上記の解答例では,第4回で学んだ 文字列に対するin を用いて,「number の中に 3 が含まれているか?」を条件式として表現している. ただし,変数 number には数値が格納されているため,str() を用いて文字列型に変換している(str() の復習は こちら).

例えば number = 13 の場合,「文字列 '13' の中に文字 '3' が含まれているか?」という条件式を考えていることになる.

演習6-3:簡易電卓#

二つの数値 ab と,演算子 operator+, -, *, / のいずれか)を入力として受け取り, 指定された演算を行う簡易電卓プログラムを作成せよ. ただし,0での除算の場合は「0で割ることはできません」と表示すること.

なお,変数 aboperator には適当な値を代入しておき,プログラムの実行結果も表示せよ.

# 解答例
a = 10
b = 2
operator = "/"

if operator == "+":
    result = a + b
elif operator == "-":
    result = a - b
elif operator == "*":
    result = a * b
elif operator == "/":
    if b != 0:
        result = a / b
    else:
        print("0で割ることはできません")
        result = None
else:
    print("無効な演算子です")
    result = None

if result is not None:
    print(f"{a} {operator} {b} = {result}")
10 / 2 = 5.0