【教学类-89-02】20250128新年篇02——姓名藏头对联(星火讯飞+Python,五言对联,有横批)

背景需求:

过年了,我想用幼儿的名字写对联,但是我根本不会写,于是尝试让AI来写。

1.我班的孩子的名字都是2字和3字的

2.惊喜发现,AI它很快就能生成带名字的对联

但是观察发现,如果是二个名字的对联,它就用这两个字做头字,但如果三个字、四个字,它会随机取第1字、第3字、第2字中的两个(1和3,或者2和3),而不是用最后面两个字(2和3,不包含姓,1)

可是我希望只用幼儿的“名”,所以我把幼儿的名字变成2个字(两个名字就保留,三个名字删除姓氏,四个名字删除姓氏和第第二个字。)

再次输入:并且希望它变成个表格,方便我用Python遍历

关键词

(幼儿名字,保留最后两个字)

“XX

XX

XX

对每个名字,写一幅5字对联,如果名字是三个字就用后面2个字写,如果是名字只有二个字,就用着两个字写。表格形式呈现

只有两个字,对联肯定就用这两个字了。

素材准备

EXCLE:把AI表格复制到EXCEL内

两个WORD模版

对联(A4一页两条对联*2,必须是2的倍数)

这里是30人,15张A4

横批(A4一页五条*1,必须是5的倍数)
这里是30人,6张A4

代码展示:

