孩子放寒假了,学校老师要求孩子每天练一练口算,一天至少50道题,但是老师没给口算题卡。好吧,不就是口算题吗!我去网上找一找,结果发现不是要钱,就是题量太少,太不友好了!咱不是学过python吗,再求助一下最近特别火的deepseek,自己写一个口算题卡生成器呗,分分钟的事!说干就干!
import random
import os
from docx import Document
from docx.shared import Pt, Inches
from docx.oxml.ns import qn
def generate_addition_subtraction():
"""生成加减法题目"""
a = random.randint(1, 99)
b = random.randint(1, 99)
if random.choice([True, False]): # 随机选择加法或减法
return f"{a} + {b} = ", a + b
else:
if a < b: # 确保结果为正数
a, b = b, a
return f"{a} - {b} = ", a - b
def generate_multiplication():
"""生成九九乘法表题目"""
a = random.randint(1, 9)
b = random.randint(1, 9)
return f"{a} × {b} = ", a * b
def generate_questions(num_questions):
"""生成指定数量的题目"""
questions = []
for _ in range(num_questions):
if random.choice([True, False]): # 随机选择加减法或乘法
question, answer = generate_addition_subtraction()
else:
question, answer = generate_multiplication()
questions.append((question, answer))
return questions
def create_word_document(questions, filename, questions_per_page=50):
"""将题目写入Word文档,每页50道题,分为两列,编号加括号并加粗"""
doc = Document()
style = doc.styles['Normal']
font = style.font
font.name = '宋体' # 设置字体为宋体
font.size = Pt(10) # 设置字体大小为10号
# 设置中文字体
font.element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')
# 设置页面布局
section = doc.sections[0]
section.left_margin = Inches(1.5) # 左边距
section.right_margin = Inches(1.5) # 右边距
section.top_margin = Inches(1) # 上边距
section.bottom_margin = Inches(1) # 下边距
# 每页50道题,分为两列
num_pages = (len(questions) + questions_per_page - 1) // questions_per_page
for page in range(num_pages):
# 创建表格,25行2列
table = doc.add_table(rows=25, cols=2)
table.autofit = False
table.columns[0].width = Inches(2.5) # 第一列宽度
table.columns[1].width = Inches(2.5) # 第二列宽度
# 设置表格样式,减少行高
for row in table.rows:
row.height = Pt(12) # 设置行高
# 填充当前页的题目
for i in range(25): # 每列25道题
for col in range(2):
index = page * questions_per_page + i * 2 + col
if index < len(questions):
question, _ = questions[index]
cell = table.cell(i, col)
# 第一列编号为 1-25,第二列编号为 26-50
if col == 0:
number = i + 1
else:
number = i + 26
# 直接设置单元格文本,使用换行符
cell.text = f"({number}) {question}"
# 添加分页符
if page < num_pages - 1:
doc.add_page_break()
# 保存到当前文件夹
doc.save(filename)
def main():
num_questions = 1000 # 总题目数量
questions = generate_questions(num_questions)
# 将文件保存到当前文件夹
filename = "math_practice.docx"
create_word_document(questions, filename)
print(f"文件已生成到: {os.path.abspath(filename)}")
if __name__ == "__main__":
main()
分分钟搞定,来看看效果!
嗯,1.6s搞定!
可以可以!一页50道题,一共1000道,1.6s生成完毕!佩服自己啊!!爸爸、妈妈们再也不用担心找口算题卡了!老铁们,觉得可以的话,给我双击666!吼吼!