【教学类-08-01】20221010《门牌号(6层*3间 黑色版)》(大班主题《我们的城市》)

 效果展示

 

 背景需求:

         我的小课题《运用Python设计大班层次性纸类学具的案例研究》获得2022年MHQ小课题立项,在前期的《学号名字描字帖》《身份证》《数字分合》《破译电话号码》的基础上,需要设计更多与大班主题活动书上的主题相关的学习材料。

       门牌号是下学期《我们的城市》主题中的一个活动——“造房子”。在该主题的个别化学习-益智区中,每个班级老师都会制作一个“小房子”,引导幼儿根据坐标了解各楼层门牌号的排序方式。

 存在问题:

9月我用uibot写了门牌号6*3的代码,批量生成第一次的6*3黑色版作业纸。

主要思路:

1、打开模板,

 2、另存为1.docx.2.docx……

3、随机数*(6*3-1=17个数字)-在1-18个数字之间随机抽取(会重复抽取同一个值)

4、再次打开1.docx.2.docx. 查找被抽取的101、405,鼠标定位到这个号码前,删除3次,这个格子空

5、重新保存为1..docx.2.docx

6、同时另存为1.pdf,2.pdf

7、最后把所有数字PDF文件合并为一个打印用的PDF

8、删除1.docx和1.pdf

文件设置:

(一)文件位置

  (二)Word模板

1.(屋顶是用“”插入形状”(正方形、圆形))

2。插入表格6*3(把格子凑满A4一页即可)

3、在单元格里手动输入:101 102……(代码会随机从中删除几个数字)

 模板里面的数字需要手动输入添加,也可以在Excel表格里制作后再复制到Word里。

代码呈现

py代码可以存放再任意位置,因为所有文件路径都是已经全部写在代码里。

'''
作者:阿夏
时间:2022年10月20日
名称:大班学具:门牌号随机删除(6层*3间 )
'''
import numbers
import os


num=int(input('需要多少份教具(30人)\n'))
floor=int(input('共有几层楼(6层)\n'))
number=int(input('每层几间房(3间)\n'))
delete=int(input('需要删除几个门牌号(6*3=18/2=9个)\n')) # 想要删除几个自己决定 本文默认是总数的一半9*5/22.5=22个
# delete=int(floor*number/2)  # 本文默认是总数的一半9*5/22.5=22个

print('----------第1步:制作门牌号------------')
door=[]
for a1 in range(1,floor+1):    
    for a23 in range(1,number+1):
        b=str(a23).rjust(2,'0')
        c='{}{}'.format(a1,b)
        door.append(c)
print(door)
print('----------第2步:新建一个临时文件夹------------')
# 新建一个”装N份word和PDF“的文件夹
os.mkdir(r'C:\Users\jg2yXRZ\OneDrive\桌面\门牌号2\门牌号Word')


print('----------第3步:随机抽取门牌号数字 打开Word,把抽取的门号替换为空------------')
import random
from win32com.client import constants,gencache
from win32com.client.gencache import EnsureDispatch
from win32com.client import constants # 导入枚举常数模块
import os,time

