【教学类-24-01】20230306《数字火车-升序1-9取5填空1》(中班《玩具总动员》)

本文描述了一位教师为中班设计的数学学具——数字火车,通过编程生成填空题库,帮助幼儿提高数能力。教师首先确定设计原则,然后编写Python代码来生成1-9数字间的升序排列,从中取5个数字并删除一个数字作为填空。代码演示了如何创建题库,以及如何将题库内容写入Word表格,最终转换成PDF文件供打印使用。教学展示部分记录了孩子们在活动中的反应和学习过程,强调了理解和实践的重要性。
摘要由CSDN通过智能技术生成

成果样式:

背景需求:

中班1位老师需要“排序类学具”供幼儿提高数能力。考虑到无法彩色打印图案,我暂时就设计一些数字、黑白图形(点、字符)的排序。针对中班年龄特点,先做《数字火车-升序1-9取5填空1》的实验

设计原理:

  1. 数字范围:在1-9之间,选择连续5个数字。并从中选择一个数字做填空

2、1-9连续数字:12345、23456、34567、45678、56789

  1. 以12345为例,可填空类型5个,('_2345、1_345、12_45、123_5、1234_')、所以5套连续数字一共25种组合。

素材准备:

素材位置

word设置

重点环节:

“1个空格+5个数”字一组,最后还要一个空格, 这种提取方式

代码演绎

# '''
# 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') #递归删除文件夹,即:删除非空文件夹


终端展示:

终端输入参数

输出单元格坐标

从题库25题中随机抽取20题

删除过渡零时文件

结果展示

合并PDF所在位置

PDF内容每页都不同,即使有相同的5个数字,空缺的位置也不同。

打印效果展示

教学展示:

基本信息:

时间:2023年3月6日 15:00-15:20

班级:中3班

人数:20人

教学目的:

1、自主书写学号

2、1-9数字的序列,缺失数字填空

3、描画灰色数字,数字书写工具练习

照片:

感悟:

“哇,这是连连看吗?”中1班孩子看到我拿出来的一刀数字纸,兴奋起来,“好多数字啊!”

教学活动中,我强调了学号的书写,然后稍微讲解了缺失数字的填写方法:“从1念到9”

“如果不知道要写什么,就用铅笔、记号笔把灰色数字描一下,变黑色。”

一、群体描字

最初孩子们都不了解题型要做什么,但2/3孩子能够理解“画数字”的意思,就提笔开始从左上角、右下角开始对灰色数字进行描字。

二、教师指导

我随机对一组中写的最快的孩子进行指导:

“你看,这里有个空,缺了什么数字?”

“……”孩子沉默

“34多少67”

“……”

“34567,这个空写5”

他把数字写上去,

“这个234,1234后面是数字几?“

“……”

“23456.这里空就是6,写上去吧”

示范了2-3次,男孩子就理解了,指着下一道题,“这里是写2吗”

“对了,12345!”

三、互相观摩

(一)理解题目的孩子:每组总有见过、做过升序数字填空的孩子,他们完成填空的速度很快(22号的作业)

(二)不理解只描字的孩子:同组的孩子就会张望观摩同伴的行为,由于座位倒置,所以同组孩子一般也看不懂结题原理。只是观摩。实在看不懂,就继续埋头描画灰色数字了。

(三)顿悟的孩子:有5位孩子描了几道数字后,突然顿悟了“老师,这里是不是3”“这里是6吗?”“这里写7,对吗”。“真聪明!是的”我大大鼓励后他们继续填写自己会填写的空。

(1)空格的位置对填写结果的影响。如果第一个数字是空,孩子们很难填写,如果空格在2-5位(索引1-4)),60%的孩子能够根据口诀(123456789)朦胧地猜测升序排列的数字。因此不少孩子是随机跳着填写空缺数字。

2)孩子不知道如何书写某个数字。“……3456789,9我不会写!”一位男孩嘀咕道,我立刻在作业纸的其他位置找到了一个9,“9在这里,你照着画一下”

(四)完成的孩子。不少理解题型的孩子很快就完成了填空题。我劝他们“再把灰色数字描一描,练练手。”

(1)不描字:有一位男孩坚决摇头拒绝“我不想画”“好吧,那就放到作业袋吧”。

