当前位置: 首页 > news >正文

【办公类-16-06】20230901大班运动场地分配表-斜线排列、5天循环、不跳节日,手动修改节日”(python 排班表系列)

背景需求:

大班组长发来一个“运动排班”的需求表:“就是和去年一样的每个班的运动排班,就因为今年大班变成7个班,删掉一个场地,就要重新做一份,不然我就用去年的那份了(8个大班排班)”

(拆了中8班,孩子被分流到其他7个大班)

于是我拿出2023年2月的那份运动py,复制了一份新的2023年9月

参数修改

1、修改运动场地列表

对比发现

(1)删除了勇敢者道路

(2)最后的”爬龙接力赛”放到第一的位置,

排序方式——没有考虑跳过节日,全部按照一周五天排列

2、代码展示:(稍微修改一下,搞了一个零时文件夹放7个班级EXCLE,最后只保留一个合并EXCEL)


'''
目的:2023年9月大班总部分散运动场地(各班滚动排)
作者:阿夏
时间:2023年9月6日15:30
'''import sys
import random
import xlrd
import xlwt
from openpyxl import load_workbook
import time
import os,shutilprint('---------运动场地的循环------')
print('---------规则:------')
print('---------1.有7个运动场地,01 02 03 04 05 06 07 :------')
print('---------2.大1班从01开始游戏,01 02 03 04 05 06 07 :------')
print('---------3.大2班从02开始游戏,02 03 04 05 06 07 ,01 ------')
print('---------4.大3班从03开始游戏,03 04 05 06 07 ,01 02 ------')
print('---------依次类推,最后制作出所有大班的每周的运动排序表 ------')
print('---------通常是每周5天,需要跳过节假日 ------')
time.sleep(2)print('---------第1步:把8个运动场地循环21次(105元素组成的列表)------')# 本学期:大1,大2,大3,大4,大5,大7,大8,大9班,其中6班空缺,一共有8个大班
gradenum=['1','2','3','4','5','6','7']# 新建一个”装N份word和PDF“的文件夹
lswj=r"C:\Users\jg2yXRZ\OneDrive\桌面\word2pdf2png\零时文件夹"
if os.path.exists(lswj):print("目录已存在")
else:print("目录不存在,创建成功")os.mkdir(lswj)# print(len(gradenum))# 8# radenum的长度=7,0-7,一共循环8次
for num in range(0,len(gradenum)):L=[]# 这里的L等于list,因为和最后excle合并程序中的代码有冲突,所以全部改成大写的首字母L1=[]L3=[]  L2=[]# 这里是8个运动场地,因为后面有递进,所以把最后一个 ,放到01前面,这样摆放后面才会正确)L3=['爬笼接力赛\n(爬笼、树屋、沙漏、书包、铃铛)','小小交通车\n(平衡车、三轮车、扭扭车、自行车、木桥)','平衡小勇士\n(长短竹梯、三脚架、长凳、轮胎、安全垫)','百变小能手\n(小足球、箩筐、百变迷宫架、垫子、马甲)','山洞大探险\n(轮胎、安全垫、麻绳)','对战投投乐\n(弹力棉球、吸盘球、飞镖盘)','跑跳小达人\n(轮胎、跨栏、锣鼓、接力棒)',]
# '勇敢者道路\n(背篓、布袋、矿泉水瓶)',# 生成8个班级8组运动(第1个元素不同)for i in range(0,len(gradenum)):        # b = L3.pop(0)    # 在运动场地列表L3中 删除 第1个元素 大1班 先删除,就是从01开始L3.append(b)  # 在运动场地列表L3最后 添加 第1个元素# print(L[0])L1.append(L3[0:len(gradenum)])     # 把不断变化的内容添加到L1 # 8个班级场地“基本元素“构成了L1列表:[['01', '02', '03', '04', '05', '06', '07', ''], ['02', '03', '04', '05', '06', '07', '', '01'], ['03', '04', '05', '06', '07', '', '01', '02'], ['04', '05', '06', '07', '', '01', '02', '03'], ['05', '06',  # print(L1)for b in range(23):        # 把各班“场地基本元素8个”循环21次,数量多一点,便于后期提取内容for y in L1[num]:    #抽取L1中的一组组内容  L1[0]=['01', '02', '03', '04', '05', '06', '07', '']、L1[1]=['02', '03', '04', '05', '06', '07', '', '01'],# print(y)               # 在用 y提取L1[0]中的'01', '02', '03', '04', '05', '06', '07', ''三个元素L.append(y)     #把y提取的单个元素一个个加到列表里,并且依次循环22次,数量足够多print(L)# 打印出来大1班 列表组=['01', '02', '03', '04', '05', '06', '07', '','01', '02', '03', '04', '05', '06', '07', '','01', '02', '03', '04', '05', '06', '07', '','01', '02', '03', '04', '05', '06', '07', '','01', '02', '03', '04', '05', '06', '07', '']print('---------第2步:如果一周有5天(不考虑跳过假日)------')
#   print('大{}班'.format(gradenum[num]))for i in range(1):#共20周这是第1周,是原始的位置81234a=L[0:5]# 列表有8个运动项目,但只要其中5个(周一到周五)for x1 in a:L2.append(x1)for i in range(2,22):  #共20周    这是第2-20周  ,如果是21周,把2,21 改成2,22 L=L[5:]  #  5代表前面一个数已经取过5位L.append(L) # 将a安排到最后一个座位b=L[0:5] # 列表是八个循环,我只要其中5个for x2 in b:L2.append(x2)  # print('大{}班'.format(gradenum[num]))# print('---------第3步:如果每周需要跳过假日(考虑跳过假日)------')# #  每周需要的天数 (跳过节日.如第1周只有2天工作,9月1-2日(周四周五) ,第3周周一是中秋节放假1天,所以只有4个工作日)# # day=['3','5','5','6','5','2','5','5','5','5','5','5','5','5','5','5','5','4','5','5','2']# kong=''# tt1='清明节'# tt2='劳动节'# tt3='端午节'# # 第1周 第2-7周开始 第8周部分# # for d in range(0,1):       # L2.append(kong) # L2.append(kong) # for kk in L[0:int(3+5*6+2)]:#     L2.append(kk) # # 清明# L2.append(tt1) #  # 清明后到五一前 # for kk in L[int(3+5*6+2):int((3+5*6+2)+(2+5*2))]:#     L2.append(kk)    # # 23日(周日)也上班 所以一共6天 一周排5填,28号周五放到下周周一算# for kk in L[int((3+5*6+2)+(2+5*2)):int((3+5*6+2)+(2+5*2)+6)]:#     L2.append(kk)      # # 劳动节休息休息3天,实际1天空格 (28日放到周一了 周二五一节) # L2.append(tt2)    # # 劳动节456三天上班+6周5填天 1周3天(劳动节后到端午节前)# for kk in L[int((3+5*6+2)+(2+5*2+6)):int((3+5*6+2)+(2+5*2+6)+3+(5*6+3))]:#     L2.append(kk)    # # 端午节三天,占一个格子在周四 周日要上班顶替周五# L2.append(tt3) # for kk in L[int((3+5*6+2)+(2+5*2+6)+3+(5*6+3)):int((3+5*6+2)+(2+5*2+6)+3+(5*6+3))+6]:#     L2.append(kk)    print(L2) print('---------第4步:xls写入)------') workbook = xlwt.Workbook()# 新建xls工作簿sheet = workbook.add_sheet("Sheet")# 新建xls工作簿的工作表的名字是sheet # 第0列 写入“第1周、第2周、第3周……第21周dates=[]for i in range(1,22):n="第{}周".format(i)    # 用遍历方法获得“第1周、第2周、第21周”字样,dates.append(n)          # 添加到列表    print(dates)        # print(date)row=1for d in range(0, len(dates)):sheet.write(row, 0, dates[d])         # 这里enumerate不能用,因为只有一列,所以就用row += 1    # 第0行 写入 星期一  '星期二','星期三','星期四','星期五  #weeks = ['周次','星期一','星期二','星期三','星期四','星期五']week = len(weeks) col=0for d in range(0, len(weeks)):sheet.write(0,col,weeks[d])         # 因为只有一行,所以就用有两种写法(enumerate和这种)col+= 1  # 输入星期的另一种写法# col=0 # for row,item in enumerate(weeks,0):            # 可以这样写L2[i]=表格内的内容=item,索引数字=col 0代表在A1 1代表在B1#     sheet.write(col,row,item)           # 第1行第1列开始写入一行”星期X"# col+=1# 第B2开始写入 运动内容print('-----------第3步,保存到excle--------')# 以下是xls保存#  在list_date五个五个取值   list3=[]for k in range(0,21):list3.append(L2[k*5:k*5+5])       print(list3)# print(list)for opq in list3:print(opq)# arrlan2 = len(list_d)# 日期抽取5天一组arrlan = len(list3)# L2['07', '', '01', '02', '03']的长度 21组row = 1     # 第2行for i in range(arrlan):         # 遍历21组[]的总数for col,item in enumerate(list3[i],1):            # L2[i]=表格内的内容=item,索引数字=colsheet.write(row,col,item)  # row,col,item 行=1、列=索引数字、内容=表格内容 写入第一行第一列row += 1   print('---------第5步:xls保存N份工作簿(每份一页)------')             try:workbook.save(lswj+'\\20230901大{}班分散运动.xls'.format(gradenum[num]))    # 新建保存 只能xlsprint('计划生成成功')except e:print('失败...')print(e)print('---------第6步:把N份xls单页内容合并在1个工作簿的N个工作表内)------')      
time.sleep(2)# 获取目录下所有的表
import os
import pandas as pd# dir = r'C:\Users\jg2yXRZ\OneDrive\桌面\word2pdf2png'
# 获取目录下所有的表
origin_file_list = os.listdir(lswj)
print(origin_file_list)with pd.ExcelWriter(r"C:\Users\jg2yXRZ\OneDrive\桌面\word2pdf2png\20230901大班分散运动( 不跳过节日).xls") as writer:# 循环遍历表格for i in origin_file_list:# 拼接每个文件的路径file_path = lswj + '\\' + i# 把表名赋予给对应的sheetsheet_name = i[:-4]df = pd.read_excel(file_path)# 变相解决表格中第一行第一列为空的缺陷ring = "".join(list(str(i) for i in df.index))# string = .join(list(str(i) for i in df.index))# 判断如果索引都为数字,则不保留索引(根据自己代码调整)if ring.isdigit():df.to_excel(writer, sheet_name,index=False)else:df.to_excel(writer, sheet_name)# 新建一个”装N份word和PDF“的文件夹if os.path.exists(lswj):shutil.rmtree(lswj)print("目录已存在")
else:print("目录不存在,创建成功")

结果展示:

最后零时文件夹自动被删除了。只保留一个合并XLSX

三、手动调整表格(补充节假日)

原始表格展示:

1、有七个班级的工作表(每个表文字都挤在一起)

2、每个班级都是五天(塞满,不考虑节假日)

(一)选中所有班级标签

没选中时时灰色底纹状态

(二)选择列,拉宽

(三)自动换行 居中

四、手动删除内容,添加更改节日

所有的班级的19周第一天都改成了元旦(全选标签,白色底纹状态下,才能批量修改)))

同样的方法删除“第一周的前面几天”

同样的方法修改“国庆节”(全选标签,删除文字,添加文字)

完工了,发给大班组长

给大班组长的相关解释:

1、国庆节的补班(周六周日)

2、验证排序正确性(以大1班为例,第1周是“小小交通车“开始,但”前面的4天删除了。图示说明正确性(保证各班每天出去分散运动,不会场地重复)

3、每班一份五天,便于教师做周计划(贴文字,不需要日期)、也便于教师每天运动前看看班级张贴的运动表单,了解活动场地,(班级贴的运动表单最好有日期,但这又要按7天补日期和星期,写起来有点费力)

目前这样已经够用了。

继续测试更多的便利的工作表单吧!

相关文章:

【办公类-16-06】20230901大班运动场地分配表-斜线排列、5天循环、不跳节日,手动修改节日”(python 排班表系列)

背景需求: 大班组长发来一个“运动排班”的需求表:“就是和去年一样的每个班的运动排班,就因为今年大班变成7个班,删掉一个场地,就要重新做一份,不然我就用去年的那份了(8个大班排班&#xff0…...

java学习--day13 (static关键字、异常)

文章目录 day12复习今天的内容1.static关键字【重点】1.1生活的角度来理解静态的资源1.2Java中的静态1.2.1static修饰成员变量1.2.2static修饰成员方法1.2.3static修饰代码块 2.异常2.1生活中的异常2.2Java中的异常2.3Throwable类2.4错误和异常2.5异常【重点】2.5.1异常的捕捉2…...

英飞凌TC3xx--深度手撕HSM安全启动(五)--TC3xx HSM启动流程、通信机制分析

在包含HSM的MCU的软件开发里,Host和Hsm应该为两个独立的软件工程。不管是Etas还是Vector的HSM包,都是需要单独收费的。 既然是单独的工程,相应的启动代码也是必须要有的。 在英飞凌的HSM固件架构里,HSM BootRom主要有以下几个作用:内部测试、生产使用、启动配置等。那么接…...

【窗体】Winform两个窗体之间通过委托事件进行值传递,基础篇

2023年,第38周。给自己一个目标,然后坚持总会有收货,不信你试试! 在实际项目中,我们可能会用到一些窗体做一些小工具或者小功能。比如:运行程序,在主窗体A基础上,点击某个按钮希望能…...

mac使用指南

新公司给配备了mac,可惜土鳖的我不会用,所以特地写了一篇文章记录学习mac的过程 快捷键 删除:commanddelete 光标移至最右/左:command右/左箭头 截图:commandshift3/4/5,3代表截全屏,4代表选…...

Git 版本控制系统 笔记

概念:一个免费开源,分布式的代码版本控制系统,帮助开发团队维护代码 作用:记录代码内容,切换代码版本,多人开发时高效合并代码内容【团队开发同一个项目的代码版本管理】 1、Git 安装 之前写了&#xff0…...

VRTK4⭐四.和 UI 元素交互

文章目录 🟥 安装Tilia Unity.UI🟧 配置射线与UI交互器1️⃣ 配置直线射线2️⃣ 配置UI交互器 🟨 配置UI1️⃣ 更新EventSystem2️⃣ 进行Canvas设置 我们要实现的功能: 右手触摸到圆盘:显示直线射线 右手圆盘键按下:与选中UI交互 &#x1f7…...

【STM32】SDIO—SD 卡读写01

基于stm32f103 基于零死角玩转STM32—F103指南者 简介 1.SD 卡总共有 8 个寄存器,用于设定或表示 SD 卡信息。 2.SD卡的寄存器不能像STM32那样访问,而是利用命令访问,SDIO 定义了 64 个命令。SD 卡接收到命令后,根据命令要求对…...

SpringCloud Alibaba 整合Sentinel的基本使用

文章目录 一、什么是Sentinel二、Sentinel 的主要特性1. 流量控制:2. 熔断降级:3. 实时监控:4. 规则配置:5. 集成方便: 三、Sentinel 分为哪几部分:1. 核心库(Java 客户端)2. 控制台&#xff08…...

Linux中如何执行命令

目录 命令格式: 命令分类: 命令帮助: 1、man 2、help 3、--help 4、info命令 终止命令: 补全命令: 1)补全命令: 2)补全文件名和目录名: 命令格式:…...

基于51单片机的智能病房呼叫系统的设计与实现

一、前言 显示床位号使用到4位数码管,为了节约单片IO口,使用TM1637来驱动数码管。 二、TM1637驱动芯片简介 三、电路设计,使用矩阵按键来模拟每个床位的呼叫按钮 四、编写51单片机代码 void delay_ms(u16 n) {u8 i;while(n--){i 111;while…...

js在一个时间范围内产生一个随机时间

js使用使用到Math.random()方法实现在一个时间范围内产生一个随机时间。 /*在时间范围内产生一个随机时间*/ function randomDate(start, end) {if (start ! null && end ! null) {const _start new Date(start).getTime();const _end new Date(end).getTime();cons…...

Javascript Date 对象相关知识

Javascript Date 对象相关知识 参考文章虹猫1992 创建 Date 对象. 方法一: 自动使用当前的日期和时间作为其初始值. var date new Date();方法二:将给定的毫秒数转换为使用的时间,new Date(dateVal) 如果是数字值,dateVal表示指定日期与1970年1月1日午…...

Vim快捷用法

以下为文本操作 1.快速切换 行首^(shift4) 行尾$(shift6) 文章开始gg 位置末尾G 向下翻页CTRLB 向上翻页CTRLF 2.删除内容 删除一行 dd 3.复制粘贴 复制一行yy 粘贴 p 4.撤销操作 撤销操作 u 恢复操作ctrlr 以下都为底行操作 1.显示行号 set nu 2.多文件分屏阅读 加入阅…...

Stream流的常用方法(自用)

自用的笔记, 有🚩 需要多看 基本数据 自定义实体 Data class Student{private String name;private Integer age;private Double height;public Student() {} }假数据 Student s1 new Student(); s1.setAge(20); s1.setName("cookie"); s1.setHeight(…...

【python函数】torch.nn.Embedding函数用法图解

学习SAM模型的时候,第一次看见了nn.Embedding函数,以前接触CV比较多,很少学习词嵌入方面的,找了一些资料一开始也不是很理解,多看了两遍后,突然顿悟,特此记录。 SAM中PromptEncoder中运用nn.Emb…...

with ldid... /opt/MonkeyDev/bin/md: line 326: ldid: command not found

吐槽傻逼xcode 根据提示 执行了这个脚本/opt/MonkeyDev/bin/md 往这里面添加你brew install 安装文件的目录即可...

[golang gui]fyne框架代码示例

1、下载GO Go语言中文网 golang安装包 - 阿里镜像站(镜像站使用方法:查找最新非rc版本的golang安装包) golang安装包 - 中科大镜像站 go二进制文件下载 - 南京大学开源镜像站 Go语言官网(Google中国) Go语言官网(Go团队) 截至目前(2023年9月17日&#x…...

2000-2018年各省能源消费和碳排放数据

2000-2018年各省能源消费和碳排放数据 1、时间:2000-2018年 2、范围:30个省市 3、指标:id、year、ENERGY、COAL、碳排放倒数*100 4、来源:能源年鉴 5、指标解释: 2018年碳排放和能源数据为插值法推算得到 碳排放…...

C# ref 学习1

ref 关键字用在四种不同的上下文中; 1.在方法签名和方法调用中,按引用将参数传递给方法。 2.在方法签名中,按引用将值返回给调用方。 3.在成员正文中,指示引用返回值是否作为调用方欲修改的引用被存储在本地,或在一般…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

XML Group端口详解

在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

<6>-MySQL表的增删查改

目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表&#xf…...

day52 ResNet18 CBAM

在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...