当前位置:首页>python>别人花钱买练习册?Python免费给你出一万套数学试卷,自带自动批改!

别人花钱买练习册?Python免费给你出一万套数学试卷,自带自动批改!

  • 2026-09-16 00:30:23
别人花钱买练习册?Python免费给你出一万套数学试卷,自带自动批改!

别人花钱买练习册?Python免费给你出一万套数学试卷,自带自动批改!


开篇小故事

"妈妈,练习册做完了,还有没有题可以练?"

六年级的浩浩把一本数学练习册从头做到尾,还想继续练。

妈妈正准备上网买新练习册,浩浩说:"不用买!我用 Python 写一个自动出题的程序,要多少题有多少题!"

二十分钟后,浩浩不仅有了一个"无限出题机",还带自动批改和计时功能。

"这个比练习册还好用,因为我可以只练我出错的那些题!"


你能学到什么

  • • 学会用 random 模块随机生成数字
  • • 掌握计时的方法(看谁算得快)
  • • 学会记录错题并针对性复习
  • • 综合运用前面学过的循环、判断、列表

直接上代码

基础版:随机出 10 道加减法

import randomimport timeprint("=== 数学小测验 ===")print("准备好了吗?开始答题!\n")score = 0start_time = time.time()  # 记录开始时间for i in range(1, 11):    a = random.randint(1, 99)    b = random.randint(1, 99)    correct = a + b    answer = input(f"第{i}题:{a} + {b} = ")    if answer.isdigit() and int(answer) == correct:        print("✓ 正确!\n")        score += 1    else:        print(f"✗ 错误!正确答案是 {correct}\n")end_time = time.time()used_time = round(end_time - start_time, 1)print(f"===== 测验结束 =====")print(f"得分:{score} / 10")print(f"用时:{used_time} 秒")print(f"正确率:{score * 10}%")

代码讲解

代码
作用
random.randint(1, 99)
随机生成 1 到 99 之间的整数
time.time()
获取当前时间(秒)
answer.isdigit()
检查输入是不是纯数字(防止输入字母报错)
int(answer) == correct
判断答案对不对

进阶版:加减乘除随机混合

import randomimport timeops = ["+", "-", "×"]score = 0wrong_list = []  # 记录错题print("=== 四则运算大挑战 ===\n")start_time = time.time()for i in range(1, 11):    a = random.randint(1, 99)    b = random.randint(1, 99)    op = random.choice(ops)    # 根据运算符计算结果    if op == "+":        correct = a + b    elif op == "-":        # 保证结果不为负数        if a < b:            a, b = b, a        correct = a - b    else:  # "×"        correct = a * b    answer = input(f"第{i}题:{a} {op} {b} = ")    if answer.lstrip("-").isdigit() and int(answer) == correct:        print("✓ 正确!\n")        score += 1    else:        print(f"✗ 错误!正确答案是 {correct}\n")        wrong_list.append(f"{a} {op} {b} = {correct}")end_time = time.time()print(f"===== 成绩单 =====")print(f"得分:{score} / 10")print(f"用时:{round(end_time - start_time, 1)} 秒")if wrong_list:    print(f"\n错题本(记得再练一遍哦):")    for w in wrong_list:        print(f"  · {w}")else:    print("\n全部正确!你太厉害了!")

超进阶版:分难度等级

import randomimport timeprint("选择难度:")print("1. 简单(20以内加减法)")print("2. 中等(100以内四则运算)")print("3. 困难(三位数乘除法)")level = input("请选择(1/2/3):")if level == "1":    max_num = 20    ops_list = ["+", "-"]elif level == "2":    max_num = 100    ops_list = ["+", "-", "×"]else:    max_num = 999  # 更友好一些    ops_list = ["×", "÷"]score = 0start_time = time.time()for i in range(1, 11):    a = random.randint(1, max_num)    b = random.randint(1, min(max_num, 99))    op = random.choice(ops_list)    if op == "+":        correct = a + b    elif op == "-":        if a < b:            a, b = b, a        correct = a - b    elif op == "×":        correct = a * b    else:  # "÷"        # 确保能整除,且除数不为0        correct = random.randint(1, min(a, 99))        b = random.randint(1, min(a, 12))        a = correct * b        correct_display = correct    if op == "÷":        answer = input(f"第{i}题:{a} {op} {b} = ")    else:        answer = input(f"第{i}题:{a} {op} {b} = ")    try:        if op == "÷":            user_ans = int(answer)        else:            user_ans = int(answer)        if user_ans == correct:            print("✓\n")            score += 1        else:            print(f"✗ 答案是 {correct}\n")    except:        print(f"✗ 请输入数字!答案是 {correct}\n")end_time = time.time()print(f"得分:{score}/10,用时:{round(end_time - start_time, 1)}秒")

试试加点变化?

变化
怎么改
题目数量可调
把 range(1, 11) 的 11 改成 题目数+1
加入分数题
用上期学的 Fraction 模块自动出分数运算题
加入计时挑战
if used_time > 60: print("超时了!")
记录历史成绩
把每次测验结果写入文件保存
只练错题
把错题存起来,下次专门练错题

易错点提醒

易错点
原因
怎么改
用户输入字母就报错
int("abc")
 会崩溃
用 .isdigit() 检查,或用 try/except
减法出现负数
低年级没学负数
先判断 a < b,交换位置
除法除不尽
小学阶段没学小数除法
反过来构造题目:先定商和除数,再算出被除数

学校信息课考点预告

本期是前几期的综合应用:

  • • 随机数生成(random 模块)
  • • 条件判断与循环
  • • 列表操作(错题本功能)
  • • 时间处理(time 模块)
  • • 程序与数学的深度融合——新课标"计算思维"核心体现

家长辅导小贴士

  1. 1. 先选简单难度,让孩子在 20 以内加减法中建立信心。不要一上来就挑战困难模式。
  2. 2. 比赛模式:和孩子各做一套 10 题,比谁又快又对。输的人做俯卧撑!
  3. 3. 关注错题:程序记录的错题,恰恰是孩子数学的薄弱环节。把错题抄下来,和孩子一起分析错在哪里。
  4. 4. 让孩子自己改程序:比如"能不能加入除法?""能不能显示排名?"——这是培养编程兴趣最好的方式。
  5. 5. 如果孩子对 random 模块好奇,可以解释:"random 就像一个骰子,每次都能掷出不同的数字。但它是靠一个很复杂的数学公式来掷骰子的,不是真的随机——这叫伪随机。"

最新文章

随机文章