'''
幼儿姓名的对联制作
星火讯飞(AI生成对联、AI生成Python代码)、阿夏
20250114
'''
import openpyxl
import os 
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
import randomimport os,time
import docx
from docx import Document
from docx.shared import Inches,Cm,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 RGBColortxt='华文隶书'
path=r'C:\Users\jg2yXRZ\OneDrive\桌面\对联'# 打开Excel文件
workbook = openpyxl.load_workbook(path+r'\名字.xlsx')# 选择活动的工作表
sheet = workbook.active# 创建一个空列表来存储单元格数据
data_list = []# 遍历工作表中的所有行和列
for row in sheet.iter_rows(min_row=2, values_only=True):for cell in row:data_list.append(cell)# 打印结果
print(data_list)# 将列表分为每5个一组的嵌套列表
nested_list = [data_list[i:i + 5] for i in range(0, len(data_list), 5)]# 打印结果
print(nested_list)print('---------1、制作对联----------')# 遍历嵌套列表并提取特定索引的值(不要第2列的名字)
extracted_values = [[str(sublist[0]), str(sublist[0]), sublist[2], sublist[3]] for sublist in nested_list if len(sublist) >= 5]# 打印结果
print(extracted_values)# 将 extracted_values 取消嵌套
flattened_list = [item for sublist in extracted_values for item in sublist]# 打印结果
print(flattened_list)# 每10个元素提取一次
chunks = [flattened_list[i:i + 8] for i in range(0, len(flattened_list), 8)]# 打印结果
print(chunks)
print(len(chunks))# 创建临时文件夹
new_folder = path+r'\零时文件夹'
os.makedirs(new_folder, exist_ok=True)for nn in range(0,int(len(chunks))):    doc = Document(path+r'\对联.docx')# 单元格位置3*4格bg=[]for x in range(0,2):        # 4行for y in range(0,2):    # 3列ww=f'{x:02}{y:02}'bg.append(ww)for x in range(0,2):        # 4行for y in range(2,4):    # 3列ww=f'{x:02}{y:02}'bg.append(ww)print(bg)   # ['00', '01', '00', '01', '00', '01', '00', '01', '00', '01', '00', '01', '00', '01', '00', '01']table = doc.tables[0]          # 4567(8)行for t in range(len(bg)):   # 02pp = int(bg[t][0:2])    qq = int(bg[t][2:4])  k = chunks[nn][t] print(pp, qq, k)print(k)  # 写入序号和生肖名称run = table.cell(pp, qq).paragraphs[0].add_run(' '.join(map(str, k)))    # 在单元格0,0(第1行第1列)输入第0个图图案run.font.name = txt # 输入时默认华文彩云字体# run.font.bold = True  # 是否加粗run.font.bold = False  # 是否加粗run.font.color.rgb = RGBColor(200, 200, 200) # 数字小,颜色深0-255if pp == 0:run.font.size = Pt(28)  # 如果单元格是(0,X),就把输入的文字的字体改成28else:run.font.size = Pt(116)  # 其他情况下保持默认字体大小r = run._elementr.rPr.rFonts.set(qn('w:eastAsia'), txt) # 将输入语句中的中文部分字体变为华文行楷table.cell(pp, qq).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 居中    doc.save(new_folder + fr'\\{nn:02}.docx')import os
from docx2pdf import convert
from PyPDF2 import PdfMerger# 定义文件夹路径
input_folder = new_folder
output_folder = path+r'\PDF'
os.makedirs(output_folder,exist_ok=True)merged_pdf_path = os.path.join(output_folder, '01对联.pdf')# 确保输出文件夹存在
os.makedirs(output_folder, exist_ok=True)# 将DOCX文件转换为PDF
convert(input_folder)# 获取转换后的PDF文件列表
pdf_files = [f for f in os.listdir(input_folder) if f.endswith('.pdf')]# 创建PDF合并器对象
merger = PdfMerger()# 将所有PDF文件添加到合并器中
for pdf in pdf_files:pdf_path = os.path.join(input_folder, pdf)merger.append(pdf_path)# 将合并后的PDF保存到指定位置
merger.write(merged_pdf_path)
merger.close()print(f"所有PDF已合并并保存到 {merged_pdf_path}")import shutil
shutil.rmtree(new_folder)print('---------1、制作横批----------')# 遍历嵌套列表并提取特定索引的值(不要第2列的名字)
extracted_values = [[str(sublist[0]), str(sublist[4])] for sublist in nested_list if len(sublist) >= 5]# 打印结果
print(extracted_values)# 将 extracted_values 取消嵌套
flattened_list = [item for sublist in extracted_values for item in sublist]# 打印结果
print(flattened_list)# 每10个元素提取一次(1个人2条,一页需要5人,10个一组,等于30条等于6页
chunks = [flattened_list[i:i + 10] for i in range(0, len(flattened_list), 10)]# 打印结果
print(chunks)
print(len(chunks))# 创建临时文件夹
new_folder = path+r'\零时文件夹'
os.makedirs(new_folder, exist_ok=True)for nn in range(0,int(len(chunks))):    doc = Document(path+r'\横批.docx')# 单元格位置3*4格bg=[]for x in range(0,5):        # 4行for y in range(0,2):    # 3列ww=f'{x:02}{y:02}'bg.append(ww)print(bg)   # ['00', '01', '00', '01', '00', '01', '00', '01', '00', '01', '00', '01', '00', '01', '00', '01']table = doc.tables[0]          # 4567(8)行for t in range(len(bg)):   # 02pp = int(bg[t][0:2])    qq = int(bg[t][2:4])  k = chunks[nn][t] print(pp, qq, k)print(k)  # 写入序号和生肖名称run = table.cell(pp, qq).paragraphs[0].add_run(' '.join(map(str, k)))    # 在单元格0,0(第1行第1列)输入第0个图图案run.font.name = txt  # 输入时默认华文彩云字体# run.font.bold = True  # 是否加粗run.font.bold = False  # 是否加粗run.font.color.rgb = RGBColor(200, 200, 200) # 数字小,颜色深0-255if qq == 0:run.font.size = Pt(28)  # 如果单元格是(0,X),就把输入的文字的字体改成28else:run.font.size = Pt(109)  # 华文隶书字体下横批最大109,否则就两行了r = run._elementr.rPr.rFonts.set(qn('w:eastAsia'), txt) # 将输入语句中的中文部分字体变为华文行楷table.cell(pp, qq).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 居中    doc.save(new_folder + fr'\\{nn:02}.docx')import os
from docx2pdf import convert
from PyPDF2 import PdfMerger# 定义文件夹路径
input_folder = new_folder
output_folder = path+r'\PDF'
os.makedirs(output_folder,exist_ok=True)merged_pdf_path = os.path.join(output_folder, '02横批.pdf')# 确保输出文件夹存在
os.makedirs(output_folder, exist_ok=True)# 将DOCX文件转换为PDF
convert(input_folder)# 获取转换后的PDF文件列表
pdf_files = [f for f in os.listdir(input_folder) if f.endswith('.pdf')]# 创建PDF合并器对象
merger = PdfMerger()# 将所有PDF文件添加到合并器中
for pdf in pdf_files:pdf_path = os.path.join(input_folder, pdf)merger.append(pdf_path)# 将合并后的PDF保存到指定位置
merger.write(merged_pdf_path)
merger.close()print(f"所有PDF已合并并保存到 {merged_pdf_path}")import shutil
shutil.rmtree(new_folder)print('---------3、对联横批合并----------')# 定义文件夹路径
input_folder = path+r'\PDF'
output_folder = path
os.makedirs(output_folder,exist_ok=True)merged_pdf_path = os.path.join(output_folder, f'01幼儿姓名的对联横批{int(len(flattened_list)/4)}人.pdf')# 确保输出文件夹存在
os.makedirs(output_folder, exist_ok=True)# 将DOCX文件转换为PDF
convert(input_folder)# 获取转换后的PDF文件列表
pdf_files = [f for f in os.listdir(input_folder) if f.endswith('.pdf')]# 创建PDF合并器对象
merger = PdfMerger()# 将所有PDF文件添加到合并器中
for pdf in pdf_files:pdf_path = os.path.join(input_folder, pdf)merger.append(pdf_path)# 将合并后的PDF保存到指定位置
merger.write(merged_pdf_path)
merger.close()print(f"所有PDF已合并并保存到 {merged_pdf_path}")import shutil
shutil.rmtree(input_folder)

