网站首页 > 基础教程 正文
背景
周五老师在群里通知,下周学校组织《数学百题竞赛》,一年级考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,大神勿喷。有鸡娃的家长,可以拿去让小朋友卷起来。
猜你喜欢
- 2024-12-12 JS逆向so easy?以Python方式进行签名算法还原(附案例分享)
- 2024-12-12 知识付费阿里云视频点播功能
- 2024-12-12 超强指南!Golang 并发编程
- 2024-12-12 python办公案例:使用联系人信息,如何制作通讯录VCF文件
- 2024-12-12 Linux C 编程 - 详解floor函数、ceil函数和round函数
- 2024-12-12 根据年月计算当月有哪几个周,及每周的起止日期
- 2024-12-12 借助云开发实现短信验证码的发送,你会了么
- 2024-12-12 游戏系统中的伪随机和真随机算法实现Python3
- 2024-12-12 Python tkinter 点名工具
- 2024-12-12 Ae随机表达式控制小数点位数
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)