Python 随机生成100道题10以内加减法,以表格的形式到word文档
背景
周五老师在群里通知,下周学校组织《数学百题竞赛》,一年级考10以内的加减法,让周末在家多多练习。
恰好双11的时候,家里买了一台打印机,那就充分利用起来,打印一些10以内加减法的题,可以在家卷起来。
那么问题来了,我需要一个快速生成这100道题的方法。第一时间想到用大模型生成,但是尝试了,豆包,通义千问,智谱清言,kimi,效果都不太满意。表现最好的还是豆包。
后来就决定自己写个程序来搞定这件事情,最近刚刚接触python,还属于python萌新的我,就想用这个机会,来练练手。
需求
- 两个数相加不能大于10
- 两个数相减不能小于0
- 要在生成在word文档里
- 100道题要在一页纸上
- 一次可以生成多页
- 加减和题目都随机生成
- 使用表格排版,一行5道题。
实现
环境:Python 3.11.10
- 安装python-docx
pip install python-docx
- 代码实现
import random # 随机函数
from docx.api import Document
from docx.shared import Pt, Cm
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_ALIGN_VERTICAL
from docx.enum.section import WD_SECTION
import math
# 多少以内的加减法
MAX_NUMBER = 10
# 生成多少页
PAGES = 10
# 一页多少题,最多100题,超过100题,自行调整格式。
TOTAL_QUESTIONS = 100
def newPage(doc):
paragraph = doc.add_paragraph()
run = paragraph.add_run("班级:___年___班 姓名:________ 时间:___分___秒 分数:________")
run.font.size = Pt(15)
doc.add_paragraph("")
table = doc.add_table(rows=math.ceil(TOTAL_QUESTIONS / 5), cols=5)
for i in range(len(table.rows)):
table.rows[i].height = Cm(1)
table.style = 'Table Grid'
count = 0
while True:
a = random.randint(1, MAX_NUMBER)
b = random.randint(1, MAX_NUMBER)
operator = random.choice(['+', '-'])
# 如果是减法运算,确保不生成负数
if operator == '-' and a < b:
a, b = b, a
if operator == '+':
answer = a + b
if answer > MAX_NUMBER:
continue
# 计算题目所在的表格行和列
row = count // 5
col = count % 5
# 在表格中添加题目和答案,这里填下划线
cell = table.cell(row, col)
cell_text = f"{a} {operator} {b} ="
cell.text = cell_text
cell.vertical_alignment = WD_ALIGN_VERTICAL.CENTER
cell.paragraphs[0].runs[0].font.size = Pt(16)
cell.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.LEFT
cell.paragraphs[0].paragraph_format.line_spacing = 1
count = count + 1
if count == TOTAL_QUESTIONS:
break
def generator():
doc = Document()
for i in range(PAGES):
newPage(doc)
if i < PAGES - 1:
doc.add_section(start_type=WD_SECTION.NEW_PAGE)
doc.save("10以内随机数学题.docx")
if __name__ == '__main__':
generator()
生成效果
扩展
既然10以内的写了,那么100以内也就是一个参数了。所以添加了三个参数,把小学加减法的题都一次性的搞定了。
结语
刚学python,大神勿喷。有鸡娃的家长,可以拿去让小朋友卷起来。