效果展示
打印效果:(浅蓝色打印纸)
背景需求:
掌握了word表格单元格插入列表的方法,我想进一步制作“单元格色块填充”的“色盲图”
但是纵向20*26格填色,发现设计一个填色图案需要很长时间,且单一图案无法随机生成更多的样式,同时大量数字密集,幼儿填色时容易伤眼睛、遗漏
于是我想到把格子拆分成小块
小格子里就可以制作一些幼儿熟悉的图案——数字
WORD表格制作(在纵向A4)
页眉写入个人信息
分栏
表格参数
两个表格中间的段落间距
代码设计:
'''
作者:阿夏
时间:2022年11月11日数字像素图(A4竖板5*7 9个表)
(A4竖排5*7*9 每套两个数字涂成不同的颜色 ))
'''
import os,random
num=int(input('生成多少份\n'))
Number=int(input('抽取几个数字(10个中取9个=9个)\n'))
size=float(input('数字大小(最大28,建议25)\n'))
weight=int(input('表格宽度(5格)\n'))
height=int(input('表格长度高度(7格)\n'))
print('----------第1步:提取所有图案------------')
import random
# m数字位置上的数字
print('----------第2步:新建一个临时文件夹------------')
# 新建一个”装N份word和PDF“的文件夹
os.mkdir(r'C:\Users\jg2yXRZ\OneDrive\桌面\像素图\零时Word')
print('----------第3步:随机抽取8个不重复的图案 ------------')
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
for z in range(0,num): #多少份
m=str(random.randint(0,5)) # 涂色部分数字和非涂色部分数字不能一样
n=str(random.randint(5,9)) # 涂色部分数字和非涂色部分数字不能一样
N=[]
def same():
for r in range(0,len(nn)):
nn1=int(nn[r][0])
nn2=int(nn[r][1])
for nnn in range(nn1,nn2):
N.append(n)
mm1=int(mm[r][0])
mm2=int(mm[r][1])
for mmm in range(mm1,mm2):
N.append(m)
# print(N)
# 数字1 的坐标位置列表值
nn=['06','04','04','04','03','06']
mm=['02','01','01','01','03','00']
same()
# 数字2 的坐标位置列表值
nn=['06','04','02','02','04','06']
mm=['03','01','03','01','03','00']
same()
# 数字3 的坐标位置列表值
nn=['06','04','02','04','02','06']
mm=['03','01','03','01','03','00']
same()
# 数字4 的坐标位置列表值
nn=['06','01','02','01','02','01','02','03','06']
mm=['01','01','01','01','01','01','04','01','00']
same()
# 数字5 的坐标位置列表值
nn=['06','02','04','04','02','06']
mm=['03','01','03','01','03','00']
same()
# 数字6 的坐标位置列表值
nn=['06','02','04','02','01','02','06']
mm=['03','01','03','01','01','03','00']
same()
# 数字7 的坐标位置列表值
nn=['06','04','04','04','04','06']
mm=['03','01','01','01','01','00']
same()
# 数字8 的坐标位置列表值
nn=['06','02','01','02','02','01','02','06']
mm=['03','01','01','03','01','01','03','00']
same()
# 数字9 的坐标位置列表值
nn=['06','02','01','02','04','02','06']
mm=['03','01','01','03','01','03','00']
same()
# 数字0 的坐标位置列表值
nn=['06','02','01','02','01','02','01','02','06']
mm=['03','01','01','01','01','01','01','03','00']
same()
Nall=[] # [[],[],[]]的样式
for aaa in range(0,int(len(N)/int(weight*height))): # 把35*9个数字,分割成35一组,35一组,一共10组(0-9)
aaaa=(N[aaa*int(weight*height):aaa*int(weight*height)+int(weight*height)])
Nall.append(aaaa)
print(Nall)
nine=random.sample(Nall,Number)
print(nine)
doc = Document(r'C:\Users\jg2yXRZ\OneDrive\桌面\像素图\数字像素图模板.docx')
for numbg in range(0,len(nine)): # [[],[],[]]的样式的索引数字
# print(num1)
NUMnum=nine[numbg]
print(NUMnum)
# 确定8*4表格的表格单元格坐标(如第1行第1格是0,0 ,第2行第3格是(1,2)
bg=[]
for x in range(0,height):
for y in range(0,weight):
ww='{}{}'.format(x,y)
bg.append(ww)
print(bg)
# ['00', '01', '02', '03', '04', '05', '06', '07', '10', '11', '12', '13', '14', '15', '16', '17', '20', '21', '22', '23', '24', '25', '26', '27', '30', '31', '32', '33', '34', '35', '36', '37']
# 提取表格单元格坐标和图形的坐标
table = doc.tables[numbg] # 一共有9个表格
for t in range(0,len(NUMnum)): # 图案的长度为8*4=32个 遍历0-32(32个)
pp=int(bg[t][0]) # 提取表格bg里面每个元素的第0个数字==单元格X坐标 t=索引数字
qq=int(bg[t][1])
k=NUMnum[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) #设置颜色浅灰
# cell.text =u""
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(weight,height,num))
file_merger.close()
# doc.Close()
# # print('----------第5步:删除临时文件夹------------')
import shutil
shutil.rmtree('C:/Users/jg2yXRZ/OneDrive/桌面/像素图/零时Word') #递归删除文件夹,即:删除非空文件夹
重点说明:
终端运行
输入单元格的数字,随机取值(两个不能相同)
确定“数字”的构成位置:
以数字1为例:N列表里先提取空白的6个,再添加蓝色的2个、再添加4个空白、1个蓝色、4个空白、1个蓝色、4个空白、1个蓝色、3个空白、3个蓝色、6个白色、0个蓝色(一共12个 2组)
根据索引数量,逐一获取需要生成的空白的数量、蓝色的数量,将随机出来的空白填写数字和蓝色填写数字按照指定数量添加到N列表中
把N列表(一共35*10个数字)分割程35个数字的10组。[['','',''],['','',''],['','','']]的样式。
random.sample 从10组中随机抽取9组(打乱出现顺序,少一个数字组)
从[['','',''],['','',''],['','','']]中抽单独的取NUMnum=['','','']
关键点:
效果
效果再显示——0-9随机抽取9个数字,排序打乱
做两套题目(大1班、中3班、都试试教学效果),有无需要继续改进的地方。
幼儿学习及作品展示
时间:2022-11-14 15:00-15:30
班级:中3班
人数:23人
作品分析:
数字填色图(A4 5*7 9个) | ||||||||
时间 | #### | 班级 | 中3班 | 人数 | 23人 | 问题 | ||
学号 | 完成数量 | 外圈 | 内部 | 数字 | 数字 | 纯涂色 | 其他说明 | 汇总 |
3 | 9 | 红 | 蓝 | 7 | 4 | 0 | 内部用蓝线 外部红色快 | |
4 | 0 | 0 | 0 | 8 | 3 | 2 | 单单个格子涂色,不同的色点 | “我不会写学号” 8和3外形也相似、 |
5 | 0 | 粉 | 粉 | 5 | 5 | 9 | 全部是5,幼儿只涂粉红(虽然下面涂色粉和橙色。线条状有白点 | 两个数字都是5,无法涂两种 |
0 | 0 | 0 | 9 | 5 | 9 | 黑、白、蓝、红、紫、绿、橙、粉、黄 线条状 | ||
6 | 0 | 粉 | 粉 | 6 | 5 | 9 | 全部是5,幼儿只涂粉红(虽然下面涂色粉和蓝色)涂色饱满 | 56数字外形太相近 |
7 | 6 | 红、灰、橙、红、绿、黑 | 绿、黄、粉、蓝、蓝、黄 | 5 | 3 | 0 | 外圈、内部都涂了色块,从下向上涂。涂色饱满 | 53数字外形太相近 |
8 | 4 | 红、蓝、绿、黄 | 粉、红、蓝、橙 | 8 | 1 | 0 | 从上向下 涂色饱满 | |
9 | ||||||||
10 | 0 | 0 | 0 | 9 | 1 | 5 | 紫、绿、多色点状混、深绿、浅绿(下面预设8=橙 16=浅蓝 | |
14 | 9 | 红、橙、绿、黑、紫、红、黄、红、红 | 蓝、蓝、黄、红、绿、橙、橙、黄、黑 | 9 | 5 | 0 | 完全涂色了4个,5个定好色彩轮廓线和(预设9=红 5=黄 共有9张,缺少9 | 的确缺少了9 |
15 | 3 | 红 | 黄 | 9 | 3 | 0 | 色块饱满无白点。 | 慢工出细活、写了名字部首吉 |
16 | 0 | 蓝、粉、红、橙、紫 | 留空 | 8 | 0 | 5 | 边缘一圈涂色,中间保留数字的矩阵位置(预设橙色、蓝色 | 写名字 |
17 | 3 | 绿、浅蓝、深蓝 | 紫色、橙色、紫色 | 9 | 3 | 0 | 从下向上画,预设3=紫、9=绿色 | |
18 | 1 | 1粉色 | 1黄色 | 8 | 3 | 8 | 纯涂色紫色、红、粉黄、灰、浅绿、深绿、紫色、黄色、留空(涂色饱满无白点,大量线条画出框外 | 8和3外形也相似、 |
19 | 9 | 红线 | 绿线 | 7 | 5 | 0 | 与老师示范一样,只用红色线条、绿色线条勾画(预设绿色、红色) | “这个是1吗?(1的头底有横线) |
20 | 0 | 0 | 0 | 9 | 4 | 3 | 蓝色、橙色、粉色、部分线条连线)9连线、4连线) | |
21 | 1 | 红 | 粉 | 7 | 2 | 1 | 1个教师指导(预设7=粉)、涂橙色颜色饱满,上面写了一个4,抄写了哦同班 | 抄写15号的学号和名字吉 |
23 | 3 | 黄 | 蓝 | 6 | 0 | 9 | 多次求老师,3个都是教师指导,教师画出蓝色数字,鼓励幼儿只涂周围的黄色。 | ”我不会“,4次求助老师。先把所有的底色涂成浅色,然后再找数字 |
24 | 0 | 黑 | 绿 | 5 | 1 | 0 | 幼儿不会做,求助老师写学号,教师帮幼儿画出几个数字,但幼儿不理解,自己涂了几笔就上交了(预设两个黑) | 不会写学号,老师协助 |
25 | 7 | 红 | 粉 | 6 | 2 | 0 | 涂色块面粗犷,初步找出数字结构位置。 | |
27 | 6 | 深蓝 | 橙 | 8 | 4 | 0 | 从下向上画,最开始的几个数字都是一个个格子单个涂色,后期发现部分格子可以连起来一起画。 | |
28 | 0 | 0 | 0 | 5 | 1 | 2 | 黄、 | 观摩他人后进行涂色 |
30 | 1 | 0 | 0 | 9 | 5 | 5 | 教师帮助填了第一个,后期幼儿还是整片涂色为主蓝、绿、紫、粉、红 | 写了名字“张” |
31 | 4 | 橙、红、蓝、黄 | 绿、粉、紫、白(未涂) | 8 | 3 | 0 | 从上到下,最开始的几个数字都是一个个格子单个涂色,后期发现部分格子可以连起来一起画。,先涂外侧的数字、留空白,再涂里面的数字,缺少2,验证后错误 | |
32 | 0 | 0 | 0 | 5 | 5 | 4个全涂+4个U型涂色+2个点杂色 | 幼儿把各种涂色方法试了一下(预设5橙色) | 两个数字都是5,无法涂两种 |
作品分析:
一、涂色篇:(数字涂色、正面涂色)
1、完成卡片数字的数量(找出数字图)
23位幼儿中有3位幼儿完成9张卡片、1位幼儿完成7张卡片、2位幼儿完成6张卡片、2位幼儿完成4张卡片、3位幼儿完成3张卡片、3位幼儿完成1张卡片。
10位幼儿完成0张卡片(这些幼儿都是整张涂色,见后文)
2、完成卡片涂色的数量(点、线、面涂色)
半数幼儿对数字图色块进行点涂色、线涂色、面涂色处理。
从数量来看,4位孩子完成9张卡片的纯色涂色、1位完成8张涂色、3位完成5张涂色、1位完成3张涂色、2位完成2张涂色、1位完成1张涂色。
还有1位幼儿4张全涂+4张U型涂色+2张个点杂色(综合涂色:点、线、面)
所有幼儿都涂色了,但是时间上看,很多中班孩子并有把所有数字卡片都涂完,可以考虑到9张卡片的题量减少。
3、两份作业上的卡片数字无差异——两个都是5
案例一:检查到5号时,老师照例提醒:“你怎么全部画粉红色了?里面还有另一个数字?”
结果我发现这份灰色提示数字都是5——一时语塞。
虽然左下角幼儿选了粉色和橙色两种颜色,但数字都是5,让整个页面无法区分颜色。
案例二:后续扫描作业后,发现32号的点线面涂色作业的灰色数字也全部是5
为什么会出现两个5?检查代码发现了问题:
原来我把random.randint(x,y)和range(x,y)的数字范围混同了。
for i in range(0,5)
常用的for i in range(0,5) 抽取的数字是0,1,2,3,4,(没有5)。for i in range(5,9) 抽取的数字是5,6,7,8,(没有9)。因此我习惯性在random.randint(x,y)中也用了“算头不算尾”的思路
random.randint(0,5)
但这里是随机抽取数字,算头也算尾
random.randint(0,5) 随机抽取 0,1,2,3,4,5
random.randint(5,9) 随机抽取 5,6,7,8,9
因此,两者之间都可能抽到5.可以改成:
random.randint(0,4) 随机抽取 0,1,2,3,4
random.randint(5,9) 随机抽取 5,6,7,8,9
4、数字外形相似度高,对幼儿涂色行为的影响
缘起:坐在5号同学左侧的6号同学也是整面涂色(她的蜡笔盒里的粉红是深粉色,把灰色数字覆盖了)虽然她的数字是5和6,但是灰色的5和6在视觉上外形有点相似,加上她周围的同伴都是整面涂色,所以幼儿也进行了整面涂色)
随机匹配的0-5、5-9之间的数字的外形相似度是否会影响幼儿辨认?将纯涂色的幼儿筛选后,
发现一些容易影响幼儿视觉判断的数字组。
1、典型的数字——8和3(2人)、9和5(2人)、6和5(1人) 。
2、圆形结构数字——8和0、6和0
3、不确定原因——5和1、9和1、7和2、9和4
从数据来看,数字外形近似的确有一定的视觉干扰,部分幼儿无法辨认两个数字,就统一进行了块面涂色处理。
从年龄特点来看,由于中班幼儿会将2和5,6和9左右上下倒置,中3班2号、30号、23号、29号等小朋友的学号就常常出现左右镜像,上下镜像的写法,因此在选择涂色数字时,最好需要避开一些容易外形相似,结构容易互换的数字。
5、浅蓝纸上灰色数字颜色不凸显,幼儿数字辨识度降低
与此同时,研究者发现,8位孩子能够理解并找出隐藏在单元格中的矩形数字,数字相似度只是影响幼儿辨识的一方面因素。
“老师,这个是数字5吗?”活动中有一位孩子指着浅蓝色纸张的一个格子里的一个数字问
老师凑近纸张辨色,点头说:”是5”
浅蓝色纸张上打印灰色数字,小数字完全不能一下子看清楚。
因此,对于中班幼儿年龄的孩子来说,太小的数字不能使用灰色(看不清楚)
有色打印纸上的小数字必须用深色(黑色)
6、矩形数字的辨识——勾1
做题时,19号男孩指着勾线的1问:“这是1吗?”
“是的,这是英文里面的1,你看左边有一个7了”
他右侧的男孩闻言插嘴道:“我见过这个1”
19号男孩却说:“可是我的1(学号19)不是这么写的”
“有道理,这种勾子1和这里的7有点像,那下次我改成你说的这种竖条1,没有勾和横线。“
有色打印纸上的小数字必须用深色(黑色)
感悟:
从幼儿操作中,我发现很多学具方面需要调整的内容
1、涂色数都是5,范围修盖—— random.randint(x,y)(取头也取尾)和range(x,y)(取头不取尾)的数字范围是不同,不能混同。
2、小数字不要灰,最好深色——幼儿视觉敏度有差异,部分幼儿难以辨认灰色的、小数字的外形,需要加深小号数字的颜色
3.、小数字数量多,外形要选——排除3和8、2和5、8和9等有一定外形相似(上下镜像、左右镜像)的数字,一定程度也能解决镜像数字差异带来的问题。
时间有限,加上蜡笔画画手指染色,暂时不提倡剪下来当扑克牌(弄脏书包抽屉)。