初中数学练习题生成与批改
先记住这几条
- 答案一律以程序输出为准。 题目是程序先定好答案再反推出来的,全部用分数精确计算;不要自己心算后改答案,也不要自己编题塞进卷子。
- 只新建文件,不覆盖、不删除。 同名文件已存在时自动加
_1、_2。不改系统设置,不需要管理员权限,不联网。 - 学生名单只在用户自己电脑上。 录分表里的姓名只用于在本机算成绩,程序不上传、不另存别处。建议用学号或昵称。
- 运行前告诉用户你要做什么(例如「我用出题程序给你出 20 道一元一次方程」),不隐瞒在运行什么;但不要把命令、参数念给用户。
这个技能做什么
| 能做的 | 说明 |
|---|---|
| 出练习卷 | 9 类题 × 基础/提高两档,按题数出;同一套卷不重复;可指定每类几道 |
| 带答案页 | 答案放卷子最后一页(另起一页),或单独一个文件;方程、方程组、不等式、二次方程、整式化简、勾股给关键步骤,因式分解、计算题给结果 |
| A/B 卷 | 题型、题数、难度一样,题目不同,两套之间也不重复 |
| 可复现 | 每次出卷都有一个「种子」号码;同样的题型、题数、难度、种子,出来的卷子一模一样 |
| 录分表 | 按卷子生成 Excel 表,老师照抄学生答案;格子已设成「文本」,写 3/4 不会变成日期 |
| 自动批改 | 判对错、算每人得分(百分制)、每题正确率、各题型正确率,列出「需要老师看」的答案 |
| 核对一道题 | 用户贴来一道题(课本、作业、别的 AI 出的),程序算标准答案;给了答案就判对错 |
输出格式:Word(.docx,打开就能打印,x² 是真正的上标)或 Markdown(.md)。Word 文件由程序自己生成,不需要装 Office 插件或任何 Python 库。
题型和难度
| 题型 | 基础 | 提高 |
|---|---|---|
| 有理数混合运算 | 三个整数(带负数)加减乘除,结果是整数 | 加分数、乘方 (-2)³、-3²、(-1)²⁰²⁵、中括号大括号,结果分母不超过 12 |
| 分数小数运算 | 两个分数或两个小数的一步计算,不出负数 | 三四个数混合运算、带括号,分数小数混着来;中间结果也不出负数 |
| 一元一次方程 | ax+b=c、两边都有 x、一层括号;解是整数 | 两个括号、去分母;解是整数或分母不超过 5 的分数 |
| 二元一次方程组 | 有系数是 1,或某个字母系数相同/相反 | 系数都不小于 2,或带分母、带括号要先整理;解都是整数 |
| 整式化简 | 去括号、合并同类项 | 多项式乘多项式、完全平方、单项式乘多项式 |
| 因式分解 | 提公因式、平方差、完全平方、x²+bx+c 十字相乘 | 先提公因式再用公式、ax²+bx+c、含两个字母、分组(公因式是多项式)、x⁴-16 这类四次式 |
| 一元二次方程 | x²+bx+c=0 因式分解法、(x-1)²=9 直接开平方、x²-ax=0 | ax²+bx+c=0、要先整理成一般式的;加「带根号」开关才出公式法、根带根号的题,否则判别式一律是完全平方 |
| 不等式(组) | 一个不等式,包括两边除以负数要变号 | 带分母的不等式、不等式组(解集是一段、同向取大/小、无解都有) |
| 勾股定理计算 | 勾股数(3,4,5 等的倍数):求斜边/直角边、梯子、长方形对角线、等腰三角形底边上的高 | 答案带根号(化成最简二次根式)、等边三角形的高、正方形对角线、斜边上的高、30° 角 |
「混合」难度:每类题前一半基础、后一半提高。
用户说大白话 → 你怎么做
| 用户这样说 | 你做什么 |
|---|---|
| 「出 20 道一元一次方程,要答案」 | 问清难度(不说就用基础)和保存位置,出 Word 卷;告诉他文件在哪、种子号是多少 |
| 「七年级期中复习卷,有理数、整式、方程各 10 道,难一点」 | 三类各 10 道,提高难度,出 Word |
| 「出 A、B 卷防抄」 | 加 A/B 卷开关,会得到 A 卷、B 卷两个文件和各自的批改文件 |
| 「上次那套卷子再打一份」 | 问他上次的种子号(答案页最下面有),用同样的题型、题数、难度、种子再出 |
| 「二次方程要有带根号的」 | 加「带根号」开关(只影响一元二次方程) |
| 「方程的解只要整数」 | 加「只要整数解」开关 |
| 「给我一张表,我把学生答案填进去」 | 用出卷时生成的「…_批改用.json」做录分表;有名单就把名单填上 |
| 「表填好了,帮我改」 | 批改,念出平均分、各题型正确率、错得最多的三道题、有几处需要老师看 |
| 「这道题答案对不对:x²-5x+6 分解成 (x-2)(x-3)」 | 用「核对」功能,告诉他程序算的答案和判断 |
| 只要在聊天里看题、不要文件 | 不保存文件,直接把程序输出的题目和答案贴给他 |
怎么一步一步跟用户说(截图式)
- 出完卷:「卷子已经保存在 文档 → 数学练习 → 七年级练习.docx,双击就能用 Word 或 WPS 打开,最后一页是答案,打印时如果不想印答案,在打印设置里把页码范围改成 1 到 X 页。」
- 填录分表:「双击打开 七年级练习_录分表.xlsx → 最下面点『录入』这一页 → 第一列写学生姓名或学号 → 后面每一格照抄学生写的答案,没做的空着 → 点左上角保存 → 告诉我填好了。」
- 写法提醒(照念给老师):方程写 x=3 或 3;方程组写 x=1,y=2;二次方程写 x1=2,x2=-3 或 2,-3;根号写 2√5 或 2sqrt5;不等式写 x>3、-1<x≤3、无解;分数写 3/4,带分数写 1又3/4;因式分解和化简结果照原样抄,x 的平方写 x^2 或 x²。
- 批改结果:「打开 …_批改结果.xlsx:『成绩』页是每个学生的分数,√ 对、× 错、带 * 的是需要您看一眼的;『每题正确率』页能看出哪道题全班错得多;『需要老师看』页列了没约分、只写对一个根、写法看不懂这些情况。」
不要对用户说命令、参数名、文件扩展名以外的技术词;数字(分数、正确率、种子号)照程序输出念。
使用流程(给你看的命令,不念给用户)
所有命令:python {baseDir}/scripts/mathdrill.py <命令> ...
- 看题型:
topics - 出卷:
python {baseDir}/scripts/mathdrill.py gen --topics 一元一次方程 --n 20 --level 基础 --out "文档/数学练习/方程练习.docx"
python {baseDir}/scripts/mathdrill.py gen --topics "有理数:10,整式化简:10,一元一次方程:10" --level 提高 --ab --out 期中复习.docx
python {baseDir}/scripts/mathdrill.py gen --topics 因式分解,一元二次方程 --n 30 --level 混合 --seed 482913 --out 练习.md
| 参数 | 含义 |
|---|---|
--topics |
题型,逗号分隔,中文名或简称都行;名称:题数 指定每类几道;不写就是 9 类都出 |
--n |
每套总题数(默认 20,最多 200);都写了题数时以各类之和为准 |
--level |
基础(默认)/ 提高 / 混合 |
--seed |
种子;不写就随机生成一个并显示出来 |
--ab |
出 A、B 两套 |
--out |
保存成 .docx 或 .md;文件夹不存在会新建;不写就只在屏幕显示、不存文件(这样也没有批改文件) |
--answers |
end 答案在最后(默认)/ separate 答案单独一个文件 / none 不要答案 |
--irrational |
一元二次方程允许根带根号(公式法) |
--int-only |
方程、不等式的解只要整数 |
--compact |
题目之间不留答题空行 |
--title |
卷子标题 |
--no-answers / --quiet |
屏幕上不显示答案 / 不显示题目 |
用了 --out 会同时生成「…_批改用.json」,批改时要用,提醒用户别删。
- 录分表:
sheet --key "方程练习_批改用.json" --students "1号,2号,3号" --out 录分表.xlsx(不写名单就给 50 空行;--count指定行数) - 批改:
grade --key "方程练习_批改用.json" --answers 录分表.xlsx [--out 结果.xlsx 或 结果.md] [--strict]
- 也认 .csv(UTF-8 或 GBK);第一行要有题号(1、2、3 或 第1题),有「姓名/学号/昵称」列就用它。
- 如果老师没用录分表、Excel 把 3/4 自动变成了日期,程序会还原成 3/4 并提醒核对。
---strict:没约分、根号没化到最简也算错(默认算对,但列进「需要老师看」)。 - 核对一道题:
check --topic 因式分解 --problem "x^2-5x+6" [--answer "(x-2)(x-3)"]
- 支持:有理数、分数小数、一元一次方程、二元一次方程组(两个方程用换行或分号隔开)、整式化简、因式分解、一元二次方程、不等式(组)。勾股定理是文字题,不支持贴题求解。
退出码:0 正常;2 输入有误;3 意外错误。出错时固定两行「出错了:…」「下一步:…」,用大白话转告用户。
批改怎么判(等价写法都认)
| 题型 | 判对规则 |
|---|---|
| 计算题 | 值相等就对:3/4、6/8、0.75 都对(6/8 会标「没约分」);1/3 写成 0.33 算错并提示要写分数 |
| 一元一次方程 | x=3、3、x=3.0 都对 |
| 方程组 | x、y 都对才对;x=1,y=2、(1,2)、y=2,x=1 都认;只对一个会注明 |
| 整式化简 | 值相等,而且必须展开、合并好;项的顺序随便;没去括号或还有同类项算错并注明 |
| 因式分解 | 乘回去等于原式 + 分解彻底 + 公因式提干净 + 整数系数;因式顺序随便,(x-2)(x-2) 和 (x-2)² 一样;x(2x+4) 判错并说明「还能提出 2」 |
| 一元二次方程 | 两个根都对(顺序随便,重根写一个也行,± 写法也认);只写一个根会注明 |
| 不等式 | 解集相同即对:x>3 和 3<x 一样,「x>1 且 x≤4」也认;等号错、方向反了会分别注明 |
| 勾股定理 | 精确值相等:2√5、√20 都对(后者标「根号没化简」);写 4.47 这种近似值算错并提示 |
看不懂的写法判错,并列进「需要老师看」,请老师人工确认。
边界
- 不出几何证明、函数图像、应用题文字题(勾股定理的几种固定情境除外)。
- 题目是程序按模板随机出的,不是课本原题;难度按常见教材的基础题、中档题把握,不保证和某个版本教材某一节完全对应。
- 批改只看最后答案,不看过程;步骤分要老师自己给。
- 学生答案得由老师录入(不做拍照识别)。
- 不联网、不上传、不收集个人信息;文件都在用户自己指定的位置。