小学一年级数学题创建(凑十,破十,平十,借十)

孩子现在一年级了,在学习数学怎么计算, 老师也教了很多计算方法。

凑十法核心口诀:看大数,分小数。凑成10,加剩数。

破十法核心口诀:看大数,分出10,一减一加算得数。

平十法核心口诀:分小数,连续相减算得数。

借十法核心口诀:看大数,分出10,减小数,加剩数

孩子画图形有点慢, 所以把图形给他画出来,通过随机数的方式生成随机的计算公式,让孩子锻炼计算能力。

生成效果如下:

python缺少绘图包引入:

pip3 show Pillow

pip3 install Pillow==8.4.0

具体代码:

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import random
from PIL import Image, ImageDraw, ImageFont


def draw_line(draw, lines, fill='black', width=3):
    for i, cell in enumerate(lines):
        if i < (len(lines) - 1):
            draw.line([cell, lines[i + 1]], fill=fill, width=width)


def draw_square(draw, x, y, radio):
    draw_line(draw, [
        (x - radio, y - radio),
        (x - radio, y + radio),
        (x + radio, y + radio),
        (x + radio, y - radio),
        (x - radio, y - radio),
    ])


def left_add(start, end):
    # 创建一个新的白色图像
    width, height = 500, 500  # 图像的大小,可以根据需要调整
    image = Image.new('RGB', (width, height), 'white')

    # 获取绘图对象
    draw = ImageDraw.Draw(image)
    draw_square(draw, 250, 250, 250)
    draw.text((40, 40), str(start), fill='black', font=ImageFont.truetype('simfang.ttf', size=60))
    draw.text((140, 40), "+", fill='black', font=ImageFont.truetype('simfang.ttf', size=60))
    draw.text((240, 40), str(end), fill='black', font=ImageFont.truetype('simfang.ttf', size=60))
    draw.text((340, 40), "=", fill='black', font=ImageFont.truetype('simfang.ttf', size=60))
    # 三方方框
    draw_square(draw, 450, 60, 40)
    draw_square(draw, 150, 250, 40)
    draw_square(draw, 350, 250, 40)
    # 两个斜线
    draw_line(draw, [(150, 210), (250, 100), (350, 210)])
    # 最左侧的竖线
    draw_line(draw, [(50, 100), (50, 350), (150, 350), (150, 290)])
    # 底下横线
    draw_line(draw, [(130, 390), (350, 390), (350, 290)])
    draw.text((70, 360), "10", fill='black', font=ImageFont.truetype('simfang.ttf', size=60))
    draw.text((90, 300), "+", fill='black', font=ImageFont.truetype('simfang.ttf', size=60))
    draw.text((230, 330), "+", fill='black', font=ImageFont.truetype('simfang.ttf', size=60))
    return image


def right_add(start, end):
    # 创建一个新的白色图像
    width, height = 500, 500  # 图像的大小,可以根据需要调整
    image = Image.new('RGB', (width, height), 'white')

    # 获取绘图对象
    draw = ImageDraw.Draw(image)
    draw_square(draw, 250, 250, 250)
    draw.text((110, 40), str(start), fill='black', font=ImageFont.truetype('simfang.ttf', size=60))
    draw.text((190, 40), "+", fill='black', font=ImageFont.truetype('simfang.ttf', size=60))
    draw.text((270, 40), str(end), fill='black', font=ImageFont.truetype('simfang.ttf', size=60))
    draw.text((350, 40), "=", fill='black', font=ImageFont.truetype('simfang.ttf', size=60))
    # 三方方框
    draw_square(draw, 450, 60, 40)
    draw_square(draw, 50, 250, 40)
    draw_square(draw, 200, 250, 40)
    # 两个斜线
    draw_line(draw, [(50, 210), (120, 100), (200, 210)])
    # 最左侧的竖线
    draw_line(draw, [(280, 100), (280, 350), (200, 350), (200, 290)])
    # 底下横线
    draw_line(draw, [(50, 290), (50, 390), (230, 390)])
    draw.text((230, 360), "10", fill='black', font=ImageFont.truetype('simfang.ttf', size=60))
    draw.text((130, 330), "+", fill='black', font=ImageFont.truetype('simfang.ttf', size=60))
    draw.text((220, 300), "+", fill='black', font=ImageFont.truetype('simfang.ttf', size=60))
    return image


