• 【教学类-12-01】20221105《连连看8*4-不重复16个)(小班主题《白天与黑夜》)


    效果展示:

     两列两列连连看

     背景需求:

    从小班到大班,幼儿都有关于“连线”的练习(手拉手做朋友、物品配对、标志连连看),预先用一uibot制作了A4一页8*4个(16组连连看图案)

    思路:先从24个图案中随机抽取16个(有重复图形),插入到word第1-2列中(每列8个)然后将这随机抽取16个图案进行倒序排列,插入到word第3-4列中(每列8个)

    (后续补图 )

    由于使用了随机抽取,因此有大量的重复图形,而且是1、2列与3、4列之间进行混合连线,模拟实验了5为大班幼儿后,发现他们画的连线后,大量交叉在一起,根本搞不清是否正确。

    (后续补图 )

    于是提出了两个要求

    1、减少线条交叉,两两交叉连线:

    将1-2列设为一组、3-4列设为一组,1与2列进行连线、3与4列进行连线。

    2、不重复的图案,正序倒序交织:

    在8*4的矩阵。24个图案需要抽取8*2=16个不重复的图案,16中的前8个插入word第1列,16中的后8个插入word第3列,第2列的数据就是第1列前8个图案的乱序不重复排列,第4列的数据就是第3列后8个图案的乱序不重复排列.

    链接位置:

    1、生成的PDF保存在这里——C:\Users\jg2yXRZ\OneDrive\桌面\连连看\

    (没有“打印”文件夹也不影响)

     2、py文件的位置(  放在电脑任意位置都不影响运行,我这里为了便于查找,放在D:/test下

     代码设计

    1. '''
    2. 作者:阿夏
    3. 时间:2022年11月4日连连看8*4)
    4. (A4竖排8*4张,纵向中间剪切))
    5. '''
    6. import os
    7. num=int(input('生成多少份\n'))
    8. Number=int(input('每页制作多少个(16个)\n'))
    9. print('----------第1步:提取所有图案------------')
    10. list=['✿','☸','✪','☁','➹','✈','☂','☃','◐','☼','☯','◎','❤','♨','☋','♘','★','♫','❀','〼','✉','☏','♕','♖']
    11. print(len(list))# 一共24个图案
    12. print('----------第2步:新建一个临时文件夹------------')
    13. # 新建一个”装N份word和PDF“的文件夹
    14. os.mkdir(r'C:\Users\jg2yXRZ\OneDrive\桌面\连连看\零时Word')
    15. print('----------第3步:随机抽取8个不重复的图案 ------------')
    16. import random
    17. from win32com.client import constants,gencache
    18. from win32com.client.gencache import EnsureDispatch
    19. from win32com.client import constants # 导入枚举常数模块
    20. import os,time
    21. import docx
    22. from docx import Document
    23. from docx.shared import Pt
    24. from docx.shared import RGBColor
    25. from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
    26. from docx.oxml.ns import qn
    27. for nn in range( 1,num+1): #多少份
    28. # word = gencache.EnsureDispatch('Word.Application')
    29. doc = Document()
    30. # doc = docx.Document(r'C:\Users\jg2yXRZ\OneDrive\桌面\连连看\连连看Python模板.docx')# 打开带docx模板(这个模板有页脚的页码,阿夏认为页码是必须的)
    31. # 先随机抽取8个一列
    32. all=[]
    33. n1=[]
    34. n2=[]
    35. n = random.sample(list, Number) # 24个里面随机抽取16个放入一个组nn
    36. # print(n)
    37. for b1 in n[0:int(Number/2)]: # 16个里面的1-8个,提取单独数
    38. n1.append(b1) # 做第2列的乱序用
    39. all.append(b1) # 第1轮8个添入总列表 (插入Word第1列)
    40. # print(n1)
    41. # print(all)
    42. o1 = random.sample(n1, int(Number/2)) # 第1轮8个再随机打乱一次,不重复抽取
    43. for b in o1:
    44. all.append(b)#第1轮8个乱序排列不重复(插入Word第2列)
    45. # print(all)
    46. # # 以下代码用作第1列1-8图案,第2列8-1倒序排列
    47. # for bb in range(int(Number/2)-1,-1,-1):
    48. # print(bb)
    49. # all.append(n1[bb])#第1轮8个倒序排列不重复(插入Word第2列)
    50. # print(all)
    51. for b2 in n[int(Number/2):Number]: #16个里面的9-16个,提取单独数
    52. n2.append(b2) # 做第4列的乱序用
    53. all.append(b2) # 第2轮8个添入总列表 (插入Word第3列)
    54. # print(all)
    55. o2 = random.sample(n2, int(Number/2)) # 第1轮8个再随机打乱一次,不重复抽取
    56. for b in o2:
    57. all.append(b)#第1轮8个乱序排列不重复(插入Word第2列)
    58. # print(all)
    59. # # 以下代码用作第3列9-16图案,第4列16-9倒序排列
    60. # for bb in range(int(Number/2)-1,-1,-1):
    61. # print(bb)
    62. # all.append(n2[bb])#第1轮8个倒序排列不重复(插入Word第2列)
    63. # print(all)
    64. # 把all里面的所有元素输入到Word里
    65. for c in all: # 单个取值
    66. print(c)
    67. doc.add_paragraph(c)
    68. # 把内容按段落输入到doc这个docx文件内
    69. # 字体这一段一定要再写一次
    70. for paragraph in doc.paragraphs:
    71. for run in paragraph.runs:
    72. run.font.size = Pt(100) # 数字题目字体大小
    73. run.font.bold = False #数字题目字体是否加粗 不加粗,5*8再加粗比较满,压抑了
    74. run.font.name = 'Arial' # 控制是英文时的字体
    75. run.element.rPr.rFonts.set(qn('w:eastAsia'), '宋体') # 控制数字是中文时的字体
    76. # paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 设置数字页眉居中对齐
    77. paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 设置数字页眉居中对齐
    78. # paragraph.paragraph_format.line_spacing=1 #数字中文字的段行距
    79. paragraph.paragraph_format.line_spacing = Pt(90) #数字段间距
    80. # 设置主要页边距 5
    81. from docx.shared import Cm # 导入cm模块
    82. doc.sections[0].top_margin = Cm(0.7)# sections[1]是第二节=第二页 上边距
    83. doc.sections[0].bottom_margin = Cm(0.7)# sections[1]是第二节=第二页 下边距
    84. doc.sections[0].left_margin = Cm(0.7) # sections[1]是第二节=第二页 左边距
    85. doc.sections[0].right_margin = Cm(0.7)# sections[1]是第二节=第二页 右边距
    86. # 设置其他页边距
    87. doc.sections[0].gutter=Cm(0)# sections[1]是第二节=第二页 装订线 默认为0 左
    88. doc.sections[0].header_distance=Cm(1)# sections[1]是第二节=第二页 页眉边距
    89. doc.sections[0].footer_distance=Cm(1)# sections[1]是第二节=第二页 页脚边距
    90. # 装订线还有一个位置属性,暂时未发现如何设置,默认为左,如果需求设置成右,可以建个模板docx文档导入。
    91. # 设置纸张方向和大小 LANDSCAPE=横 PORTRAIT纵 默认信纸 纵
    92. from docx.shared import Cm # 导入CM #
    93. from docx.enum.section import WD_ORIENTATION # 导入纸张方向
    94. doc.sections[0].page_height = Cm(29.7) # 设置A4纸的高度
    95. doc.sections[0].page_width = Cm(21) # 设置A4纸的宽
    96. doc.sections[0].orientation = WD_ORIENTATION.LANDSCAPE # 设置纸张方向为横向 L 
    97. # 设置分栏 如果不要,就把数字该为为1
    98. from docx.oxml.ns import qn
    99. doc.sections[0]._sectPr.xpath('./w:cols')[0].set(qn('w:num'), '4') #把第二节页设置为2栏
    100. # doc.Save()# 把有空格的1.docx保存
    101. doc.save(r'C:\Users\jg2yXRZ\OneDrive\桌面\连连看\零时Word\{}.docx'.format('%02d'%nn))
    102. from docx2pdf import convert
    103. # docx 文件另存为PDF文件
    104. inputFile = r"C:/Users/jg2yXRZ/OneDrive/桌面/连连看/零时Word/{}.docx".format('%02d'%nn) # 要转换的文件:已存在
    105. outputFile = r"C:/Users/jg2yXRZ/OneDrive/桌面/连连看/零时Word/{}.pdf".format('%02d'%nn) # 要生成的文件:不存在
    106. # 先创建 不存在的 文件
    107. f1 = open(outputFile, 'w')
    108. f1.close()
    109. # 再转换往PDF中写入内容
    110. convert(inputFile, outputFile)
    111. print('----------第4步:把都有PDF合并为一个打印用PDF------------')
    112. # 多个PDF合并(CSDN博主「红色小小螃蟹」,https://blog.csdn.net/yangcunbiao/article/details/125248205)
    113. import os
    114. from PyPDF2 import PdfFileMerger
    115. target_path = 'C:/Users/jg2yXRZ/OneDrive/桌面/连连看/零时Word'
    116. pdf_lst = [f for f in os.listdir(target_path) if f.endswith('.pdf')]
    117. pdf_lst = [os.path.join(target_path, filename) for filename in pdf_lst]
    118. pdf_lst.sort()
    119. file_merger = PdfFileMerger()
    120. for pdf in pdf_lst:
    121. print(pdf)
    122. file_merger.append(pdf)
    123. file_merger.write("C:/Users/jg2yXRZ/OneDrive/桌面/连连看/(打印合集)连连看{}乘4({}份).pdf".format(int(Number/2),num))
    124. file_merger.close()
    125. # doc.Close()
    126. # print('----------第5步:删除临时文件夹------------')
    127. import shutil
    128. shutil.rmtree('C:/Users/jg2yXRZ/OneDrive/桌面/连连看/零时Word') #递归删除文件夹,即:删除非空文件夹

    运行说明:

    1、运行代码需要输入的信息 

     生成Word和PDF过程中,会有一个“零时Word”文件夹“暂时出现。

     零时Word”文件夹“里面的内容

     30份全部生成后,“零时Word”文件夹会被删除,留下最后需要的打印合并PDf(30份随机的连连看)

    重点代码:

    1、图案的选择 24个不同的文字符号图案

     2、确认4列中8个图案的排位,导入ALL列表

     3、all里面的图案按预定计划写入Word的列,设置字体大小段间距

     4、页边距与分栏

     视频时长

    运行时长:连连看8*4,30份,运行时长1分3秒

    连连看8乘4_30份

     最后的效果图

    (1)一般难度:可以整张A4发给幼儿对1与2、3与4列进行连线,

    (2)低难度:也可以降低难度,12与34列中间剪开,幼儿做单列

    (3)其他玩法:

    《白天与黑夜》圈出所有和白天、黑夜有关的东西,(太阳、云朵、星星)

    《不同的季节》圈出和春夏秋冬有关联的东西(雪人、太阳、花朵、火焰)

    感悟:

    1、列表不重复提取

    random.sample(list, Number)

    2、列表降序提取(线条全部交差在中点)

    for bb in range(8-1,-1,-1):

            all.append(n2[bb])

    只是一种思路,因为线条集中在中心,教学意义不大,所以不作为学具使用。

    教学测试:

    2022年09月08日  中8班 随机5人 

     

     

     

    作业效果:

     问题:

    1、有些图案重复了(第1234列都有同样的一个图案),幼儿将四个图案全部连接,不是两个两个一组

    2、四列之间线条互相连接,太密集了,不便于核对。

  • 相关阅读:
    elasticsearch搜索IK分词器实现单个字搜索
    ToBeWritten之改进威胁猎杀:自动化关键角色与成功沟通经验
    SpringBoot【整合Shiro】
    457-Linux基础(压缩包管理tar、rar、zip、gzip)
    软件测试需不需要懂代码?
    网络安全(黑客)——自学2024
    网络编程——python
    linux查看服务器登录成功和登录失败的命令
    MySql数据库的存储过程以及一些常见区别问题
    点云从入门到精通技术详解100篇-基于点云数据的工件三维重建
  • 原文地址:https://blog.csdn.net/reasonsummer/article/details/127703188