# GESP等级:二级 | GESP Python 二级考点
"""
============================================================================
  第3节:math综合 —— 小测验
  课程编号: GESP #35
  时长规划: 55:00 - 60:00 (5分钟)
  核心题: "math.sqrt(100)=?"
============================================================================

【测验说明】
- 共 10 题，每题 10 分，满分 100 分
- 闭卷完成，限时 5 分钟
- 将答案填写在每题下方的 ____ 处
- 完成后与参考答案对照检查

============================================================================
第一部分:选择题（每题 10 分，共 4 题）
============================================================================

"""

题目 1:math.sqrt(100) 的结果是?
    A. 10
    B. 10.0
    C. 100
    D. 50

答案:____   (B)

# 解析:math.sqrt 永远返回 float 类型，所以 10.0 而非 10


题目 2:math.floor(3.9) 的结果是?
    A. 3
    B. 4
    C. 3.0
    D. 4.0

答案:____   (A)

# 解析:floor 向下取整，3.9 向下取 3，返回 int 类型


题目 3:math.ceil(3.1) 的结果是?
    A. 3
    B. 4
    C. 3.0
    D. 4.0

答案:____   (B)

# 解析:ceil 向上取整，3.1 向上取 4


题目 4:以下哪个 math 函数用于计算正弦值?
    A. math.sin()
    B. math.sine()
    C. math.sinh()
    D. math.sins()

答案:____   (A)

# 解析:正弦函数是 math.sin()，参数为弧度


# ============================================================================
# 第二部分:填空题（每题 10 分，共 4 题）
# ============================================================================

"""
题目 5:（核心题）math.sqrt(100) = ____
答案:10.0

题目 6:math.pi 的值约等于 ____（保留 5 位小数）
答案:3.14159

题目 7:math.floor(-3.1) = ____
答案:-4
解析:floor 向负无穷方向取整，-3.1 向下 → -4

题目 8:一个半径为 3 的圆，周长 C = 2 * math.pi * 3 ≈ ____（保留 2 位小数）
答案:18.85  （2 * 3.14159 * 3 = 18.84954 → 18.85）
"""


# ============================================================================
# 第三部分:判断题（每题 10 分，共 2 题）
# ============================================================================

"""
题目 9:math.sqrt(9) 的结果是 3。 （对 / 错）
答案:错
解析:math.sqrt(9) 返回 3.0（float），不是 3（int）

题目 10:math.sin(math.pi / 2) 的结果是 1.0。 （对 / 错）
答案:对
解析:sin(π/2) = sin(90°) = 1.0
"""


# ============================================================================
# 参考答案汇总
# ============================================================================

"""
═══════════════════════════════════════════════════════════════════
                    第3节 · math综合 · 小测答案
═══════════════════════════════════════════════════════════════════

一、选择题
  1.  B  (math.sqrt(100) = 10.0)
  2.  A  (math.floor(3.9) = 3)
  3.  B  (math.ceil(3.1) = 4)
  4.  A  (math.sin)

二、填空题
  5.  10.0                     （核心题:math.sqrt(100)=?）
  6.  3.14159
  7.  -4
  8.  18.85

三、判断题
  9.  错（应该是 3.0，不是 3）
  10. 对

═══════════════════════════════════════════════════════════════════

记忆钩子复现:
  "π=3.14  sqrt开方  floor向下  ceil向上"
  开方结果记 float    取整方向要分清
  三角函数用弧度      pi/2 正弦得 1.0
═══════════════════════════════════════════════════════════════════
"""


# ============================================================================
# 自动批改工具（教师用）
# ============================================================================

def grade_quiz(answers: dict) -> dict:
    """
    教师批量批改小测验

    参数 answers: 学生答案字典
        {"q1": "B", "q2": "A", "q3": "B", "q4": "A",
         "q5": "10.0", "q6": "3.14159", "q7": "-4", "q8": "18.85",
         "q9": False, "q10": True}

    返回: 批改结果（得分 + 每题正误）
    """
    standard = {
        "q1": "B", "q2": "A", "q3": "B", "q4": "A",
        "q5": "10.0", "q6": "3.14159", "q7": "-4", "q8": "18.85",
        "q9": False, "q10": True
    }

    result = {
        "total": 0,
        "details": {},
        "wrong": []
    }

    for q_id, correct in standard.items():
        student_ans = answers.get(q_id)
        is_correct = (student_ans == correct)
        score = 10 if is_correct else 0
        result["total"] += score
        result["details"][q_id] = {
            "correct": correct,
            "student": student_ans,
            "score": score
        }
        if not is_correct:
            result["wrong"].append(q_id)

    return result


if __name__ == "__main__":
    print("=== 第3节 math综合 小测验 ===")
    print("请打开本文件，查看题目并填写答案")
    print()
    print("教师批量批改示例:")
    sample = {
        "q1": "B", "q2": "A", "q3": "B", "q4": "A",
        "q5": "10.0", "q6": "3.14", "q7": "-4", "q8": "18.85",
        "q9": False, "q10": True
    }
    result = grade_quiz(sample)
    print(f"得分: {result['total']}/100")
    if result['wrong']:
        print(f"错题: {', '.join(result['wrong'])}")
    else:
        print("全部正确!")