def right_sub(start, end):
    # 创建一个新的白色图像
    width, height = 500, 500  # 图像的大小,可以根据需要调整
    image = Image.new('RGB', (width, height), 'white')

    # 获取绘图对象
    draw = ImageDraw.Draw(image)
    draw_square(draw, 250, 250, 250)
    draw.text((110, 40), str(start), fill='black', font=ImageFont.truetype('simfang.ttf', size=60))
    draw.text((190, 40), "-", fill='black', font=ImageFont.truetype('simfang.ttf', size=60))
    draw.text((270, 40), str(end), fill='black', font=ImageFont.truetype('simfang.ttf', size=60))
    draw.text((350, 40), "=", fill='black', font=ImageFont.truetype('simfang.ttf', size=60))
    # 三方方框
    draw_square(draw, 450, 60, 40)
    draw_square(draw, 50, 250, 40)
    draw_square(draw, 200, 250, 40)
    draw_square(draw, 240, 390, 40)
    # 两个斜线
    draw_line(draw, [(50, 210), (120, 100), (200, 210)])
    # 三段线
    draw_line(draw, [(280, 100), (280, 330), (200, 330), (200, 290)])
    # 两段线
    draw_line(draw, [(50, 290), (50, 390), (200, 390)])
    draw_line(draw, [(240, 350), (240, 330)])
    draw.text((170, 220), "10", fill='black', font=ImageFont.truetype('simfang.ttf', size=60))
    draw.text((130, 330), "+", fill='black', font=ImageFont.truetype('simfang.ttf', size=60))
    draw.text((220, 280), "-", fill='black', font=ImageFont.truetype('simfang.ttf', size=60))
    return image


def left_sub(start, end):
    # 创建一个新的白色图像
    width, height = 500, 500  # 图像的大小,可以根据需要调整
    image = Image.new('RGB', (width, height), 'white')

    # 获取绘图对象
    draw = ImageDraw.Draw(image)
    draw_square(draw, 250, 250, 250)
    draw.text((40, 40), str(start), fill='black', font=ImageFont.truetype('simfang.ttf', size=60))
    draw.text((140, 40), "-", fill='black', font=ImageFont.truetype('simfang.ttf', size=60))
    draw.text((240, 40), str(end), fill='black', font=ImageFont.truetype('simfang.ttf', size=60))
    draw.text((340, 40), "=", fill='black', font=ImageFont.truetype('simfang.ttf', size=60))
    # 三方方框
    draw_square(draw, 450, 60, 40)
    draw_square(draw, 150, 250, 40)
    draw_square(draw, 350, 250, 40)
    # 两个斜线
    draw_line(draw, [(150, 210), (250, 100), (350, 210)])
    # 最左侧的竖线
    draw_line(draw, [(50, 100), (50, 350), (150, 350), (150, 290)])
    # 底下横线
    draw_line(draw, [(130, 390), (350, 390), (350, 290)])
    draw.text((70, 360), "10", fill='black', font=ImageFont.truetype('simfang.ttf', size=60))
    draw.text((90, 300), "-", fill='black', font=ImageFont.truetype('simfang.ttf', size=60))
    draw.text((230, 330), "-", fill='black', font=ImageFont.truetype('simfang.ttf', size=60))
    return image


def get_add_param():
    x = random.randint(1, 9)
    y = random.randint(1, 9)
    if x + y <= 10 or x==y:
        return get_add_param()
    return (min(x, y),max(x,y))
def get_min_param(check:False):
    x = random.randint(11, 19)
    y = random.randint(2, 9)
    if y+10<x and check:
        return get_min_param(check)
    return x,y

for name in range(10):
    # 创建一个新的空白图像作为拼接后的长图
    new_img = Image.new('RGB', (2100, 2970), 'white')
    x_start = 50
    y_start = 420
    draw = ImageDraw.Draw(new_img)
    draw.text((50, 200), "我家宝宝是最棒的. 挑战10分钟做完. 日期: ________ ", fill='black', font=ImageFont.truetype('simfang.ttf', size=80))
    for i in range(5):
        (x,y)=get_add_param()
        new_img.paste(left_add(y,x), (x_start, y_start + i * 500))
        (x1, y1) = get_add_param()
        new_img.paste(right_add(x1,y1), (x_start + 1 * 500, y_start + i * 500))
        x,y=get_min_param(True)
        new_img.paste(left_sub(x,y), (x_start + 2 * 500, y_start + i * 500))
        x, y = get_min_param(False)
        new_img.paste(right_sub(x,y), (x_start + 3 * 500, y_start + i * 500))

    new_img.save("{}.png".format(name))
    # 显示图像(可选,需要安装Pillow的显示功能或另一个图像查看器)
    # new_img.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值