孩子现在一年级了,在学习数学怎么计算, 老师也教了很多计算方法。
凑十法核心口诀:看大数,分小数。凑成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()