数学算术计算自动生成器

2023-11-01 20:17:08 浏览数 (1)

前言

家里有小孩已经上大班,明年入学小学一年级,现在开始加减法的数学训练,于是乎我在网上查看了很多幼小衔接的数学题,都是随机生成的 计算公式,比如 《每日30题》 ,《一日一练》 等等。

想着利用 python的 random 随机函数功能随机生成指定数据量的题目,当做日常练习题。(我儿子长大看到这篇文章 ,会不会举报我 )

实现

基本需求:

  1. 两数之算术运算结果小于40,当然也可以小于50 ,可以指定。
  2. 生成的算术公式格式化存储到 pdf ,方便打印。
  3. 题目太密集不好,不方便小孩眼睛观察题目,当然不能太稀疏,容易浪费纸张。

代码实现

代码语言:javascript复制
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
=================================================
@Author :yangyidba
@Date   :2023/10/31 16:54
@Desc   :随机生成 指定number 个加减法的算术题
==================================================
"""
import random
from fpdf import FPDF


class PDF(FPDF):
    def header(self):
        self.set_font('Arial', 'B', 12)
        self.cell(0, 10, 'Mathematics Training', 0, 1, 'C')

    def footer(self):
        self.set_y(-15)
        self.set_font('Arial', 'I', 8)
        self.cell(0, 10, f'Page {self.page_no()}', 0, 0, 'C')


def generate_math_questions(questions_number=100):
    """
    :param questions_number: 题目数量
     默认生成100道题,因为幼小衔接没有接触到 负数的概念,
     故加上 判断 num1 < num2 的判断条件,避免生成负数的题目
    """
    questions = []
    for i in range(questions_number):
        num1 = random.randint(1, 19)
        num2 = random.randint(1, 19)
        if num1 < num2:
            question = f'{num1}   {num2} ='
        else:
            operator = random.choice([' ', '-'])
            question = f'{num1} {operator} {num2} ='
        questions.append(question)
    return questions


def format_questions_to_pdf(questions):
    pdf = PDF()
    pdf.add_page()
    pdf.set_font('Arial', '', 12)

    row = 0
    col = 0
    for i, question in enumerate(questions):
        #print(i)
        if i % 3 == 0 and i != 0:
            row  = 1
            col = 0
        pdf.cell(65, 10, question, border=True)
        col  = 1
        if col == 3:
            col = 0
            pdf.ln(10)

    filename = 'math_questions.pdf'
    pdf.output(filename)


if __name__ == '__main__':
    questions = generate_math_questions(75)
    format_questions_to_pdf(questions)
    print('0-19 之间的随机加减法已经生成到文件 math_questions.pdf.')


生成的结果如下:

然后就可以连接打印机打印了。。

总结

其他家里有打印机的朋友,可以直接复制代码,自己生成在家里制作习题集。(需要安装 fpdf 模块)

P.S 希望 小朋友能玩的开心 ^_^

0 人点赞