前言
家里有小孩已经上大班,明年入学小学一年级,现在开始加减法的数学训练,于是乎我在网上查看了很多幼小衔接的数学题,都是随机生成的 计算公式,比如 《每日30题》 ,《一日一练》 等等。
想着利用 python的 random 随机函数功能随机生成指定数据量的题目,当做日常练习题。(我儿子长大看到这篇文章 ,会不会举报我 )
实现
基本需求:
- 两数之算术运算结果小于40,当然也可以小于50 ,可以指定。
- 生成的算术公式格式化存储到 pdf ,方便打印。
- 题目太密集不好,不方便小孩眼睛观察题目,当然不能太稀疏,容易浪费纸张。
代码实现
代码语言: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 希望 小朋友能玩的开心 ^_^