专业编程基础技术教程

网站首页 > 基础教程 正文

再也不怕给孩子出口算题了,一键生成口算题卡,让孩子刷起来吧!

ccvgpt 2025-02-26 11:08:15 基础教程 3 ℃

孩子放寒假了,学校老师要求孩子每天练一练口算,一天至少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!吼吼!

Tags:

最近发表
标签列表