メインコンテンツへスキップ
Lesson5 / 5

演習:演算子を使った計算プログラム

目次

このレッスンで学ぶこと

  • モジュール3で学んだ演算子の総合復習
  • 実践的な計算プログラムの作成
  • 算術・比較・論理演算子の組み合わせ
  • 複合代入演算子を活用したコード

なぜ演習が必要なのか?

演算子は、プログラミングの基礎中の基礎です。実際に手を動かして、様々な演算子を組み合わせることで、理解が深まります。

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

  • 算術演算子(+, -, *, /, //, %, **)
  • 比較演算子(==, !=, <, >, <=, >=)
  • 論理演算子(and, or, not)
  • 複合代入演算子(+=, -=, *=, /=など)

💡 豆知識: プログラマーの上達には「Write Code Every Day(毎日コードを書く)」という言葉があります。小さな演習でも、毎日続けることで確実にスキルが向上します。


基礎演習

演習1: 四則演算の計算機 ⭐☆☆

2つの数値に対して、四則演算(加減乗除)の結果を全て表示してください。

💡 ヒント

+, -, *, / を使います。

✅ 解答例
Python
a = 15
b = 4

print(f"{a} + {b} = {a + b}")
print(f"{a} - {b} = {a - b}")
print(f"{a} × {b} = {a * b}")
print(f"{a} ÷ {b} = {a / b}")
print(f"{a} ÷ {b} = {a // b} 余り {a % b}")

実行結果:

15 + 4 = 19
15 - 4 = 11
15 × 4 = 60
15 ÷ 4 = 3.75
15 ÷ 4 = 3 余り 3

演習2: 偶数・奇数の判定 ⭐☆☆

数値が偶数か奇数かを判定してください。

💡 ヒント

% 2 の結果が0なら偶数、1なら奇数です。

✅ 解答例
Python
number = 17

if number % 2 == 0:
    print(f"{number}は偶数です")
else:
    print(f"{number}は奇数です")

実行結果:

17は奇数です

解説: 2で割った余りが0なら偶数、そうでなければ奇数です。


演習3: 範囲チェック ⭐⭐☆

点数が0〜100の範囲内にあるか確認し、範囲内なら評価(A〜F)を表示してください。

💡 ヒント
  • 範囲チェック: 0 <= score <= 100
  • 評価: if-elif-else
✅ 解答例
Python
score = 85

# 範囲チェック
if not (0 <= score <= 100):
    print("無効な点数です")
else:
    # 評価
    if score >= 90:
        grade = "A"
    elif score >= 80:
        grade = "B"
    elif score >= 70:
        grade = "C"
    elif score >= 60:
        grade = "D"
    else:
        grade = "F"

    print(f"点数: {score}, 評価: {grade}")

実行結果:

点数: 85, 評価: B

中級演習

演習4: 割引価格の計算 ⭐⭐☆

商品の価格と割引率から、割引後の価格を計算してください。

仕様:

  • 価格: 5000円
  • 割引率: 30%
💡 ヒント

割引後 = 価格 × (1 - 割引率)

✅ 解答例
Python
price = 5000
discount_rate = 0.3  # 30%

# 割引額
discount_amount = price * discount_rate

# 割引後の価格
final_price = price - discount_amount

# または
final_price2 = price * (1 - discount_rate)

print(f"元の価格: {price}円")
print(f"割引率: {discount_rate * 100}%")
print(f"割引額: {int(discount_amount)}円")
print(f"割引後: {int(final_price)}円")

実行結果:

元の価格: 5000円
割引率: 30.0%
割引額: 1500円
割引後: 3500円

演習5: 時間の変換 ⭐⭐☆

秒数を「時:分:秒」の形式に変換してください。

仕様:

  • 秒数: 3665秒
💡 ヒント
  • 時 = 秒 // 3600
  • 分 = (秒 % 3600) // 60
  • 秒 = 秒 % 60
✅ 解答例
Python
total_seconds = 3665

# 時間
hours = total_seconds // 3600

# 分
remaining_seconds = total_seconds % 3600
minutes = remaining_seconds // 60

# 秒
seconds = remaining_seconds % 60

print(f"{total_seconds}秒 = {hours}時間{minutes}{seconds}秒")

実行結果:

3665秒 = 1時間1分5秒

演習6: 三角形の面積 ⭐⭐☆

三角形の底辺と高さから面積を計算してください。

仕様:

  • 底辺: 10cm
  • 高さ: 8cm
  • 面積 = 底辺 × 高さ ÷ 2
💡 ヒント

*/ を組み合わせます。

✅ 解答例
Python
base = 10  # 底辺
height = 8  # 高さ

# 面積 = 底辺 × 高さ ÷ 2
area = base * height / 2

print(f"底辺: {base}cm")
print(f"高さ: {height}cm")
print(f"面積: {area}cm²")

実行結果:

底辺: 10cm
高さ: 8cm
面積: 40.0cm²

応用演習

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

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

仕様:

  • 平日: 大人1800円、子供(12歳以下)1000円、シニア(65歳以上)1200円
  • 休日: 大人2000円、子供1200円、シニア1400円
💡 ヒント
  • 論理演算子で条件を組み合わせる
  • 年齢と曜日の両方をチェック
✅ 解答例
Python
age = 10
is_weekend = False  # 平日

# 料金設定
if is_weekend:
    # 休日料金
    if age <= 12:
        price = 1200
        category = "子供(休日)"
    elif age >= 65:
        price = 1400
        category = "シニア(休日)"
    else:
        price = 2000
        category = "大人(休日)"
else:
    # 平日料金
    if age <= 12:
        price = 1000
        category = "子供(平日)"
    elif age >= 65:
        price = 1200
        category = "シニア(平日)"
    else:
        price = 1800
        category = "大人(平日)"

print(f"年齢: {age}歳")
print(f"料金区分: {category}")
print(f"料金: {price}円")

実行結果:

年齢: 10歳
料金区分: 子供(平日)
料金: 1000円

演習8: ポイント計算システム ⭐⭐⭐

購入金額に応じてポイントを計算してください。

仕様:

  • 1000円未満: ポイントなし
  • 1000円以上5000円未満: 1%
  • 5000円以上10000円未満: 3%
  • 10000円以上: 5%
💡 ヒント

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

✅ 解答例
Python
purchase_amount = 7500

# ポイント率の決定
if purchase_amount < 1000:
    point_rate = 0
elif purchase_amount < 5000:
    point_rate = 0.01
elif purchase_amount < 10000:
    point_rate = 0.03
else:
    point_rate = 0.05

# ポイント計算
points = int(purchase_amount * point_rate)

print(f"購入金額: {purchase_amount}円")
print(f"ポイント率: {point_rate * 100}%")
print(f"獲得ポイント: {points}ポイント")

実行結果:

購入金額: 7500円
ポイント率: 3.0%
獲得ポイント: 225ポイント

演習9: 合格判定システム ⭐⭐⭐

複数の条件で合格判定を行ってください。

仕様:

  • 筆記試験: 60点以上
  • 実技試験: 70点以上
  • 出席率: 80%以上
  • すべての条件を満たすと合格
💡 ヒント

and で複数条件を組み合わせます。

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

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

# 総合判定
is_pass = written_pass and practical_pass and attendance_pass

print("=== 試験結果 ===")
print(f"筆記試験: {written_test}{'✓' if written_pass else '✗'}")
print(f"実技試験: {practical_test}{'✓' if practical_pass else '✗'}")
print(f"出席率: {attendance * 100}% {'✓' if attendance_pass else '✗'}")
print()
print(f"結果: {'合格' if is_pass else '不合格'}")

# 不合格の場合、理由を表示
if not is_pass:
    print("\n不合格理由:")
    if not written_pass:
        print("  - 筆記試験が60点未満")
    if not practical_pass:
        print("  - 実技試験が70点未満")
    if not attendance_pass:
        print("  - 出席率が80%未満")

実行結果:

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

結果: 合格

演習10: RPGのダメージ計算 ⭐⭐⭐

RPGゲームのダメージ計算システムを作成してください。

仕様:

  • 基本攻撃力: 50
  • クリティカル発生: はい/いいえ(クリティカルなら1.5倍)
  • 相手の防御力: 20
  • ダメージ = (攻撃力 - 防御力) × クリティカル倍率
💡 ヒント

条件によって倍率を変えます。

✅ 解答例
Python
attack_power = 50
defense = 20
is_critical = True

# クリティカル倍率
if is_critical:
    critical_multiplier = 1.5
    critical_text = "クリティカル!"
else:
    critical_multiplier = 1.0
    critical_text = "通常攻撃"

# 基本ダメージ
base_damage = attack_power - defense

# 最終ダメージ
final_damage = int(base_damage * critical_multiplier)

# ダメージは最低1
if final_damage < 1:
    final_damage = 1

print("=== 戦闘ログ ===")
print(f"攻撃力: {attack_power}")
print(f"相手の防御力: {defense}")
print(f"基本ダメージ: {base_damage}")
print(f"{critical_text}")
print(f"最終ダメージ: {final_damage}")

実行結果:

=== 戦闘ログ ===
攻撃力: 50
相手の防御力: 20
基本ダメージ: 30
クリティカル!
最終ダメージ: 45

実践問題

演習11: 総合計算プログラム ⭐⭐⭐

以下の機能を持つ計算プログラムを作成してください。

仕様:

  1. 商品リスト(辞書のリスト):
    Python
    [
        {"name": "りんご", "price": 150, "quantity": 5},
        {"name": "みかん", "price": 100, "quantity": 8},
        {"name": "バナナ", "price": 200, "quantity": 3}
    ]
  2. 以下を計算・表示:
    • 各商品の小計
    • 合計金額
    • 1000円以上なら5%割引を適用
    • 消費税(10%)を加算
    • 最終金額
💡 ヒント
  • ループで各商品を処理
  • 複合代入演算子で合計を計算
  • 条件によって割引を適用
✅ 解答例
Python
# 商品リスト
items = [
    {"name": "りんご", "price": 150, "quantity": 5},
    {"name": "みかん", "price": 100, "quantity": 8},
    {"name": "バナナ", "price": 200, "quantity": 3}
]

print("=== お会計 ===")

# 合計金額
total = 0

# 各商品の小計
for item in items:
    subtotal = item["price"] * item["quantity"]
    total += subtotal
    print(f"{item['name']}: {item['price']}円 × {item['quantity']}個 = {subtotal}円")

print(f"\n小計: {total}円")

# 割引判定
if total >= 1000:
    discount = int(total * 0.05)
    total -= discount
    print(f"割引(5%): -{discount}円")
    print(f"割引後: {total}円")

# 消費税
tax = int(total * 0.1)
total += tax

print(f"消費税(10%): {tax}円")
print(f"\n合計: {total}円")

実行結果:

=== お会計 ===
りんご: 150円 × 5個 = 750円
みかん: 100円 × 8個 = 800円
バナナ: 200円 × 3個 = 600円

小計: 2150円
割引(5%): -107円
割引後: 2043円
消費税(10%): 204円

合計: 2247円

まとめ

このレッスンでは、モジュール3で学んだ演算子を演習で統合して確認しました。

  • 算術・比較・論理・複合代入の各演算子を、問題ごとに使い分ける力を確認しました。
  • 計算処理と条件判定を組み合わせて、要件に沿った結果を出力できるようになりました。
  • 実装時に値を段階的に更新し、可読性を保ちながら処理を組み立てる練習ができました。
  • エラー時に中間結果や型を確認して原因を特定する、基本的なデバッグ手順を実践しました。
  • 小さな仕様を分解し、順番に実装して検証する進め方を身につけました。