Python | 「ユーザーの入力(input)」と if / else を組み合わせた小さな実践アプリ

Python
スポンサーリンク

ここでは、「ループ+if+関数化」 で再利用しやすい構造にリファクタリングした
実践的な「成績判定アプリ(CSV保存付き)」を紹介します。


成績判定アプリ(関数化・ループ付き・CSV保存)

機能

  • 名前と点数をユーザー入力
  • 不正入力なら再入力を促す
  • 成績を自動判定
  • CSVに保存
  • 関数で処理を分け、再利用可能な構造

コード例

import csv

FILENAME = "scores.csv"

# -------------------------------
# 成績を判定する関数
# -------------------------------
def judge_grade(score):
    """点数から成績(A〜D)を返す"""
    if score >= 80:
        return "A"
    elif score >= 70:
        return "B"
    elif score >= 60:
        return "C"
    else:
        return "D"

# -------------------------------
# 入力処理を行う関数
# -------------------------------
def get_valid_score():
    """0〜100の点数を正しく入力させる"""
    while True:
        score_str = input("点数(0〜100): ")
        if score_str.isdigit():
            score = int(score_str)
            if 0 <= score <= 100:
                return score
        print("❌ 無効な入力です。0〜100の数値を入力してください。")

# -------------------------------
# CSVに保存する関数
# -------------------------------
def save_to_csv(name, score, grade):
    """結果をCSVファイルに追記"""
    with open(FILENAME, mode="a", newline="", encoding="utf-8") as f:
        writer = csv.writer(f)
        writer.writerow([name, score, grade])

# -------------------------------
# メイン処理
# -------------------------------
def main():
    print("=== 成績判定アプリ ===")
    print("名前と点数を入力してください('終了'で終了)")

    # 初回のみヘッダー行を書き込む
    with open(FILENAME, mode="a", newline="", encoding="utf-8") as f:
        writer = csv.writer(f)
        if f.tell() == 0:  # ファイルが空なら
            writer.writerow(["名前", "点数", "成績"])

    while True:
        name = input("名前: ")
        if name == "終了":
            print("入力を終了します。")
            break

        score = get_valid_score()  # バリデーション付き入力
        grade = judge_grade(score)  # 成績判定

        print(f"{name}さんの成績は「{grade}」です。\n")

        save_to_csv(name, score, grade)  # 結果を保存

    print(f"✅ 全ての結果を {FILENAME} に保存しました。")

# -------------------------------
# スクリプト実行部分
# -------------------------------
if __name__ == "__main__":
    main()
Python

関数化のポイント

関数名役割再利用の例
judge_grade(score)成績判定他のアプリでも同じロジックを使える(例:テスト管理ツール)
get_valid_score()入力+チェック複数科目の入力などにも使える
save_to_csv(name, score, grade)保存処理ログ保存・顧客管理などにも応用可能
main()全体の流れをまとめるメニュー制御などを追加して拡張できる

実行例

=== 成績判定アプリ ===
名前と点数を入力してください('終了'で終了)
名前: 田中
点数(0〜100): 85
田中さんの成績は「A」です。

名前: 鈴木
点数(0〜100): 72
鈴木さんの成績は「B」です。

名前: 終了
入力を終了します。
✅ 全ての結果を scores.csv に保存しました。

出力CSV内容

名前点数成績
田中85A
鈴木72B

発展課題(おすすめ)

  1. 複数科目対応版(国語・数学・英語をまとめて判定)
  2. 平均点・最高点の自動表示
  3. PySimpleGUI版(ウィンドウ入力+結果一覧)
  4. pandasで集計して分析グラフを出す
タイトルとURLをコピーしました