以下に、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このスクリプトの使い方
- 上のコードを
variable_quiz_autograder.pyとして保存 - コマンドラインで実行:
python variable_quiz_autograder.py - 各問題の ✅ / ❌ が一覧で出力されます
- 間違った問題の関数だけ書き直して再実行すればOK
発展的オプション
- 🔸 全問スコアをCSVで保存(学習ログ)
- 🔸 採点後にヒントを表示
- 🔸 ブラウザ上で実行(Jupyter形式)