for nn in range( 1,num+1):    
    word = gencache.EnsureDispatch('Word.Application')
    #启动word对象应用
    word.Visible = False
    doc = word.Documents.Open(r'C:\Users\jg2yXRZ\OneDrive\桌面\门牌号2\门牌号模板{}乘{}.docx'.format(floor,number))
    #单个另存为word 单独文件夹内
    doc.SaveAs(r'C:\Users\jg2yXRZ\OneDrive\桌面\门牌号2\门牌号Word\{}.docx'.format('%02d'%nn))    # '%02d'%nn=把"1.docx"改成"01.docx"
    doc.Close()  #关闭1.docx 
    #打开“1.docx”
    time.sleep(1) 
    doc = word.Documents.Open(r'C:\Users\jg2yXRZ\OneDrive\桌面\门牌号2\门牌号Word\{}.docx'.format('%02d'%nn))

    # 随机抽取几个门牌号(#CSDN博主「孟意昶」 原文链接:https://blog.csdn.net/weixin_44999258/article/details/125163277)
    s=[]
    for i in range(0,delete):
        shuffle = random.choice(door)
        print(shuffle)    # '602'
        s.append(shuffle) #['602', '403', '505']
        for b in s:
            print(b)        # 602\403\505

            # 删除表格里的门牌号 (作者:守候\链接:https://www.zhihu.com/question/388608509/answer/2552638658)
            i = 0
            for ta in doc.Tables: # 遍历表格
                # f为每个表格区域查找
                f = ta.Range.Find

                # 查找框参数
                f.ClearFormatting() # 清除原有格式
                f.Forward = True # 向前查找
                f.Wrap = constants.wdFindStop # 查找完成即停止
                f.MatchWildcards = True # 使用通配符,根据需要设置
                f.Text = '{}'.format(b) # 查找的内容

                # 替换框参数(删除为空=把门号替换为''空值
                f.Replacement.ClearFormatting() # 清除原有格式
                f.Replacement.Text = '' # 替换框内容
                # f.Replacement.Font.ColorIndex = constants.wdRed # 替换文本的颜色设置为红色,此处是为了演示方便,看到效果。根据需要设置
                f.Execute(Replace=constants.wdReplaceAll) # 执行,查找全部
                i += 1   
        
    doc.Save()# 把有空格的1.docx保存

    # 打开1.docx 另存为1.pdf   每一个单页的docx分别保存一个单页的PDF
    doc=word.Documents.Open("C:/Users/jg2yXRZ/OneDrive/桌面/门牌号2/门牌号Word/{}.docx".format('%02d'%nn),ReadOnly=1)
    doc.ExportAsFixedFormat("C:/Users/jg2yXRZ/OneDrive/桌面/门牌号2/门牌号Word/{}.pdf".format('%02d'%nn),constants.wdExportFormatPDF)
    # 关闭1.docx
    doc.Close()
    
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/桌面/门牌号2/门牌号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/桌面/门牌号2/(打印合集)门牌号{}乘{}({}份).pdf".format(floor,number,num))
file_merger.close()


print('----------第5步:删除临时文件夹------------')    
import shutil
shutil.rmtree('C:/Users/jg2yXRZ/OneDrive/桌面/门牌号2/门牌号Word') #递归删除文件夹,即:删除非空文件夹

运行输入:、

  

重点解析:

 

教学过程:

一、Python学具《门牌号6*3(黑色字》

(一)基本信息:大1班    2022年10月19日   24人

 

 

 

 

 

 

 

 

(二)作品扫描

 

 

 

存在问题:

1,从黑到灰——门牌号数字色彩需要更改

(1)记号笔做题:Word里面的印刷数字黑色数字,如果幼儿用记号笔书写黑色加粗字体,容易和打印的黑色数字——不便于教师快速辨认哪些空格是幼儿填写的。

(2)铅笔做题:而如果幼儿使用铅笔书写,显示为灰色,虽然与印刷黑有区别,但如果集体讲评时,幼儿写的铅笔字就很浅,容易看不清楚——不便于集体活动中同伴们辨认做题者作业的正确性。

        如果原始字体是纯黑色,无论幼儿用记号笔(黑粗)还是6B铅笔(灰细),从视觉上都不便于教师与幼儿们辨认他人的作品(哪些是填写的?填了哪些数字?是否正确?)所以研究者决定把Word模板里把黑色数字改成灰色数字体。

2,从异到同——空缺数量需要统一

门牌号6*3作业分析,虽然我设置的6*3=18个格子里面删除一半数字=9个,但实际打印的作业纸上每个房间的空缺数量不等。空缺5-10个都出现了。

原因分析:random.choice是随机抽取数字(可能会有抽取101抽取2次,删除1个101,第2次抽101就空,也就是浪费一次其他数字的机会),改成随机不重复random.sample(唯一的数字抽取)就会保证每张作业的格子空缺数量相等。

2,从简到难——门牌号数量需要增加

   通过互相帮助、求助老师等方式,大1班幼儿都完成了6*3房间号,因此教师可以尝试利用A4纸竖版继续制作数量更多的门牌号模板,如9*5(巩固练习)、10*5(考验4位数)

 

感悟:

1、字体颜色变浅

2、房间数量可以增加。

  • 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、付费专栏及课程。

余额充值