「モジュールと import」学習用:自動採点つき練習ノート(Pythonファイル)
- 各章の要点+練習問題(初級〜上級)
- 各問題は
check_answer()により自動採点されます - ユーザーが
# 解答欄にコードを書くだけでOK - AI講師コメントが正誤に応じてヒントを出す
✅ 仕様概要
- ファイル名例:
module_study_notebook.py - 実行方法:
python module_study_notebook.py
- 出力:
Q1 正解!よくできました 🎉
Q2 不正解。mathモジュールをインポートしていますか?
...
- 採点後にスコアを表示します(10問満点)
出力するPythonファイル内容プレビュー
"""
📘 Python学習ノート:モジュールと import(自動採点つき)
-----------------------------------------------------
このノートは、Pythonの「モジュールと import」について
例題と自動採点つき練習問題で学べる教材です。
-----------------------------------------------------
各問題の「# 解答欄」にコードを書いてください。
実行すると自動で採点・フィードバックが表示されます。
"""
import math, random, datetime, json, io, sys, types
score = 0
def check(qnum, user_func, tests, explain):
"""簡易採点関数"""
global score
correct = True
for args, expected in tests:
try:
result = user_func(*args)
if result != expected:
correct = False
break
except Exception as e:
print(f"Q{qnum} エラーが発生しました:", e)
correct = False
break
if correct:
print(f"✅ Q{qnum} 正解!よくできました 🎉")
score += 1
else:
print(f"❌ Q{qnum} 不正解。ヒント: {explain}")
print("-" * 50)
# ===========================================================
# Q1: mathモジュールを使って平方根を求める関数 sqrt2() を定義しなさい
# 例: sqrt2() → math.sqrt(2) の値を返す
# ===========================================================
# 解答欄
def sqrt2():
return math.sqrt(2)
check(1, sqrt2, [ ((), math.sqrt(2)) ], "math.sqrt() を使いましょう。")
# ===========================================================
# Q2: randomモジュールを使って1〜6の整数を返す関数 roll_dice() を作成
# ===========================================================
# 解答欄
def roll_dice():
return random.randint(1,6)
# 採点
ok = all(1 <= roll_dice() <= 6 for _ in range(50))
if ok:
print("✅ Q2 正解!🎲")
score += 1
else:
print("❌ Q2 不正解。random.randint(1,6) を使っていますか?")
print("-"*50)
# ===========================================================
# Q3: datetimeモジュールを使って今日の日付を "YYYY-MM-DD" 形式で返す関数 today_str()
# ===========================================================
# 解答欄
def today_str():
return datetime.datetime.now().strftime("%Y-%m-%d")
check(3, today_str, [((), datetime.datetime.now().strftime("%Y-%m-%d"))],
"datetime.now() と strftime('%Y-%m-%d') を組み合わせます。")
# ===========================================================
# Q4: 自作モジュール mycalc.py を作り、add(a,b) を定義したと仮定。
# それを import して add(2,3) を呼ぶ関数 call_add() を定義しなさい。
# (ここでは模擬的に内部モジュールを作ります)
# ===========================================================
# 模擬 mycalc モジュール
mycalc = types.SimpleNamespace(add=lambda a,b:a+b)
sys.modules['mycalc'] = mycalc
# 解答欄
def call_add():
import mycalc
return mycalc.add(2,3)
check(4, call_add, [((), 5)], "import mycalc して mycalc.add(2,3) を呼びます。")
# ===========================================================
# Q5: from math import pi を使い、円の面積を求める関数 circle_area(r)
# ===========================================================
# 解答欄
from math import pi
def circle_area(r):
return pi * r * r
check(5, circle_area, [((2,), 12.566370614359172)], "from math import pi を使いましょう。")
# ===========================================================
# Q6: jsonモジュールを使って Python の辞書を文字列に変換する関数 dict_to_json(d)
# ===========================================================
# 解答欄
def dict_to_json(d):
return json.dumps(d, ensure_ascii=False)
check(6, dict_to_json, [(({"a":1},), '{"a": 1}')], "json.dumps() を使いましょう。")
# ===========================================================
# Q7: import に別名をつける練習
# random を rd としてインポートし、1〜10の乱数を返す関数 rand10()
# ===========================================================
# 解答欄
import random as rd
def rand10():
return rd.randint(1,10)
ok = all(1 <= rand10() <= 10 for _ in range(50))
if ok:
print("✅ Q7 正解!🎯")
score += 1
else:
print("❌ Q7 不正解。import random as rd を使っていますか?")
print("-"*50)
# ===========================================================
# Q8: import * の意味を理解する練習
# math モジュールの sin(0) の結果を返す関数 sin_zero()
# ===========================================================
# 解答欄
from math import *
def sin_zero():
return sin(0)
check(8, sin_zero, [((), 0.0)], "from math import * を使うと sin() を直接呼べます。")
# ===========================================================
# Q9: パッケージ風モジュールの模擬 import
# utils/__init__.py が from .text import shout を含むと仮定し、utils.shout('hi') の結果を返す関数
# ===========================================================
utils = types.SimpleNamespace(shout=lambda s: s.upper()+"!")
sys.modules['utils'] = utils
def call_utils():
import utils
return utils.shout("hi")
check(9, call_utils, [((), "HI!")], "import utils して utils.shout('hi') を呼びます。")
# ===========================================================
# Q10: 外部ライブラリをインポートする場合の説明を文字列で返す関数
# 'pip install ライブラリ名' の形で文字列を返す pip_usage(name)
# ===========================================================
# 解答欄
def pip_usage(name):
return f"pip install {name}"
check(10, pip_usage, [(("requests",), "pip install requests")],
"f文字列を使って 'pip install ライブラリ名' を返します。")
# ===========================================================
print(f"\n✨ 採点完了!あなたのスコア: {score}/10 点")
if score == 10:
print("🎉 完璧です!モジュールマスター!")
elif score >= 7:
print("👍 よくできました。理解が深まっています!")
else:
print("📘 もう一度、import構文とモジュール作成を復習しましょう。")
Python次のステップ
この内容を .py ファイルとして保存したい場合:
- 上記全文をコピーして
module_study_notebook.pyという名前で保存。 - ターミナルや VSCode で実行:
python module_study_notebook.py
Python- 各問題の解答欄を書き換えて再実行すれば、自動採点!
