成果样式:
![](https://i-blog.csdnimg.cn/blog_migrate/e7872fc2e0ad3e12af53ac6d1ebe7f33.png)
![](https://i-blog.csdnimg.cn/blog_migrate/871d2cdc43583c89e6283844ace1fbb7.png)
背景需求:
中班1位老师需要“排序类学具”供幼儿提高数能力。考虑到无法彩色打印图案,我暂时就设计一些数字、黑白图形(点、字符)的排序。针对中班年龄特点,先做《数字火车-升序1-9取5填空1》的实验
设计原理:
数字范围:在1-9之间,选择连续5个数字。并从中选择一个数字做填空
2、1-9连续数字:12345、23456、34567、45678、56789
以12345为例,可填空类型5个,('_2345、1_345、12_45、123_5、1234_')、所以5套连续数字一共25种组合。
素材准备:
素材位置
![](https://i-blog.csdnimg.cn/blog_migrate/35aea6f410c86c91ba7b16edd7bd3747.png)
word设置
![](https://i-blog.csdnimg.cn/blog_migrate/594a365cf264c3ef7cbfb8605bee75f0.png)
重点环节:
“1个空格+5个数”字一组,最后还要一个空格, 这种提取方式
![](https://i-blog.csdnimg.cn/blog_migrate/657b3843dc34317a33ec1e81f3c89c50.png)
![](https://i-blog.csdnimg.cn/blog_migrate/012477a29d2501408700d9ca7ad9faec.png)
代码演绎
# '''
# author:阿夏
# 原理:1-9升序,抽取5个连续数字,删除1个数字做填空.
# 结果:1-9数字连续5个数字空1格,最多25种排列方法
# 时间:2023-3-6 13:31
# '''
print('---------第1部分 制作题库(1-9之间升序排列的5个数字,其中有一个填空)----------')
# 制作"数字+空格"
s1=[]
for i in range(1,10): # ['1', '2', '3', '4', '5', '6', '7', '8', '9']
s2=' '
s3=str(i) +s2 # 数字加空格
s1.append(s3) # ['1 ', '2 ', '3 ', '4 ', '5 ', '6 ', '7 ', '8 ', '9 ']
print(s1)
n1=[]
l2=[]
b1=[]
# 制作“填空空格"
for l1 in range(5): # 0-8 =索引9
a1=s1[l1:l1+5]
print(a1)
# ['1', '2', '3', '4', '5']
# ['2', '3', '4', '5', '6']
# ['3', '4', '5', '6', '7']
# ['4', '5', '6', '7', '8']
# ['5', '6', '7', '8', '9']
# 循环5次
for b1 in range(5):
for b2 in a1:
print(b2)
n1.append(b2)
print(n1)
# ['1', '2', '3', '4', '5', '1', '2', '3', '4', '5', '1', '2', '3', '4', '5', '1', '2', '3', '4', '5', '1', '2', '3', '4', '5', '2', '3', '4', '5', '6', '2', '3', '4', '5', '6', '2', '3', '4', '5', '6', '2', '3', '4', '5', '6', '2', '3', '4', '5', '6', '3', '4', '5', '6', '7', '3', '4', '5', '6', '7', '3', '4', '5', '6', '7', '3', '4', '5', '6', '7', '3', '4', '5', '6', '7', '4', '5', '6', '7', '8', '4', '5', '6', '7', '8', '4', '5', '6', '7', '8', '4', '5', '6', '7', '8', '4', '5', '6', '7', '8', '5', '6', '7', '8', '9', '5', '6', '7', '8', '9', '5', '6', '7', '8', '9', '5', '6', '7', '8', '9', '5', '6', '7', '8', '9']
# 分成5部分5组
L3=[]
for c1 in range(0,int(len(n1)/25)):
c2=n1[c1*25:c1*25+25]
L3.append(c2)
print(L3)
# [['1', '2', '3', '4', '5', '1', '2', '3', '4', '5', '1', '2', '3', '4', '5', '1', '2', '3', '4', '5', '1', '2', '3', '4', '5'], ['2', '3', '4', '5', '6', '2', '3', '4', '5', '6', '2', '3', '4',
# '5', '6', '2', '3', '4', '5', '6', '2', '3', '4', '5', '6'], ['3', '4', '5', '6', '7', '3', '4', '5', '6', '7', '3', '4', '5', '6', '7', '3', '4', '5', '6', '7', '3', '4', '5', '6', '7'], ['4',
# '5', '6', '7', '8', '4', '5', '6', '7', '8', '4', '5', '6', '7', '8', '4', '5', '6', '7', '8', '4', '5', '6', '7', '8'], ['5', '6', '7', '8', '9', '5', '6', '7', '8', '9', '5', '6', '7', '8', '9', '5', '6', '7', '8', '9', '5', '6', '7', '8', '9']]
print(len(L3))
# 5
# 添加一个填空,组合其他部分
L4=[]
s3='_ ' # 填空的下划线“_ "(下划线+空格)
for d in range(len(L3)):
for c2 in range(5):
L4.append(s3) # 添加空格
b1=L3[d][c2*6+1:c2*6+6]
# 从索引1开始提取6个,12345变成"_23451_34512_^"
for l3 in b1:
L4.append(l3)
print(L4)
# 分成5部分*5组=25组
L5=[]
for c3 in range(int(len(L4)/5)):
b2=L4[c3*5:c3*5+5]
L5.append(b2)
print((L5))
# [['_', '2', '3', '4', '5'], ['1', '_', '3', '4', '5'], ['1', '2', '_', '4', '5'], ['1', '2', '3', '_', '5'], ['1', '2', '3', '4', '_'], ['_', '3', '4', '5', '6'], ['2', '_', '4', '5', '6'], ['2', '3', '_', '5', '6'], ['2', '3', '4', '_', '6'], ['2', '3', '4', '5', '_'], ['_', '4', '5', '6', '7'], ['3', '_', '5', '6', '7'], ['3', '4', '_', '6', '7'], ['3', '4', '5', '_', '7'], ['3', '4', '5', '6', '_'], ['_', '5', '6', '7', '8'], ['4', '_', '6', '7', '8'], ['4', '5', '_', '7', '8'], ['4', '5', '6', '_', '8'], ['4', '5', '6', '7', '_'], ['_', '6', '7', '8', '9'], ['5', '_', '7', '8', '9'], ['5', '6', '_', '8', '9'], ['5', '6', '7', '_', '9'], ['5', '6', '7', '8', '_']]
# L5等于题库(不重复)
print('---------第2部分 word里面的表格----------')
num=int(input('生成多少份(按班级人数)\n'))
Number=int(input('随机抽取几道题目(25取20)\n'))
size=float(input('数字大小(55、word单元格字号55,行间距55磅)\n'))
weight=int(input('表格列数(2列)\n'))
height=int(input('表格行数(10行)\n'))
# 表格位置
bg=[]
for x in range(0,height):
for y in range(0,weight):
ww='{}{}'.format(x,y)
bg.append(ww)
print(bg)
print('---------第3部分 word单元格内写入随机抽取题目,批量N份word,并转为pdf----------')
import random
from win32com.client import constants,gencache
from win32com.client.gencache import EnsureDispatch
from win32com.client import constants # 导入枚举常数模块
import os,time
import docx
from docx import Document
from docx.shared import Pt
from docx.shared import RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.oxml.ns import qn
from docxtpl import DocxTemplate
import pandas as pd
from docx2pdf import convert
from docx.shared import RGBColor
# 新建一个”装N份word和PDF“的临时文件夹
os.mkdir(r'C:\Users\jg2yXRZ\OneDrive\桌面\排序数字\零时Word')
for z in range(0,num): #多少份
# list=[] # [[],[],[]]的样式
doc = Document(r'C:\Users\jg2yXRZ\OneDrive\桌面\排序数字\数字排序模板10乘2.docx')
# for b in range(0,2): # 每份多少张
table = doc.tables[0] # 一共有1个表格
list=random.sample(L5,Number) # 10
print(list)
for t in range(0,len(list)): # 图案的长度为8*4=32个 遍历0-32(32个)
pp=int(bg[t][0]) # 提取表格bg里面每个元素的第0个数字==单元格X坐标 t=索引数字
qq=int(bg[t][1])
k=list[t] # 提取list图案列表里面每个图形 t=索引数字
print(pp,qq,k)
run=table.cell(pp,qq).paragraphs[0].add_run(k) # 在单元格0,0(第1行第1列)输入第0个图图案
run.font.name = '微软雅黑'#输入时默认华文彩云字体
run.font.size = Pt(size) #输入字体大小默认30号
run.font.color.rgb = RGBColor(200,200,200) #数字小,颜色深0-255
# paragraph.paragraph_format.line_spacing = Pt(180) #数字段间距
r = run._element
r.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')#将输入语句中的中文部分字体变为华文行楷
table.cell(pp,qq).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中
doc.save(r'C:\Users\jg2yXRZ\OneDrive\桌面\排序数字\零时Word\{}.docx'.format('%02d'%(z+1)))#保存为XX学号的电话号码word
from docx2pdf import convert
# docx 文件另存为PDF文件
inputFile = r"C:/Users/jg2yXRZ/OneDrive/桌面/排序数字/零时Word/{}.docx".format('%02d'%(z+1))# 要转换的文件:已存在
outputFile = r"C:/Users/jg2yXRZ/OneDrive/桌面/排序数字/零时Word/{}.pdf".format('%02d'%(z+1)) # 要生成的文件:不存在
# 先创建 不存在的 文件
f1 = open(outputFile, 'w')
f1.close()
# 再转换往PDF中写入内容
convert(inputFile, outputFile)
print('----------第4步:把都有PDF合并为一个打印用PDF------------')
# 多个PDF合并(CSDN博主「红色小小螃蟹」,https://blog.csdn.net/yangcunbiao/article/details/125248205)
import os
from PyPDF2 import PdfFileMerger
target_path = 'C:/Users/jg2yXRZ/OneDrive/桌面/排序数字/零时Word'
pdf_lst = [f for f in os.listdir(target_path) if f.endswith('.pdf')]
pdf_lst = [os.path.join(target_path, filename) for filename in pdf_lst]
pdf_lst.sort()
file_merger = PdfFileMerger()
for pdf in pdf_lst:
print(pdf)
file_merger.append(pdf)
file_merger.write("C:/Users/jg2yXRZ/OneDrive/桌面/排序数字/(打印合集)数字排序{}份.pdf".format(num))
file_merger.close()
# doc.Close()
# # print('----------第5步:删除临时文件夹------------')
import shutil
shutil.rmtree('C:/Users/jg2yXRZ/OneDrive/桌面/排序数字/零时Word') #递归删除文件夹,即:删除非空文件夹
终端展示:
终端输入参数
![](https://i-blog.csdnimg.cn/blog_migrate/8914b905edf4ef8e9466b451abeb570c.png)
输出单元格坐标
![](https://i-blog.csdnimg.cn/blog_migrate/3471c59d1858bf332105df530ebe495a.png)
从题库25题中随机抽取20题
![](https://i-blog.csdnimg.cn/blog_migrate/c38bcc3475f1787cf95c1dd57d72a296.png)
删除过渡零时文件
![](https://i-blog.csdnimg.cn/blog_migrate/872f9bd0294b17642fb6aa36066d11c2.png)
结果展示
合并PDF所在位置
![](https://i-blog.csdnimg.cn/blog_migrate/25ac131cb0bd9aea4a5be3ff73096383.png)
PDF内容每页都不同,即使有相同的5个数字,空缺的位置也不同。
![](https://i-blog.csdnimg.cn/blog_migrate/bb3e037d0f71d35236c2421a4d9272a8.png)
打印效果展示
![](https://i-blog.csdnimg.cn/blog_migrate/7887daa8a4e71970bcc3c512351ef922.png)
教学展示:
基本信息:
时间:2023年3月6日 15:00-15:20
班级:中3班
人数:20人
教学目的:
1、自主书写学号
2、1-9数字的序列,缺失数字填空
3、描画灰色数字,数字书写工具练习
照片:
![](https://i-blog.csdnimg.cn/blog_migrate/71bcb3bd037ca3ce314c39edcfec2ad1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/711f49610bf9e5a395c3b0650960383d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/16c91be1d42b718b1b24dd18ef0ad46c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1155243d5d6a73b5946d557757cbd2ff.png)
![](https://i-blog.csdnimg.cn/blog_migrate/88469390003e110940e17155b463e97e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ff0921ee6fff1306c3784645e11ebfc0.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4253e54c936a853215d2f79101e46cbe.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b92c65b8b7921876e6049d6267fff291.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d25715baa7d655fa37610fa37b2a0b79.png)
![](https://i-blog.csdnimg.cn/blog_migrate/60bbeab0a1d594dca961be91365cf49b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b7e1707da2734bf268e92c4363712772.png)
![](https://i-blog.csdnimg.cn/blog_migrate/61b2d7828f682b9c72482ddf056f03b6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/62e6b26d1142591dd62f19dfd7842282.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2af60dba8a7736910691f2a12db0c058.png)
![](https://i-blog.csdnimg.cn/blog_migrate/76c537a58e67f9440d1c195b9abe9f35.png)
![](https://i-blog.csdnimg.cn/blog_migrate/95c5cf6e4fea23718ad24a871b14e9c9.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e42928a4554e473291436446b1c11e49.png)
感悟:
“哇,这是连连看吗?”中1班孩子看到我拿出来的一刀数字纸,兴奋起来,“好多数字啊!”
教学活动中,我强调了学号的书写,然后稍微讲解了缺失数字的填写方法:“从1念到9”
“如果不知道要写什么,就用铅笔、记号笔把灰色数字描一下,变黑色。”
一、群体描字
最初孩子们都不了解题型要做什么,但2/3孩子能够理解“画数字”的意思,就提笔开始从左上角、右下角开始对灰色数字进行描字。
二、教师指导
我随机对一组中写的最快的孩子进行指导:
“你看,这里有个空,缺了什么数字?”
“……”孩子沉默
“34多少67”
“……”
“34567,这个空写5”
他把数字写上去,
“这个234,1234后面是数字几?“
“……”
“23456.这里空就是6,写上去吧”
示范了2-3次,男孩子就理解了,指着下一道题,“这里是写2吗”
“对了,12345!”
三、互相观摩
(一)理解题目的孩子:每组总有见过、做过升序数字填空的孩子,他们完成填空的速度很快(22号的作业)
![](https://i-blog.csdnimg.cn/blog_migrate/63d694c1c084e94967a93025cae0187a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7700f91a2714e6bf238894b89c52889b.png)
(二)不理解只描字的孩子:同组的孩子就会张望观摩同伴的行为,由于座位倒置,所以同组孩子一般也看不懂结题原理。只是观摩。实在看不懂,就继续埋头描画灰色数字了。
![](https://i-blog.csdnimg.cn/blog_migrate/380fa19b27b851a3b1029de328868723.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b7f30a9a5abf78ffd40e1c39236efbe7.png)
(三)顿悟的孩子:有5位孩子描了几道数字后,突然顿悟了“老师,这里是不是3”“这里是6吗?”“这里写7,对吗”。“真聪明!是的”我大大鼓励后他们继续填写自己会填写的空。
(1)空格的位置对填写结果的影响。如果第一个数字是空,孩子们很难填写,如果空格在2-5位(索引1-4)),60%的孩子能够根据口诀(123456789)朦胧地猜测升序排列的数字。因此不少孩子是随机跳着填写空缺数字。
![](https://i-blog.csdnimg.cn/blog_migrate/121ea4f75f010edd7ad77f289ef1a934.png)
(2)孩子不知道如何书写某个数字。“……3456789,9我不会写!”一位男孩嘀咕道,我立刻在作业纸的其他位置找到了一个9,“9在这里,你照着画一下”
(四)完成的孩子。不少理解题型的孩子很快就完成了填空题。我劝他们“再把灰色数字描一描,练练手。”
(1)不描字:有一位男孩坚决摇头拒绝“我不想画”“好吧,那就放到作业袋吧”。
(2) 描字: 其他男孩女孩基本都听我的提示,回到座位上继续用记号笔、铅笔描灰色字。以至于15分钟后一位女孩好不容易描完所有数字,拿着整页的黑色数字让我拍照时,大大的感叹:“写的我手都快断了!”
![](https://i-blog.csdnimg.cn/blog_migrate/f086f28672e8d57cc73b4bccfca5f4fb.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ffed838f7341c14f2d06fbdb09612bb6.png)
(3) 代练:一位完成的男孩把作业放回作业袋,喝完水回到座位上无所事事,就开始观察周围的同伴。他主动对身边的同桌男孩说:“这里是5,这里写7”,两人互相讨论几句,同桌主动把作业纸递给他,“你帮我!”“好的”速度快的男孩就直接在他的作业上飞速地答题,做了5题后,同桌似乎有点看懂了,把作业要了回去,尝试自己填写,由于速度慢,速度快的男孩又在旁边指点江山,惹得同桌有些烦躁:“我会了,你不要说!”
![](https://i-blog.csdnimg.cn/blog_migrate/da429e1d8074d8a03640e211c86f74c4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/349da297e201cf7a15d57833f25a4916.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e36e5f4d11eb8b62ff670fb83d43c5a5.png)
(4)代做:很快这位速度快的男孩又看到对面的同伴似乎有些困难,他立刻招呼对方是否需要自己的帮助,这一次对面的男孩同样把作业交给他,然后看着速度快的男孩帮他把填空全部完成(垂直状态,估计也),表示感谢,收回了自己的作业纸,认真欣赏了一会儿。请老师拍照。
![](https://i-blog.csdnimg.cn/blog_migrate/525de48192ddce89fb5db6318dbe9ac5.png)
(五)书写姿势。有一位男孩的捏笔手势不正确(握拳抓笔),虽他然也非常努力用铅笔描画了部分灰字,但线条虚浮(几乎看不出画过)。考虑到年龄关系、手指肌群发育不完善、练习少等情况,我稍微指导他正确的手势,可是孩子很快又调整回抓笔的手势。
从书写内容来看,他用铅笔东一字、西一个字跳着随机描画不同位置的灰色数字,由于之前的某一题答案是8,所以他在后面所有空缺的格子里,坚定地反复写8——处在数字练习巩固的阶段。
![](https://i-blog.csdnimg.cn/blog_migrate/a232660ada1ce2e00e0e24cbdc3cf57d.png)
四、其他文字
1、你帮我名字!一位女孩写完后吵着要让老师帮他写大名:“老师帮我写的名字DXY”。我用铅笔把她的三个汉字名字写在学号位置上(因为她把学号写在班级位置上了),“那个记号笔把你的名字描一下吧”
2、我会写名字!女孩同组男孩看到她在描名字,也不甘示弱“我会写我的名字!”他用铅笔也在学号的位置上开始一笔一划地写他的名字“WBY”,因为他的座位里作业袋架子很近,很快几位放好作业的男孩过来微观他书写名字,满脸羡慕。
![](https://i-blog.csdnimg.cn/blog_migrate/dbd8a20839c570b197e040d2f8e9b256.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7424825ba3b9a02a7f1b63f59be8b9f8.png)
3、书写班级号:几位男孩的头凑在一起,我一看,其中一位模仿绘画”中“”字,产生了“中5678”效果。“哈哈,你们是中1班,其实中班是写在最上面”。我稍微讲解一下,一位男孩就立刻提笔在自己作业纸的顶部,班级的位置写了“1中”的字样。明显可以看到他早就有书写班级号的经验。
![](https://i-blog.csdnimg.cn/blog_migrate/283612b4a69492f0d34841fb243abb9e.png)
五、总体感悟:
幼儿人力资源:需要幼儿中的学科带头人,成为同伴观摩的对象。有一位孩子能理解,就成为同组其他孩子的观摩对象。一定程度解决教师人力指导资源不足的问题。
学具中的灰色:“描字”可以让“不会做”的孩子有事可做,也可以让“快”的孩子精益求精(“磨时间”)一定程度解决能力水平差异产生的“时间差”问题,有助于安全、时长的把控。
幼儿自我学习:在幼儿已有的数序列认知经验(念诵1-10)基础上,不少孩子是在自我的观察中顿悟到填空的方法。在得到教师、同伴的肯定后,他们很快就在20题中挑选有把握的题目进行答题。
教师提示指导:教师会主动对没有填空的孩子进行指导,除了几位基础的孩子可以3次左右给反馈,大部分孩子不能迅速理解并做出反馈,而教师能分给他们的时间也就不到1分钟。因此大部分情况下,孩子还需要大量观摩同伴的作业,与同伴沟通交流,观看同伴为自己做作业,空着让家长讲解、等待未来逐步理解……等方式,初步理解“升序5填空1”的做题原理。
![](https://i-blog.csdnimg.cn/blog_migrate/00b4443056eabfe07e786565519e42c2.png)
PS优化前的代码
在使用”索引数字替换空格,列表抽取5个数字、只生成25题“的代码之前,我是用“随机数字生成大量题目并去重复set(200题)随机抽取大量题目,去重后留下25题”的方法。
这个代码的缺点
运行时间长,每一次选取题目都要经历200次抽取,再去掉重复
list有升序和降序时,抽取的所有内容正序和倒叙都混在一起,抽取的题目正序和倒叙数量不等。
所以我才不想用随机数生成并替换,而改成索引数字替换。
# 以下制作25题题库(不重复题目)
list1=['123456789','987654321']# 被抽取序列
cc=['04','40']# 索引位置
l1=[]
for num in range(1,num+1):
# 做出所有基本的25题题库,做成'4 '样式
for ww in range(len(list1)): # 循环2套题目
for i in range(200): # 生成尽可能多地题目,便于去重
s=random.randint(0,4) # 1-4之间的随机数
# print(s) # 1234之间的随机数 3
list_five=list1[ww][s:s+5] # 从list里随机抽取连续五个数字23456、678910
# print(list_five) # 45678 3和3后面5个数字
cc1=int(cc[ww][0]) # 从CC选择第0组的第1个数字0
cc2=int(cc[ww][1]) # 从cc选择第0组的第2个数字4
s1=int(list_five[cc1])
s2=int(list_five[cc2])
# print(s1, s2) # 抽取45678的第一个4 最后一个8
r=random.randint(s1,s2) # 再4-8之间随机抽取一个数字替换成“_”下划线
# print(r) # 4-8之间随机抽了一个6
c= list_five.replace('{}'.format(int(r)),'_') # # 把6变成整数 替换成'_'="45_78"
m.append(c) # 把抽取出来的"45_78"添加到数组 ['12_45', '4_678', '2345_']
# 替换成带数字+空格的
e=' ' # 空格
j=[]
for w in m: # 从去重的n里面 加上空格
# print(w)
for z in w:
f=z+e
# print(f) # ['5 ', '6 ', '7 ', '8 ', '_ ', '1 ', '2 ', '_ ', '4 ', '5 ']
j.append(f)
print(j)
# 变成5个一组
for r in range(int(len(j)/5)):
y=j[5*r:5*r+5]
a.append(y)
print(a)
print(len(a)) # [['5 ', '_ ', '7 ', '8 ', '9 '], ['6 ', '5 ', '_ ', '3 ', '2 ']]
# 25题 题库完成:
# 去重
n= list(set(j)) # 随机抽取几百题可能会题目重复, 一种去重的方法,用list,所以列表list要用其他名字.,
print('正序最大不重复数目{}'.format(int(len(n)/2)))
rst=int(len(n)) # 一共50个,正序25条,逆序25条
print(n)