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

liftword2个月前 (02-05)技术文章15

背景

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

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

那么问题来了,我需要一个快速生成这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,大神勿喷。有鸡娃的家长,可以拿去让小朋友卷起来。

相关文章

Python生成随机数_python生成随机数并判断奇偶

生成一个Python随机数 6 分钟阅读Python有一个内置的随机模块来实现此目的。它公开了几个方法,如randrange(),randint(),random(),seed(),uniform()...

Python获取随机数方法汇总_python语言如何获取随机整数

1. random.random()作用:随机生成一个[0,1)之间的浮点数import random print(f'随机生成一个[0,1)之间的浮点数={random.random()}')2....

Python 随机字符串_python 生成随机字符

在很多时候我们可能需要生成一些随机字符串。Python 也为我们提供了生成随机字符串的方法和函数。这个函数是在 random 库中定义的函数 choice。通常 choice 将会从给定的字符串中挑选...

python中随机模块random的用法_pythonrandom随机数的用法

Python 有一个可用于制作随机数的内建模块。现在总结归纳一下,方便大家查询学习random 模块有一组如下的方法:序号方法描述1seed()初始化随机数生成器。2getstate()返回随机数生成...

Python随机抽查部分学生,手把手教你学会random

疫情期间的网课上你有被熊孩子气到炸吗网线的两端,是不是这样巧合呢复课后的课堂上你有被熊孩子气到疯吗等下,跑题了,下面言归正传关键知识点:random库、判断、循环、列表、异常处理、文件的读取等。开发环...

Python实现随机&amp;批量梯度下降算法

一.概述梯度下降属于迭代法的一种,可以用于求解最小二乘问题。在求解机器学习算法的模型参数时,梯度下降(Gradient Descent)是最常采用的方法之一,另一种常用的方法是最小二乘法。在求解损失函...