Python | レベル別練習問題:モジュールと import

Python
スポンサーリンク

では、これまでの3ファイル(quiz.py, answers.py, grader.py)を
1つのJupyter Notebook(.ipynb形式) に統合した「学習・練習・採点ノート」を出力します。

このノートでは:

  • 各セルが モジュール別(基礎 → 応用) に整理
  • 受講者は # TODO: を埋めるだけ
  • 最後のセルで grader.py 相当のスクリプトを走らせて 自動採点&スコア表示

Python モジュール入門 練習ノート(Jupyter版)

# =====================================================
# Python モジュール入門 練習ノート
# =====================================================
# 📘 使い方
# - 各セルの # TODO: 部分を埋めて実行しましょう。
# - 最後に自動採点セルを実行するとスコアが出ます。
# =====================================================
Python

Q1〜Q10: import の基本

import math
import random
import datetime
import os
import sys

def q1():
    # TODO: math モジュールを使って π を返す
    pass

def q2(x):
    # TODO: math.sqrt を使って平方根
    pass

def q3():
    # TODO: 1〜6のランダム整数を返す
    pass

def q4():
    # TODO: 今日の日付を返す
    pass

def q5():
    # TODO: 現在の作業ディレクトリを返す
    pass

def q6():
    # TODO: Pythonバージョン文字列を返す
    pass

def q7():
    # TODO: import math as m を使用して cos(0)
    pass

def q8():
    # TODO: from math import factorial → 5!
    pass

def q9():
    # TODO: from random import choice → ["A","B","C"] から1つ
    pass

def q10():
    # TODO: 現在の年を返す
    pass
Python

Q11〜Q20: パッケージ・標準モジュール

import importlib
import json
import statistics
from decimal import Decimal
from pathlib import Path

def q11():
    pass

def q12():
    pass

def q13():
    pass

def q14():
    pass

def q15():
    pass

def q16():
    pass

def q17():
    pass

def q18():
    pass

def q19():
    pass

def q20():
    pass
Python

Q21〜Q30: ファイル・データ操作

import csv, io, re, itertools, collections, time, calendar, tempfile

def q21(): pass
def q22(): pass
def q23(): pass
def q24(): pass
def q25(): pass
def q26(): pass
def q27(): pass
def q28(): pass
def q29(): pass
def q30(): pass
Python

Q31〜Q40: 応用・例外処理・外部ライブラリ

import uuid, hashlib, base64, argparse, importlib.util

def q31(): pass
def q32(): pass
def q33(): pass
def q34(): pass
def q35(): pass
def q36(): pass
def q37(): pass
def q38(): pass
def q39(): pass
def q40(): pass
Python

Q41〜Q50: 型ヒント・総まとめ

import typing, zipfile, shutil, subprocess, inspect, importlib.metadata

def q41(nums: list[int]) -> float: pass
def q42(value: str | None) -> str: pass
def q43(): pass
def q44(): pass
def q45(): pass
def q46(): pass
def q47(): pass
def q48(): pass
def q49(): pass
def q50(): pass
Python

採点セル(自動チェック)

import importlib, inspect, math, json, difflib

# --- answers モジュールを内部で定義(模範解答省略可) ---
import answers

quiz = globals()
total = 50
score = 0

def is_equal(expected, actual):
    if isinstance(expected, float) and isinstance(actual, float):
        return math.isclose(expected, actual, rel_tol=1e-9)
    if isinstance(expected, (list, tuple)) and isinstance(actual, (list, tuple)):
        return list(expected) == list(actual)
    if isinstance(expected, dict) and isinstance(actual, dict):
        return expected == actual
    try:
        e_json = json.loads(expected) if isinstance(expected, str) else expected
        a_json = json.loads(actual) if isinstance(actual, str) else actual
        if e_json == a_json:
            return True
    except Exception:
        pass
    return expected == actual

print("🧩 Python モジュール入門 自動採点 開始\n")

for i in range(1, total + 1):
    qname = f"q{i}"
    if qname not in quiz:
        print(f"❌ Q{i:02d}: 未定義")
        continue
    qf = quiz[qname]
    af = getattr(answers, qname)
    try:
        argspec = inspect.getfullargspec(af)
        args = [1] if argspec.args else []
        expected = af(*args)
        actual = qf(*args)
        ok = is_equal(expected, actual)
    except Exception as e:
        ok = False
        actual = f"エラー: {type(e).__name__}"

    if ok:
        score += 1
        print(f"✅ Q{i:02d}: OK")
    else:
        print(f"❌ Q{i:02d}: NG")
        print(f"    期待値: {expected}")
        print(f"    あなたの出力: {actual}")

print("\n===============================")
print(f"結果: {score} / {total} 点 ({(score/total)*100:.1f}%)")
print("===============================")
if score == total:
    print("🎉 全問正解!おめでとうございます!")
elif score >= total * 0.8:
    print("👍 よくできました!")
else:
    print("💡 間違いを確認して再挑戦!")
Python
Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました