メインコンテンツへスキップ
Lesson6 / 6

演習:条件分岐の総合問題

目次

1. このレッスンで学ぶこと

  • モジュール4で学んだ条件分岐の総合復習
  • if, if-else, if-elif-elseの使い分け
  • 実践的な条件判定プログラムの作成
  • 複雑な条件を扱うスキル

2. なぜ演習が必要なのか?

条件分岐はプログラミングの基本中の基本です。実際に手を動かして、様々なパターンを実装することで、理解が深まります。

このレッスンでは、以下のトピックを総合的に復習します:

  • if文の基本
  • if-else文
  • if-elif-else文
  • ネストした条件分岐
  • 条件式の書き方のコツ

💡 豆知識: プログラミングの上達には「反復練習」が重要です。同じような問題を何度も解くことで、パターンが身につき、自然とコードが書けるようになります。


3. 基礎演習

演習1: 年齢判定 ⭐☆☆

年齢が18歳以上なら「成人」、それ以外なら「未成年」と表示してください。

💡 ヒント

if-elseを使います。

✅ 解答例
Python
age = 17

if age >= 18:
    print("成人")
else:
    print("未成年")

実行結果:

未成年

演習2: 点数評価 ⭐☆☆

点数に応じて評価を表示してください:

  • 80点以上: 優
  • 60点以上: 良
  • それ以外: 不可
💡 ヒント

if-elif-elseを使います。

✅ 解答例
Python
score = 75

if score >= 80:
    print("優")
elif score >= 60:
    print("良")
else:
    print("不可")

実行結果:


演習3: 偶数奇数判定 ⭐☆☆

数値が偶数なら「偶数」、奇数なら「奇数」と表示してください。

💡 ヒント

% 2の結果で判定します。

✅ 解答例
Python
number = 7

if number % 2 == 0:
    print("偶数")
else:
    print("奇数")

実行結果:

奇数

4. 中級演習

演習4: BMI判定 ⭐⭐☆

体重と身長からBMIを計算し、判定してください:

  • 18.5未満: 低体重
  • 18.5以上25未満: 普通体重
  • 25以上30未満: 肥満(1度)
  • 30以上: 肥満(2度以上)
💡 ヒント

BMI = 体重 / (身長の2乗)

✅ 解答例
Python
weight = 65  # kg
height = 1.7  # m

bmi = weight / height ** 2

print(f"BMI: {bmi:.1f}")

if bmi < 18.5:
    print("低体重")
elif bmi < 25:
    print("普通体重")
elif bmi < 30:
    print("肥満(1度)")
else:
    print("肥満(2度以上)")

実行結果:

BMI: 22.5
普通体重

演習5: うるう年の判定 ⭐⭐☆

年が以下の条件を満たすときうるう年です:

  • 4で割り切れる年はうるう年
  • ただし、100で割り切れる年はうるう年ではない
  • ただし、400で割り切れる年はうるう年
💡 ヒント

ネストした条件分岐を使います。

✅ 解答例
Python
year = 2024

if year % 400 == 0:
    print(f"{year}年はうるう年です")
elif year % 100 == 0:
    print(f"{year}年はうるう年ではありません")
elif year % 4 == 0:
    print(f"{year}年はうるう年です")
else:
    print(f"{year}年はうるう年ではありません")

実行結果:

2024年はうるう年です

演習6: じゃんけんの判定 ⭐⭐☆

プレイヤーとコンピュータの手から勝敗を判定してください。

💡 ヒント

まず引き分けをチェック、次に勝ちパターンをチェックします。

✅ 解答例
Python
player = "グー"
computer = "チョキ"

print(f"あなた: {player}")
print(f"コンピュータ: {computer}")

if player == computer:
    result = "引き分け"
elif (player == "グー" and computer == "チョキ") or \
     (player == "チョキ" and computer == "パー") or \
     (player == "パー" and computer == "グー"):
    result = "あなたの勝ち"
else:
    result = "あなたの負け"

print(f"結果: {result}")

実行結果:

あなた: グー
コンピュータ: チョキ
結果: あなたの勝ち

5. 応用演習

演習7: 映画館の料金計算 ⭐⭐⭐

年齢と曜日に応じた料金を計算してください:

平日:

  • 12歳以下: 1000円
  • 13〜17歳: 1500円
  • 18〜64歳: 1800円
  • 65歳以上: 1200円

休日:

  • 12歳以下: 1200円
  • 13〜17歳: 1800円
  • 18〜64歳: 2000円
  • 65歳以上: 1400円
💡 ヒント

まず平日/休日で分岐し、その中で年齢で分岐します。

✅ 解答例
Python
age = 15
is_weekend = False

if is_weekend:
    # 休日料金
    if age <= 12:
        price = 1200
    elif age <= 17:
        price = 1800
    elif age <= 64:
        price = 2000
    else:
        price = 1400
    day_type = "休日"
else:
    # 平日料金
    if age <= 12:
        price = 1000
    elif age <= 17:
        price = 1500
    elif age <= 64:
        price = 1800
    else:
        price = 1200
    day_type = "平日"

print(f"年齢: {age}歳")
print(f"曜日: {day_type}")
print(f"料金: {price}円")

実行結果:

年齢: 15歳
曜日: 平日
料金: 1500円

演習8: 税金計算システム ⭐⭐⭐

所得金額に応じて所得税を計算してください:

  • 195万円以下: 5%
  • 195万円超〜330万円以下: 10%
  • 330万円超〜695万円以下: 20%
  • 695万円超: 30%
💡 ヒント

if-elif-elseで金額範囲を判定します。

✅ 解答例
Python
income = 4000000  # 400万円

if income <= 1950000:
    tax_rate = 0.05
    bracket = "第1区分"
elif income <= 3300000:
    tax_rate = 0.10
    bracket = "第2区分"
elif income <= 6950000:
    tax_rate = 0.20
    bracket = "第3区分"
else:
    tax_rate = 0.30
    bracket = "第4区分"

tax = int(income * tax_rate)

print(f"所得金額: {income:,}円")
print(f"税率区分: {bracket} ({tax_rate * 100}%)")
print(f"所得税額: {tax:,}円")

実行結果:

所得金額: 4,000,000円
税率区分: 第3区分 (20.0%)
所得税額: 800,000円

演習9: パスワード強度チェック ⭐⭐⭐

パスワードの強度を判定してください:

  • 8文字未満: 弱い
  • 8文字以上で数字を含む: 中
  • 12文字以上で数字と大文字を含む: 強い
💡 ヒント

any()と文字列メソッドを使います。

✅ 解答例
Python
password = "MyPass123"

length = len(password)
has_digit = any(c.isdigit() for c in password)
has_upper = any(c.isupper() for c in password)

print(f"パスワード: {password}")
print(f"文字数: {length}")
print(f"数字を含む: {has_digit}")
print(f"大文字を含む: {has_upper}")

if length < 8:
    strength = "弱い"
elif length >= 12 and has_digit and has_upper:
    strength = "強い"
elif length >= 8 and has_digit:
    strength = "中"
else:
    strength = "弱い"

print(f"強度: {strength}")

実行結果:

パスワード: MyPass123
文字数: 9
数字を含む: True
大文字を含む: True
強度: 中

演習10: 総合判定システム ⭐⭐⭐

学生の総合評価を行ってください。以下の条件で判定:

  • 筆記試験: 60点以上必要
  • 実技試験: 70点以上必要
  • 出席率: 80%以上必要
  • すべて満たすと合格
  • 1つでも満たさないと不合格(理由を表示)
💡 ヒント

各条件を変数に分けて判定します。

✅ 解答例
Python
written_test = 75
practical_test = 68
attendance = 0.85

print("=== 試験結果 ===")
print(f"筆記試験: {written_test}点")
print(f"実技試験: {practical_test}点")
print(f"出席率: {attendance * 100}%")

# 各条件のチェック
written_pass = written_test >= 60
practical_pass = practical_test >= 70
attendance_pass = attendance >= 0.8

# 総合判定
if written_pass and practical_pass and attendance_pass:
    print("\n結果: 合格")
else:
    print("\n結果: 不合格")
    print("不合格理由:")

    if not written_pass:
        print(f"  - 筆記試験が基準未達({written_test}点/60点以上必要)")
    if not practical_pass:
        print(f"  - 実技試験が基準未達({practical_test}点/70点以上必要)")
    if not attendance_pass:
        print(f"  - 出席率が基準未達({attendance * 100}%/80%以上必要)")

実行結果:

=== 試験結果 ===
筆記試験: 75点
実技試験: 68点
出席率: 85.0%

結果: 不合格
不合格理由:
  - 実技試験が基準未達(68点/70点以上必要)

6. まとめ

このレッスンでは、条件分岐の基礎を演習で統合して確認しました。

  • if、if-else、if-elif-else、ネストを使い分けて問題を解く力を確認しました。
  • 条件式の設計と分岐順序が、実行結果に直結することを実践できました。
  • 境界値を意識した判定を行い、分岐の漏れを防ぐ手順を学びました。
  • 実装後に出力を確認し、条件を調整する流れを身につけました。
  • 小さな判定を積み重ねて要件を満たす設計力を強化できました。