我的小课题《运用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
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') #递归删除文件夹,即:删除非空文件夹
(一)基本信息:大1班 2022年10月19日 24人
(1)记号笔做题:Word里面的印刷数字黑色数字,如果幼儿用记号笔书写黑色加粗字体,容易和打印的黑色数字——不便于教师快速辨认哪些空格是幼儿填写的。
(2)铅笔做题:而如果幼儿使用铅笔书写,显示为灰色,虽然与印刷黑有区别,但如果集体讲评时,幼儿写的铅笔字就很浅,容易看不清楚——不便于集体活动中同伴们辨认做题者作业的正确性。
如果原始字体是纯黑色,无论幼儿用记号笔(黑粗)还是6B铅笔(灰细),从视觉上都不便于教师与幼儿们辨认他人的作品(哪些是填写的?填了哪些数字?是否正确?)所以研究者决定把Word模板里把黑色数字改成灰色数字体。
门牌号6*3作业分析,虽然我设置的6*3=18个格子里面删除一半数字=9个,但实际打印的作业纸上每个房间的空缺数量不等。空缺5-10个都出现了。
原因分析:random.choice是随机抽取数字(可能会有抽取101抽取2次,删除1个101,第2次抽101就空,也就是浪费一次其他数字的机会),改成随机不重复random.sample(唯一的数字抽取)就会保证每张作业的格子空缺数量相等。
通过互相帮助、求助老师等方式,大1班幼儿都完成了6*3房间号,因此教师可以尝试利用A4纸竖版继续制作数量更多的门牌号模板,如9*5(巩固练习)、10*5(考验4位数)
1、字体颜色变浅
2、房间数量可以增加。