【Python演習】中級:在庫管理ツール|辞書とループの実践

中級演習:成績管理ツール

リスト・辞書・関数を組み合わせて、学生の成績を管理・集計する「成績管理ツール」を作ります。

📝 問題

以下の仕様を満たすプログラムを作成してください。

  • 学生のデータを辞書のリストとして定義する(名前・各科目の点数)
  • 各学生の 平均点 を計算する
  • 平均点に応じて 成績ランク(S/A/B/C)を付ける
  • 全学生の成績を 一覧表 として出力する
  • どの学生が最高点か、全体の平均点も表示する

ランク基準: S(90点以上)、A(80点以上)、B(70点以上)、C(70点未満)

💡 ヒント

  • 成績データは [{"name": "田中", "scores": {"国語": 82, "数学": 91, ...}}, ...] で定義できます
  • 辞書の値の合計は sum(sc.values())、件数は len(sc) で求められます
  • ランク判定は if avg >= 90: return "S" のようなif-elif関数で書けます
  • 最高平均点の学生は max(students, key=lambda s: s["avg"]) で取り出せます

✅ 回答例

students = [
    {"name": "田中", "scores": {"国語": 82, "数学": 91, "英語": 78}},
    {"name": "鈴木", "scores": {"国語": 95, "数学": 67, "英語": 88}},
    {"name": "佐藤", "scores": {"国語": 73, "数学": 85, "英語": 92}},
    {"name": "高橋", "scores": {"国語": 61, "数学": 72, "英語": 65}},
]

def get_rank(avg):
    if avg >= 90:   return "S"
    elif avg >= 80: return "A"
    elif avg >= 70: return "B"
    else:           return "C"

# 各学生の平均を計算して追加
for s in students:
    sc       = s["scores"]
    s["avg"] = sum(sc.values()) / len(sc)
    s["rank"] = get_rank(s["avg"])

# 一覧表を出力
print(f"{'名前':<6} {'国語':>4} {'数学':>4} {'英語':>4} {'平均':>6} {'ランク':>5}")
print("-" * 35)
for s in students:
    sc = s["scores"]
    print(f"{s['name']:<6} {sc['国語']:>4} {sc['数学']:>4} {sc['英語']:>4} {s['avg']:>6.1f} {s['rank']:>5}")

# 全体集計
all_avgs = [s["avg"] for s in students]
top      = max(students, key=lambda s: s["avg"])
print("-" * 35)
print(f"全体平均:{sum(all_avgs)/len(all_avgs):.1f}点")
print(f"最高評価:{top['name']} さん(平均 {top['avg']:.1f}点 / {top['rank']}ランク)")
▶ 出力結果

名前   国語  数学  英語    平均  ランク
-----------------------------------
田中     82    91    78   83.7     A
鈴木     95    67    88   83.3     A
佐藤     73    85    92   83.3     A
高橋     61    72    65   66.0     C
-----------------------------------
全体平均:79.1点
最高評価:田中 さん(平均 83.7点 / Aランク)

🔍 解説ポイント

  • 各学生の辞書に avgrank キーを後から追加することでデータを拡張している
  • max(students, key=lambda s: s["avg"]) でリスト内の辞書を比較して最大値を取り出している
  • f"{name:<6}"f"{score:>4}" で列の幅を揃えて表形式にしている
< 前の記事初級演習:お買い物計算機
次の記事 >上級演習:RPGの戦闘シミュレータ

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール