Python | モジュール学習の完全版(初学者から実務レベルまで)

Python
スポンサーリンク

「モジュールと 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
  • 各問題の解答欄を書き換えて再実行すれば、自動採点!
Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました