作品展示:控制数字出现的次数大于10次![](https://img-blog.csdnimg.cn/direct/52253364843c4629b729a9cfeb7fd204.png)
500次生成图片,纸上大约80个圆圈,但数字12只有7张,数量少,得幼儿找数字会很快了。
![](https://img-blog.csdnimg.cn/direct/928522300b2346d09201f270b43fac0b.png)
所以我需要控制数字12出现的次数,比如数字12至少出现10次
'''
数感训练-0-10数字,指定数字至少出现10次
AI对话大师,阿夏
2024年5月22日
'''
import random
import math
from PIL import Image, ImageDraw, ImageFont
from collections import Counter
import os
path = r'C:\Users\jg2yXRZ\OneDrive\桌面\数字数感训练\jpg'
canvas_width, canvas_height = 3000, 4000 # 调整画布的宽度和高度
numbers = [i for i in range(10, 20)]
print(numbers)
# 指定数字至少出现几次
cs=10
n = 10
nn = []
for i in numbers:
while True:
numbers_written = [] # 存储成功绘制的圆圈内的数字
# 创建白色画布
canvas_color = (255, 255, 255)
canvas = Image.new('RGB', (canvas_width, canvas_height), canvas_color)
draw = ImageDraw.Draw(canvas)
# 字体设置
font_path = r"C:\Windows\Fonts\simhei.ttf" # 黑体字体路径,请根据实际情况修改
font_size = 500
font = ImageFont.truetype(font_path, font_size)
# 在左上角绘制阴影效果
shadow_color = (100, 100, 100)
shadow_offset = (8, 8)
draw.text((100 + shadow_offset[0], 100 + shadow_offset[1]), f'{i}', font=font, fill=shadow_color)
# 在左上角绘制数字1
text_color = (0, 0, 0)
draw.text((100, 100), f'{i}', font=font, fill=text_color)
# 生成10磅黑线白色圆圈
circle_radius = 100
circle_border_color = (0, 0, 0)
circle_fill_color = (255, 255, 255)
border_width = 10
circle_distance = 60 + circle_radius * 2 # 圆圈之间的距离
bj = 30 # 圆形与边框的距离
# 存储圆圈的位置信息,用于检查是否相交
circle_positions = []
# 阿拉伯数字字体设置
number_font_size = 150
number_font = ImageFont.truetype(font_path, number_font_size)
circle_positions = []
numbers_written = []
for _ in range(5000):
# 生成圆心位置
x = random.randint(circle_radius + border_width + bj, canvas_width - circle_radius - border_width - bj)
y = random.randint(circle_radius + border_width + bj, canvas_height - circle_radius - border_width - bj)
# 排除左上角区域
if x <= 800 and y <= 800:
continue
# 检查与已有圆圈是否相交
is_intersect = False
for position in circle_positions:
distance = math.sqrt((x - position[0]) ** 2 + (y - position[1]) ** 2)
if distance < circle_distance:
is_intersect = True
break
if not is_intersect:
# 绘制外圆,边线粗细为10磅
outer_circle_radius = circle_radius + border_width
outer_circle_bbox = (
x - outer_circle_radius, y - outer_circle_radius, x + outer_circle_radius, y + outer_circle_radius)
draw.ellipse(outer_circle_bbox, fill=circle_border_color)
# 绘制内圆,填充为白色
inner_circle_radius = circle_radius
inner_circle_bbox = (
x - inner_circle_radius, y - inner_circle_radius, x + inner_circle_radius, y + inner_circle_radius)
draw.ellipse(inner_circle_bbox, fill=circle_fill_color)
# 在圆圈内绘制随机生成的阿拉伯数字
number = random.choice(numbers)
number_width, number_height = draw.textsize(str(number), font=number_font)
number_x = x - number_width // 2
number_y = y - number_height // 2
draw.text((number_x, number_y), str(number), font=number_font, fill=(0, 0, 0))
# 将圆圈位置添加至列表
circle_positions.append((x, y))
numbers_written.append(number)
number_counts = Counter(numbers_written)
count_10 = number_counts[i]
print("实际生成的圆圈数量:", len(circle_positions))
print("生成圆圈中的数字:", numbers_written)
print("每种数字的数量:", number_counts)
print(f"数字 {i} 的数量:", count_10)
if count_10 >= cs:
# 保存为1.png
image_path = path + fr'\{i}.png'
canvas.save(image_path)
n += 1
break
else:
print(f"数字 {i} 的数量小于 {cs} 次,重新生成圆圈。")
# 删除未保存的图片
image_path = path + fr'\{i}.png'
if os.path.exists(image_path):
os.remove(image_path)
continue
结果展示:
数字随机出现次数>10
![](https://img-blog.csdnimg.cn/direct/e2543a7a91f64ee9b61aba2f4a7f20d1.png)
![](https://img-blog.csdnimg.cn/direct/52253364843c4629b729a9cfeb7fd204.png)
![](https://img-blog.csdnimg.cn/direct/68e3eac48d4a48bfb9841401fe617aca.png)
![](https://img-blog.csdnimg.cn/direct/8edb7dc24fe34413afb6f2361a20b2c9.png)
![](https://img-blog.csdnimg.cn/direct/c8ffe696182649d097827e66beb0287b.png)
![](https://img-blog.csdnimg.cn/direct/73bc82a8e38f4773b9ddb851e9a132f4.png)
![](https://img-blog.csdnimg.cn/direct/c162226f621a4cdfa0385ba47b906814.png)
![](https://img-blog.csdnimg.cn/direct/6ec21a94e0be4cf9874a10e430e59245.png)
如果改成15次
![](https://img-blog.csdnimg.cn/direct/9e8d6eb44a4745b49b6ad957c8321405.png)
因为是随机抽取,所以很难保证指定数字大于15,需要反复抽取很多次
![](https://img-blog.csdnimg.cn/direct/43e3058c3ac143538b5ef30aa089abd8.png)
![](https://img-blog.csdnimg.cn/direct/b0764db2cbe844668f6e76c7710d2709.png)
![](https://img-blog.csdnimg.cn/direct/93312c0cbdf545d68e198cab94e0cef5.png)
![](https://img-blog.csdnimg.cn/direct/5ec73642c0a94be48fb9be6babfc9647.png)
![](https://img-blog.csdnimg.cn/direct/610ca11dbc354977bc1895142e258f2b.png)
这样就可以控制数字出现的数量了。
教学实践:
时间:2024年5月24日
班级:中4
人数:5人(百日咳隔离)
数字:打印10-19,每张数字都在15个以上
![](https://img-blog.csdnimg.cn/direct/302a5134ebad4f02b17ea6e8d4350915.png)
![](https://img-blog.csdnimg.cn/direct/9a7b94ed24c2497f8dfbcc3b7f54bc23.png)
![](https://img-blog.csdnimg.cn/direct/19f898fd238847d1bad71026d94c0bf4.png)
![](https://img-blog.csdnimg.cn/direct/67f2a90cf894443285a9fc2e9317211b.png)
![](https://img-blog.csdnimg.cn/direct/b887da04ef09400a8f73987d54b4e4fb.png)
![](https://img-blog.csdnimg.cn/direct/9f1b4d1f5880436cb26636dc612978be.png)
![](https://img-blog.csdnimg.cn/direct/f0bb9707f1384ec1a7210a3fbc00aae7.png)
![](https://img-blog.csdnimg.cn/direct/eecfb99e287a412db5e46cf62597b36a.png)
教学反思:
1、中班下学期孩子辨认指定数字都没问题。15为幼儿完成太快了,都是正确的。我让他们点数“数字”出现了几次。只有16号统计了总数,并且做了3张数感练习。
2、幼儿用彩色笔圈画方式找数字(我一直以为这个数感训练是圆圈涂色,那样容易遮挡数字)
3、幼儿把指定数字当做学号“我没有找到我的学号!”
后续:
1、生成1-31个代表学号的数字,每位孩子选自己的学号纸,进行数感练习。
2、每张纸上可以有所有孩子的名字,让幼儿圈出自己的名字或者认识的汉字
3、对指定数字出现的频率进行数量统计,如数字11出现了15次
4、为了让孩子多圈一会儿,可能要把圆圈大小和文字都变小
![](https://img-blog.csdnimg.cn/direct/13da86a5df744415b49a43c3a6ab61ec.png)