作品展示

用红色A4纸打印出来(因为红色纸已经做了蛇年红包和福字贴,不够了,我只打印了当天来园孩子的名字)

裁纸机切割

没来的孩子纸张背面又打印了一位来园孩子的名字对联

教学展示

时间:2025年1月14日

班级:中2班

人数:11人

看视频:了解对联的习俗(桃符)及贴法

对联和横批配好了,按学号摆放,幼儿找自己的名字

按学号来领取(先男后女)

幼儿描对联(要求是各种黑色笔、但幼儿用了黑色和彩色笔)

剪对联

这位孩子把灰色部分都描粗了,很像毛笔字

大部分孩子都是线描,把灰色变成黑色线条即可


准备贴门帘

(黏贴雌雄扣,雄扣,尖头)

因为不确定幼儿会把雌帖贴在红对联背面的什么位置,我就随即贴了很多雄扣,最好是剪一块,但我没有准备,只能“将就”使用用

幼儿贴对联及合影

 

感悟

1.AI模型太强大了:用AI批量写幼儿的姓名藏头诗,它写的太好了,都是吉祥的祝福,有语境,有内涵,仿佛家长取名时就是考虑到这些意义。

2.幼儿写对联方式:用Python批量制作成对联横批样式,幼儿用黑色笔描画。制作属于自己的独特对联。大部分幼儿对汉字不感兴趣,只是描红了。个别孩子颜色选择、画笔选择和添画图案上进行了设计。

后续:

门上扣子清理

因为横批封住了门,所以拍照期间,两位搭档老师都是从后门走来。

中午,搭档说:我刚才看见门上有白色东西,我想它们一直有吗?平时怎么没有注意到?”

我说:是我刚才贴的,我会拔下来的

