作品样式:
背景需求
在门牌号黏贴版教学实践中,发现90%的幼儿都不会做
1、空格没有平均分布:
从5*6=30的门牌号中,随机抽取5个空格,有80%的概率出现“一行2个空、3行1个空”的情况。但幼儿第一次做,楼层都搞不清楚,更加无法理解“间”(一行2个空2间)的概念。
需要:每层空一格,了解“楼层”概念
设计“门牌号5个空黏贴”的练习。5*5楼房、每行随机空1个格子,同时确保每列也空1个格子。让幼儿从三位数的第一个数字(层、楼)来黏贴辨认黏贴每层楼唯一的空格。
2、难以辨认黏贴位置:
在分析幼儿黏贴正确率的过程中,我发现通过照片,很难看出哪些是被黏贴的——不少孩子同时贴了数字黏贴卡片和空白卡片,数量过多,看不清哪些是数字黏贴卡片;即使一些带打印数字的黏贴卡片贴在楼房内,在白色背景与同类数字的映衬下,看上去与周边的数字完全一致。
因此在核对正确性时,老师不得不触摸幼儿作品原件,逐一观察,剥一剥纸片才能确认哪些是被贴上去的纸片。
而22号幼儿将大量黏贴纸片剪下后,也不知道数字的摆放方向,就出现垂直黏贴的情况。
需要:细节优化黏贴卡片,容易辨识
1、黏贴卡片的背景设置为灰色、便于教师知道哪些是幼儿贴的空格。
2、黏贴卡片数字下面加下划线,帮助幼儿确定黏贴方向(下划线在下面)
设计过程:
一、材料准备:
Word设置
二、代码说明
# '''
# author:阿夏
# 原理:门牌号5*6=30.抽取15个空格,第二个表格里面装15个空格的内容(剪下来贴在空格里).
# 结果:门牌号 黏贴版(适合中班)
# 时间:2023-4-7 13:31
# '''
import randomprint('---------第2部分 word里面的表格----------')num=int(input('生成多少份(按班级人数输入28人,实际打印14份)\n'))
# Number=int(input('随机抽取几个数字(5)\n'))
size=float(input('数字大小(35)\n'))
height1=int(input('房间表格高度(6层)\n'))
weight1=int(input('房间表格宽度(5间)\n'))# 房间表格位置
bg1=[]
for x1 in range(height1-1,-1,-1): # 表格第1行是601\602,最下面一行时101 102,所以索引要从大到小 height1=6需要减去1=5,0需要再减去1 =-1 (50 51------00 01)for y1 in range(0,weight1):ww1='{}{}'.format(x1,y1)bg1.append(ww1)
print(bg1)
# ['50', '51', '52', '53', '54', '40', '41', '42', '43', '44', '30', '31', '32', '33', '34', '20', '21', '22', '23', '24', '10', '11', '12', '13', '14', '00', '01', '02', '03', '04']
# 其中前25个是房间号,后5个是粘贴纸# 随机数组 如01234 20134等
# P=[]
# for s1 in range(0, 5):
# for s2 in range(0, 5):
# for s3 in range(0, 5):
# for s4 in range(0, 5):
# for s5 in range(0, 5):
# if s1 != s2 and s1 != s3 and s1 != s4 and s1 != s5 and s2 !=s3 and s2!=s4 and s2!=s5 and s3!=s4 and s3!=s5 and s4!=s5:
# print(s1,s2,s3,s4,s5)
# # # s2=str(s1)+str(s2)+str(s3)+str(s4)+str(s5)
# ss='{}{}{}{}{}'.format(s1,s2,s3,s4,s5)
# P.append(ss)
# # P.append(s2)
# print(len(P))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,timeimport 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 qnfrom 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')n=int(num/2)
for z in range(0,n): #多少份 # 新建worddoc = Document(r'C:\Users\jg2yXRZ\OneDrive\桌面\黏贴门牌号\黏贴门牌号模板竖版2份(6层5间).docx') for j in range(2):# 制作"房间号"N=[]for x in range(1,height1): for y in range(1,weight1+1): s1='{}{}'.format(x,'%02d'%y) # 数字加空格N.append(s1) print(N)# ['101', '102', '103', '104', '105', '201', '202', '203', '204', '205', '301', '302', '303', '304', '305', '401', '402', '403', '404', '405', '501', '502', '503', '504', '505']# 把列表变成 五组E=[]for e in range(height1-1):E.append(N[e*weight1:e*weight1+weight1])print(E)# [['101', '102', '103', '104', '105'], ['201', '202', '203', '204', '205'], ['301', '302', '303', '304', '305'], ['401', '402', '403', '404', '405'], ['501', '502', '503', '504', '505']]# 抽取每行空的位置 如01234 20134等from itertools import permutationsA=list(permutations('01234'))print(list(permutations('01234')))print(len(A))# [('4', '3', '2', '0', '1'), ('4', '3', '2', '1', '0')]# 索引数字 随机抽取一组 索引数字 C=random.sample(A,1) print(C)S=[]for i in C:for k in i:print(k)S.append(k)print(S)# ['0', '1', '3', '4', '2']# 从门牌列表中,随机抽取15个数字(这种抽取法会都3个01 2个02 ,我需要每行5个数字空缺的的列都在不同位置一样。)# G=[]# for f in range(weight1):# C=random.sample(E[f],Number)# # 第一组五个数字中间随机抽取1个空# for h in C:# G.append(h)# print(G)# 抽取指定索引的门牌号 E组合的5个,每个里面固定替换一个数字G=[] for p in range(weight1): # '3', '2', '1', '0', '4'q=int(S[p]) # 索引数字整数,3 2 1 0 4C=E[p][q] # 抽取的的组索引01234,每个元素的第几个数字被选出print(C) G.append(C) print(G) # ['104', '203', '302', '401', '505']# 房间模板(第一个表格)把抽取的房间号替换成_C1=[]for tt in range(len(N)): for a2 in range(len(G)): if N[tt]==G[a2]:N[tt]=' 'for a5 in N:C1.append(a5) N.clear()C1.append(a5) print(C1)# # 把提取的5个门牌号(先写入)+空缺组合(5行)和合并在一起 # B1=G+C1 # print(B1)# 房间模板(第一个表格)要写入的门牌号列表 table = doc.tables[j] for t1 in range(0,len(bg1[5:])): # 0-5是最下面一行,用来写卡片数字pp1=int(bg1[5:][t1][0]) # qq1=int(bg1[5:][t1][1])k1=C1[t1] # 提取list图案列表里面每个图形 t=索引数字print(pp1,qq1,k1)run=table.cell(pp1,qq1).paragraphs[0].add_run(k1) # 在单元格0,0(第1行第1列)输入第0个图图案run.font.name = '华文新魏'#输入时默认华文彩云字体run.font.size = Pt(size) #输入字体大小默认30号run.font.color.rgb = RGBColor(200,200,200) #数字小,颜色深0-255run.font.underline = False # 下划线# paragraph.paragraph_format.line_spacing = Pt(180) #数字段间距r = run._elementr.rPr.rFonts.set(qn('w:eastAsia'), '华文新魏')#将输入语句中的中文部分字体变为华文行楷table.cell(pp1,qq1).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中 for t2 in range(0,len(bg1[0:5])): # 0-5是最下面一行,用来写卡片数字pp2=int(bg1[0:5][t2][0]) # qq2=int(bg1[0:5][t2][1])k2=G[t2] # 提取list图案列表里面每个图形 t=索引数字print(pp2,qq2,k2)run=table.cell(pp2,qq2).paragraphs[0].add_run(k2) # 在单元格0,0(第2行第2列)输入第0个图图案run.font.name = '华文新魏'#输入时默认华文彩云字体run.font.size = Pt(size) #输入字体大小默认30号run.font.color.rgb = RGBColor(200,200,200) #数字小,颜色深0-255run.font.underline = True # 下划线# paragraph.paragraph_format.line_spacing = Pt(280) #数字段间距r = run._elementr.rPr.rFonts.set(qn('w:eastAsia'), '华文新魏')#将输入语句中的中文部分字体变为华文行楷table.cell(pp2,qq2).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/桌面/黏贴门牌号/(打印合集)黏贴门牌号(一页两份 每行1个空){}乘{}({}份).pdf".format(height1,weight1,n))file_merger.close()
# doc.Close()# # print('----------第5步:删除临时文件夹------------')
import shutil
shutil.rmtree('C:/Users/jg2yXRZ/OneDrive/桌面/黏贴门牌号/零时Word') #递归删除文件夹,即:删除非空文件夹
代码重点:
终端运行: