前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数学算术计算自动生成器

数学算术计算自动生成器

作者头像
用户1278550
发布2023-11-01 20:17:08
1810
发布2023-11-01 20:17:08
举报
文章被收录于专栏:idbaidba

前言

家里有小孩已经上大班,明年入学小学一年级,现在开始加减法的数学训练,于是乎我在网上查看了很多幼小衔接的数学题,都是随机生成的 计算公式,比如 《每日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 希望 小朋友能玩的开心 ^_^

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-10-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yangyidba 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 实现
  • 代码实现
  • 总结
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档