第二天孩子们做“换装书”制作

我让他们把门上的白色扣子手抠下来,用在“换装书”作品上。两位女孩说:扣不动(黏贴太牢了)

于是我预先把扣子抠下一半,然后他们再硬拔下来。

门上的雌雄扣被开了个口子,孩子容易捏着边,硬拔了(照片没有拍)

依靠动作快的孩子们,总算把门上的扣子回收的收尾工作做好了。孩子们对“拔钉子”有一定的参与兴趣。

后续思考:

1、制作独一无二的名字对联,很有意义。家长看照片时觉得“很有新意。”

2、学号数字比较小,在红色背景下看不清楚,下次把学号字体换成黑体,用黑色。

3.、对联反面的扣子黏贴位置,如何确定

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/8965.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Node.js基础

浏览器知识 浏览器 个浏览器都内置了DOM、BOM等API函数,供浏览器中的Javascript调用。 每个浏览器都有对应的JavaScript解析引擎。 浏览器中的JavaScript环境 V8引擎负责解析和执行JavaScript代码 内置API是由运行环境提供的特殊接口,只能在所属的运…

【漫话机器学习系列】066.贪心算法(Greedy Algorithms)

贪心算法(Greedy Algorithms) 贪心算法是一种逐步构建解决方案的算法,每一步都选择当前状态下最优的局部选项(即“贪心选择”),以期望最终获得全局最优解。贪心算法常用于解决最优化问题。 核心思想 贪心选…

WPF基础 | WPF 常用控件实战:Button、TextBox 等的基础应用

WPF基础 | WPF 常用控件实战:Button、TextBox 等的基础应用 一、前言二、Button 控件基础2.1 Button 的基本定义与显示2.2 按钮样式设置2.3 按钮大小与布局 三、Button 的交互功能3.1 点击事件处理3.2 鼠标悬停与离开效果3.3 按钮禁用与启用 四、TextBox 控件基础4.…

GD32的GD库开发

所有的Cortex-M处理器都有相同的SysTick定时器,因为CMSIS-Core头文件中定义了一个名为SysTick的结构体。 这个定时器可以用作延时函数,不管是STM32的芯片还是GD32,AT32的芯片,delay函数都可以这么写,只要它是cortex-M…

跨域问题及解决方案

跨域问题不仅影响开发效率,还可能导致项目进度延误。因此,理解和掌握跨域问题的原理及其解决方案对于前端开发者和后端开发者来说都至关重要。本文将详细介绍什么是跨域、跨域产生的原因,以及常见的后端跨域解决方案。 文章目录 一、什么是跨…

MoE的学习

1.MoE的介绍 混合专家模型(Mixture of Experts,MoE)是一种先进的神经网络架构,旨在通过整合多个模型或“专家”的预测来提升整体模型性能。MoE模型的核心思想是将输入数据分配给不同的专家子模型,然后将所有子模型的输…

c++学习第十四天

提示:以下是本篇文章正文内容,下面案例可供参考。 //力扣代码 class Solution {const char* numStrArr[10]{"","","abc","def","ghi","jkl","mno","pqrs","tuv&q…

【deepseek】deepseek-r1本地部署-第二步:huggingface.co替换为hf-mirror.com国内镜像

一、背景 由于国际镜像国内无法直接访问,会导致搜索模型时加载失败,如下: 因此需将国际地址替换为国内镜像地址。 二、操作 1、使用vscode打开下载路径 2、全局地址替换 关键字 huggingface.co 替换为 hf-mirror.com 注意:务…

循序渐进kubernetes-RBAC(Role-Based Access Control)

文章目录 概要Kubernetes API了解 Kubernetes 中的 RBACRoles and Role Bindings:ClusterRoles and ClusterRoleBindings检查访问权限:外部用户结论 概要 Kubernetes 是容器化应用的强大引擎,但仅仅关注部署和扩展远远不够,集群的安全同样至…