(2) 描字: 其他男孩女孩基本都听我的提示,回到座位上继续用记号笔、铅笔描灰色字。以至于15分钟后一位女孩好不容易描完所有数字,拿着整页的黑色数字让我拍照时,大大的感叹:“写的我手都快断了!”

(3) 代练:一位完成的男孩把作业放回作业袋,喝完水回到座位上无所事事,就开始观察周围的同伴。他主动对身边的同桌男孩说:“这里是5,这里写7”,两人互相讨论几句,同桌主动把作业纸递给他,“你帮我!”“好的”速度快的男孩就直接在他的作业上飞速地答题,做了5题后,同桌似乎有点看懂了,把作业要了回去,尝试自己填写,由于速度慢,速度快的男孩又在旁边指点江山,惹得同桌有些烦躁:“我会了,你不要说!”

(4)代做:很快这位速度快的男孩又看到对面的同伴似乎有些困难,他立刻招呼对方是否需要自己的帮助,这一次对面的男孩同样把作业交给他,然后看着速度快的男孩帮他把填空全部完成(垂直状态,估计也),表示感谢,收回了自己的作业纸,认真欣赏了一会儿。请老师拍照。

(五)书写姿势。有一位男孩的捏笔手势不正确(握拳抓笔),虽他然也非常努力用铅笔描画了部分灰字,但线条虚浮(几乎看不出画过)。考虑到年龄关系、手指肌群发育不完善、练习少等情况,我稍微指导他正确的手势,可是孩子很快又调整回抓笔的手势。

从书写内容来看,他用铅笔东一字、西一个字跳着随机描画不同位置的灰色数字,由于之前的某一题答案是8,所以他在后面所有空缺的格子里,坚定地反复写8——处在数字练习巩固的阶段。

四、其他文字

1、你帮我名字!一位女孩写完后吵着要让老师帮他写大名:“老师帮我写的名字DXY”。我用铅笔把她的三个汉字名字写在学号位置上(因为她把学号写在班级位置上了),“那个记号笔把你的名字描一下吧”

2、我会写名字!女孩同组男孩看到她在描名字,也不甘示弱“我会写我的名字!”他用铅笔也在学号的位置上开始一笔一划地写他的名字“WBY”,因为他的座位里作业袋架子很近,很快几位放好作业的男孩过来微观他书写名字,满脸羡慕。

3、书写班级号:几位男孩的头凑在一起,我一看,其中一位模仿绘画”中“”字,产生了“中5678”效果。“哈哈,你们是中1班,其实中班是写在最上面”。我稍微讲解一下,一位男孩就立刻提笔在自己作业纸的顶部,班级的位置写了“1中”的字样。明显可以看到他早就有书写班级号的经验。

五、总体感悟:

  1. 幼儿人力资源:需要幼儿中的学科带头人,成为同伴观摩的对象。有一位孩子能理解,就成为同组其他孩子的观摩对象。一定程度解决教师人力指导资源不足的问题。

  1. 学具中的灰色:“描字”可以让“不会做”的孩子有事可做,也可以让“快”的孩子精益求精(“磨时间”)一定程度解决能力水平差异产生的“时间差”问题,有助于安全、时长的把控。

  1. 幼儿自我学习:在幼儿已有的数序列认知经验(念诵1-10)基础上,不少孩子是在自我的观察中顿悟到填空的方法。在得到教师、同伴的肯定后,他们很快就在20题中挑选有把握的题目进行答题。

  1. 教师提示指导:教师会主动对没有填空的孩子进行指导,除了几位基础的孩子可以3次左右给反馈,大部分孩子不能迅速理解并做出反馈,而教师能分给他们的时间也就不到1分钟。因此大部分情况下,孩子还需要大量观摩同伴的作业,与同伴沟通交流,观看同伴为自己做作业,空着让家长讲解、等待未来逐步理解……等方式,初步理解“升序5填空1”的做题原理。

PS优化前的代码

在使用”索引数字替换空格,列表抽取5个数字、只生成25题“的代码之前,我是用“随机数字生成大量题目并去重复set(200题)随机抽取大量题目,去重后留下25题”的方法。

这个代码的缺点

  1. 运行时间长,每一次选取题目都要经历200次抽取,再去掉重复

  1. 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)
            
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿夏reasonsummer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值