Python | レベル別練習問題:変数 × 型(int / float / str)2

Python
スポンサーリンク

以下に、Q1〜Q50すべての練習問題を自動採点できるPythonファイル(ローカル実行用)を生成します。


📘 ファイル名例

variable_quiz_autograder.py

この1ファイルを保存して、

python variable_quiz_autograder.py

を実行すれば、各問題の正誤が一覧で出力されます ✅


# ============================================
# 🧩 Python 変数 × 型 練習問題(Q1〜Q50)
# 自動採点スクリプト付き
# ============================================
# 実行方法: python variable_quiz_autograder.py
# ============================================

from typing import Union

# 各問題を関数化しておく(学習用の空欄も埋めやすい)
# --------------------------------------------
# Q1〜Q30 は基礎〜中級
# Q31〜Q50 は応用・例外処理・型ヒント対応

# ============================================
# 解答エリア(ユーザーが書き換える部分)
# ============================================

def q1():
    a = 10
    b = 5
    return a + b

def q2():
    x = 10
    x = x + 5
    return x

def q3():
    name = "Taro"
    return f"Hello, {name}"

def q4():
    price = 120
    count = 3
    return price * count

def q5():
    a, b = 5, 10
    a, b = b, a
    return (a, b)

def q6():
    s = "100"
    return int(s) + 50

def q7():
    a = 2
    b = 3.5
    return a * b

def q8():
    text = "Python"
    return text.upper()

def q9():
    a = 10
    return f"値は{a}です"

def q10():
    price = 100
    tax = 0.1
    return int(price * (1 + tax))

# ...(Q11〜Q30 は省略・同様の形式で書けます)

# ---- 応用・例外処理・型ヒント対応 (Q31〜Q50) ----

def q31():
    a = "10"
    b = 5
    result = int(a) + b
    return result

def q32():
    price = 100
    return "価格は" + str(price) + "円です"

def q33(x: str, y: str) -> int:
    return int(x) + int(y)

def q34():
    total = 0.0
    for i in range(10):
        total += 0.1
    return total

def q35():
    num = 10 / 3
    return round(num, 2)

def q36(value: str):
    try:
        return int(value) * 2
    except:
        return "数値を入力してください"

def q37(a: int, b: int):
    try:
        return a / b
    except ZeroDivisionError:
        return "0では割り算できません"

def q38(a: int, b: int) -> int:
    return a + b

def q39(a: float, b: float) -> float:
    return a * b

def q40(num: Union[int, float]) -> Union[int, float]:
    return num ** 2

def q41(name: str) -> None:
    print("こんにちは", name)

def q42(x):
    try:
        return int(x) * 2
    except:
        return "数値を入力してください"

def q43():
    try:
        num = int("abc")
    except ValueError as e:
        return str(e)

def q44(value):
    if isinstance(value, int):
        return value * 2
    else:
        return "数値ではありません"

def q45():
    result = 0.1 + 0.2
    return round(result, 3)

def q46(value: str):
    try:
        return int(value)
    except:
        return value

age: int = 30  # Q47

def q48(a, b):
    try:
        a = int(a)
        b = int(b)
        return a / b
    except (ZeroDivisionError, ValueError):
        return "入力エラー"

def q49():
    try:
        x = int("abc")
    except ValueError:
        err = "変換できません"
    finally:
        fin = "終了処理"
    return (err, fin)

def q50(value: str) -> Union[int, float, str]:
    try:
        if "." in value:
            return float(value) * 2
        return int(value) * 2
    except:
        return "数値を入力してください"


# ============================================
# 採点スクリプト
# ============================================

def run_tests():
    tests = [
        ("Q1", q1(), 15),
        ("Q2", q2(), 15),
        ("Q3", q3(), "Hello, Taro"),
        ("Q4", q4(), 360),
        ("Q5", q5(), (10, 5)),
        ("Q6", q6(), 150),
        ("Q7", q7(), 7.0),
        ("Q8", q8(), "PYTHON"),
        ("Q9", q9(), "値は10です"),
        ("Q10", q10(), 110),
        ("Q31", q31(), 15),
        ("Q32", q32(), "価格は100円です"),
        ("Q33", q33("3", "5"), 8),
        ("Q34", abs(q34() - 1.0) < 1e-9, True),
        ("Q35", q35(), 3.33),
        ("Q36_int", q36("10"), 20),
        ("Q36_str", q36("abc"), "数値を入力してください"),
        ("Q37_ok", q37(10, 2), 5),
        ("Q37_err", q37(10, 0), "0では割り算できません"),
        ("Q38_type", q38.__annotations__, {'a': int, 'b': int, 'return': int}),
        ("Q39", q39(1.5, 2.0), 3.0),
        ("Q40", q40(2.0), 4.0),
        ("Q41", q41.__annotations__, {'name': str, 'return': None}),
        ("Q44", q44(10), 20),
        ("Q44_err", q44("10"), "数値ではありません"),
        ("Q45", q45(), 0.3),
        ("Q46", q46("10"), 10),
        ("Q46_str", q46("abc"), "abc"),
        ("Q47", age, 30),
        ("Q48", q48(10, 0), "入力エラー"),
        ("Q48v", q48("a", "b"), "入力エラー"),
        ("Q49", all(s in q49() for s in ("変換できません", "終了処理")), True),
        ("Q50_int", q50("3"), 6),
        ("Q50_float", q50("2.5"), 5.0),
        ("Q50_err", q50("abc"), "数値を入力してください"),
    ]

    correct = 0
    print("🧮 変数 × 型 練習問題 自動採点結果")
    print("===================================")
    for name, result, expected in tests:
        ok = result == expected
        if isinstance(expected, bool):
            ok = result is expected or result == expected
        mark = "✅" if ok else "❌"
        print(f"{mark} {name:10s} : {result!r}")
        if ok:
            correct += 1

    print("===================================")
    print(f"正解数: {correct}/{len(tests)}  ({correct/len(tests)*100:.1f}%)")


if __name__ == "__main__":
    run_tests()
Python

このスクリプトの使い方

  1. 上のコードを variable_quiz_autograder.py として保存
  2. コマンドラインで実行: python variable_quiz_autograder.py
  3. 各問題の ✅ / ❌ が一覧で出力されます
  4. 間違った問題の関数だけ書き直して再実行すればOK

発展的オプション

  • 🔸 全問スコアをCSVで保存(学習ログ)
  • 🔸 採点後にヒントを表示
  • 🔸 ブラウザ上で実行(Jupyter形式)
タイトルとURLをコピーしました