思维练习题

目录 第一章 假设法1.题目1. 如何问问题2. 他们的职业是分别什么3. 谁做对了4. 鞋子的颜色 2.答案 空闲时间写一些思维题来锻炼下思维逻辑(题目均收集自网上,分析推理为自己所写)。 第一章 假设法 一个真实的假设往往可以让事实呈现眼前&…

HarmonyOS:创建应用静态快捷方式

一、前言 静态快捷方式是一种在系统中创建的可以快速访问应用程序或特定功能的链接。它通常可以在长按应用图标,以图标和相应的文字出现在应用图标的上方,用户可以迅速启动对应应用程序的组件。使用快捷方式,可以提高效率,节省了查…

深入探索C++17的std::any:类型擦除与泛型编程的利器

文章目录 基本概念构建方式构造函数直接赋值std::make_anystd::in_place_type 访问值值转换引用转换指针转换 修改器emplaceresetswap 观察器has_valuetype 使用场景动态类型的API设计类型安全的容器简化类型擦除实现 性能考虑动态内存分配类型转换和异常处理 总结 在C17的标准…

DeepSeek-R1 蒸馏模型及如何用 Ollama 在本地运行DeepSeek-R1

在人工智能飞速发展的领域中,大型语言模型(LLMs)的出现可谓是一项重大变革。在这些模型里,DeepSeek - R1 及其蒸馏模型备受瞩目,它们融合了独特的能力与高可用性。今天我们一起聊一下 DeepSeek - R1 蒸馏模型究竟是什么…

机器学习day3

自定义数据集使用框架的线性回归方法对其进行拟合 import matplotlib.pyplot as plt import torch import numpy as np # 1.散点输入 # 1、散点输入 # 定义输入数据 data [[-0.5, 7.7], [1.8, 98.5], [0.9, 57.8], [0.4, 39.2], [-1.4, -15.7], [-1.4, -37.3], [-1.8, -49.1]…

java多线程学习笔记

文章目录 关键词1.什么是多线程以及使用场景?2.并发与并行3.多线程实现3.1继承 Thread 类实现3.2Runnable 接口方式实现3.3Callable接口/Future接口实现3.4三种方式总结 4.常见的成员方法(重点记忆)94.1setName/currentThread/sleep要点4.2线程的优先级…

无耳科技 Solon v3.0.7 发布(2025农历新年版)

Solon 框架! Solon 框架由杭州无耳科技有限公司(下属 Noear 团队)开发并开源。是新一代,面向全场景的 Java 企业级应用开发框架。从零开始构建(非 java-ee 架构),有灵活的接口规范与开放生态。…

Redis常用命令合集【一】

1.Redis常用命令 Redis是典型的key-value数据库,key一般是字符串,而value包含很多不同的数据类型: Redis为了方便我们学习,将操作不同数据类型的命令也做了分组,在官网( https://redis.io/commands &#…

python学opencv|读取图像(四十八)使用cv2.bitwise_xor()函数实现图像按位异或运算

【0】基础定义 按位与运算:两个等长度二进制数上下对齐,全1取1,其余取0。 按位或运算:两个等长度二进制数上下对齐,有1取1,其余取0。 按位取反运算:一个二进制数,0变1,1变0。 按…

docker 学习笔记

一、docker容器快速上手以及简单操作 docker的image和container image镜像 docker image就是一个read.only文件,可以理解成一个模版,docker image具有分层的概念 可以自己制作,也可以从registry拉去 container容器 一个运行中的docker …

【PyTorch】5.张量索引操作

目录 1. 简单行、列索引 2. 列表索引 3. 范围索引 4. 布尔索引 5. 多维索引 个人主页:Icomi 在深度学习蓬勃发展的当下,PyTorch 是不可或缺的工具。它作为强大的深度学习框架,为构建和训练神经网络提供了高效且灵活的平台。神经网络作为…