专业编程基础技术教程

网站首页 > 基础教程 正文

Python 随机生成100道题10以内加减法,以表格的形式到word文档

ccvgpt 2024-12-12 11:08:23 基础教程 1 ℃

背景

周五老师在群里通知,下周学校组织《数学百题竞赛》,一年级考10以内的加减法,让周末在家多多练习。

恰好双11的时候,家里买了一台打印机,那就充分利用起来,打印一些10以内加减法的题,可以在家卷起来。

Python 随机生成100道题10以内加减法,以表格的形式到word文档

那么问题来了,我需要一个快速生成这100道题的方法。第一时间想到用大模型生成,但是尝试了,豆包,通义千问,智谱清言,kimi,效果都不太满意。表现最好的还是豆包。

后来就决定自己写个程序来搞定这件事情,最近刚刚接触python,还属于python萌新的我,就想用这个机会,来练练手。

需求

  1. 两个数相加不能大于10
  2. 两个数相减不能小于0
  3. 要在生成在word文档里
  4. 100道题要在一页纸上
  5. 一次可以生成多页
  6. 加减和题目都随机生成
  7. 使用表格排版,一行5道题。

实现

环境:Python 3.11.10

  1. 安装python-docx
pip install python-docx
  1. 代码实现
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,大神勿喷。有鸡娃的家长,可以拿去让小朋友卷起来。

最近发表
标签列表