【办公类-16-05-04】“2022下学期 大班运动场地分配表-跳过节日循环排序”(python 排班表系列)

news2024/12/25 13:45:35

样例展示:跳过节日的运动场地循环排序表(8个班级8组内容 下学期一共20周)

背景需求:

上学期做过一次大班运动场地安排,跳过节日。2023.2下学期运动场地排班(跳过节日)又来了。

一、场地器械微调

二、排序顺序不变

三、如果让节日的格子空在正确的位置?

上学期虽然程序批量生成了跳过节日的运动场地,但是涉及到节日的部分内容还是需要手动调整。(而且是1个班级的手工剪切复制)

比如 第一周周一的2天但是跳过的节日那一周的运动是从星期一开始排的,需要人工手动把场地贴到指定的格子里(如第一周的星期一星期二的内容实际上是星期四、星期五)

本代码解决的重点——跳过节日,并补全节日名称,每周正好5个

测算场地及中间节日在五天内的总排序

根据校历计算数量、设计占位空格

2023年2月17日 2022学年下学期大班分散运动(跳过节日 20周)备份

import sys
import random
import xlrd
import xlwt
from openpyxl import load_workbook
import time
print('---------运动场地的循环------')
print('---------规则:------')
print('---------1.有8个运动场地,01 02 03 04 05 06 07 08:------')
print('---------2.大1班从01开始游戏,01 02 03 04 05 06 07 08:------')
print('---------3.大2班从02开始游戏,02 03 04 05 06 07 08,01 ------')
print('---------4.大3班从03开始游戏,03 04 05 06 07 08,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','7','8','9']
# print(len(gradenum))# 8

# radenum的长度=7,0-7,一共循环8次
for num in range(0,len(gradenum)):

    L=[]# 这里的L等于list,因为和最后excle合并程序中的代码有冲突,所以全部改成大写的首字母
    L1=[]
    L3=[]  
    L2=[]
    # 这里是8个运动场地,因为后面有递进,所以把最后一个 08,放到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班 先删除08,就是从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', '08'], ['02', '03', '04', '05', '06', '07', '08', '01'], ['03', '04', '05', '06', '07', '08', '01', '02'], ['04', '05', '06', '07', '08', '01', '02', '03'], ['05', '06',  
    # print(L1)

    for b in range(22):        # 把各班“场地基本元素8个”循环21次,数量多一点,便于后期提取内容
        for y in L1[num]:    #抽取L1中的一组组内容  L1[0]=['01', '02', '03', '04', '05', '06', '07', '08']、L1[1]=['02', '03', '04', '05', '06', '07', '08', '01'],
            # print(y)               # 在用 y提取L1[0]中的'01', '02', '03', '04', '05', '06', '07', '08'三个元素
            L.append(y)     #把y提取的单个元素一个个加到列表里,并且依次循环22次,数量足够多
    print(L)
    # 打印出来大1班 列表组=['01', '02', '03', '04', '05', '06', '07', '08','01', '02', '03', '04', '05', '06', '07', '08','01', '02', '03', '04', '05', '06', '07', '08','01', '02', '03', '04', '05', '06', '07', '08','01', '02', '03', '04', '05', '06', '07', '08']


    print('---------第2步:如果一周有5天(不考虑跳过假日)------')
#   
    # print('大{}班'.format(gradenum[num]))

    # for i in range(1):#共20周这是第1周,是原始的位置81234
    #     print(L[0:5]) # 列表有8个运动项目,但只要其中5个(周一到周五)
    #     L2.append(L[0:5])
    # for i in range(2,22):  #共20周    这是第2-20周  ,如果是21周,把2,21 改成2,22 
    #     L=L[5:]  #  5代表前面一个数已经取过5位
    #     L.append(L) # 将a安排到最后一个座位
    #     print(L[0:5]) # 列表是八个循环,我只要其中5个
    #     L2.append(L[0:5])  

    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,21):
        n="第{}周".format(i)    # 用遍历方法获得“第1周、第2周、第21周”字样,
        dates.append(n)          # 添加到列表    
    print(dates)        
    # print(date)

    row=1
    for d in range(0, len(dates)):
        sheet.write(row, 0, dates[d])         # 这里enumerate不能用,因为只有一列,所以就用
        row += 1    
    
    # 第0行 写入 星期一  '星期二','星期三','星期四','星期五  #
    weeks = ['周次','星期一','星期二','星期三','星期四','星期五']
    week = len(weeks) 

    col=0
    for 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', '08', '01', '02', '03']的长度 21组
    row = 1     # 第2行
    for i in range(arrlan):         # 遍历21组[]的总数
        for col,item in enumerate(list3[i],1):            # L2[i]=表格内的内容=item,索引数字=col
            sheet.write(row,col,item)  # row,col,item 行=1、列=索引数字、内容=表格内容 写入第一行第一列
        row += 1   
   
    print('---------第5步:xls保存N份工作簿(每份一页)------')             
    try:
        workbook.save(r"C:\Users\jg2yXRZ\OneDrive\桌面\word2pdf2png\大{}班分散运动.xls".format(gradenum[num]))    # 新建保存 只能xls
        print('计划生成成功')
    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(dir)
print(origin_file_list)

with pd.ExcelWriter(r'C:\Users\jg2yXRZ\OneDrive\桌面\word2pdf2png\20230217大班分散运动(编程详细版 跳过节日).xls') as writer:
    # 循环遍历表格
    for i in origin_file_list:
        # 拼接每个文件的路径
        file_path = dir + '/' + i
        # 把表名赋予给对应的sheet
        sheet_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)

导出位置

最初的样式是这样的(节日已经写进去了)

全选每张表格,进行格式设置。

第11-12周 五一劳动节的排班比较乱,所以加彩色底纹,最下面备注号这一周的“星期排序”(周六周日要补班)

大3班的运动排序情况

大7班的运动排序情况

(没有大6班,所以7班就用6班的场地场地,8班用7班场地,9班用8班场地)

实用效果:

组长强推收藏

特别感悟:

第二次用这个代码做运动场地排列,我感觉人工排场地很费时费力,没有必要。利用程序提高文本资料产生的效率,更精确,更快速。

学以致用,提升效率。节约时间去做更有价值的事情。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

哪里可以找到免费的 PDF 阅读编辑器?7 个免费 PDF 阅读编辑器分享

如果您曾经需要编辑 PDF,您可能会发现很难找到免费的 PDF 编辑器。幸运的是,您可以使用在线资源来编辑该文档,而无需为软件付费。 在本文中,我将介绍七种不同的 PDF 编辑器,它们至少可以让您免费编辑几个文件。我通过…

目标检测笔记(八):自适应缩放技术Letterbox完整代码和结果展示

文章目录自适应缩放技术Letterbox介绍自适应缩放技术Letterbox流程自适应缩放Letterbox代码运行结果自适应缩放技术Letterbox介绍 由于数据集中存在多种不同和长宽比的样本图,传统的图片缩放方法按照固定尺寸来进行缩放会造成图片扭曲变形的问题。自适应缩放技术通…

Qt COM组件导出源文件

文章目录摘要dumpcpp.exe注册COM组件COM 组件转CPP参考关键字: Qt、 COM、 组件、 源文件、 dumpcpp摘要 由于厂家提供的库不是纯净C库,是基于COM组件开的库,在和厂家友好交流无果下,只能研究下Qt 如何调用,好在Qt 的…

rt-thread pwm 多通道

一通道pwm参考 https://blog.csdn.net/yangshengwei230612/article/details/128738351?spm1001.2014.3001.5501 以下主要是多通道与一通道的区别 芯片 stm32f407rgt6 1、配置PWM设备驱动相关宏定义 添加PWM宏定义 #define BSP_USING_PWM8 #define BSP_USING_PWM8_CH1 #d…

分析 vant4 源码,学会用 vue3 + ts 开发毫秒级渲染的倒计时组件,真是妙啊

2022年11月23日首发于掘金,现在同步到公众号。11. 前言大家好,我是若川。推荐点右上方蓝字若川视野把我的公众号设为星标。我倾力持续组织了一年多源码共读,感兴趣的可以加我微信 lxchuan12 参与。另外,想学源码,极力推…

浙江工商大学2023年硕士研究生 入学考试初试成绩查询通知及说明

根据往年的情况,2023浙江工商大学MBA考试初试成绩可能将于2月21日下午两点公布,为了广大考生可以及时查询到自己的分数,杭州达立易考教育为大家汇总了信息。一、成绩查询考生可以登录中国研究生招生信息网(http://yz.chsi.com.cn/…

MySQL - 介绍

前言 本篇介绍认识MySQL,重装mysql操作 如有错误,请在评论区指正,让我们一起交流,共同进步! 本文开始 1.什么是数据库? 数据库: 一种通过SQL语言操作管理数据的软件; 重装数据库的卸载数据库步骤 : ① 停止MySQL服…

分享96个HTML体育竞技模板,总有一款适合您

分享96个HTML体育竞技模板,总有一款适合您 96个HTML体育竞技模板下载链接:https://pan.baidu.com/s/1k2vJUlbd2Boduuqqa0EWMA?pwdj8ji 提取码:j8ji Python采集代码下载链接:采集代码.zip - 蓝奏云 北京奥运火炬PSD模板 奥运…

CCNP350-401学习笔记(101-150题)

101、Refer to the exhibit SwitchC connects HR and Sales to the Core switch However, business needs require that no traffic from the Finance VLAN traverse this switch. Which command meets this requirement? A. SwitchC(config)#vtp pruning B. SwitchC(config)#…

信息时代企业的核心特征-读《硅谷之谜》

引言 几年前读完《浪潮之巅》上下部之后买的书,后来一直搁置没读,直到最近,每天晚上读一点,才把读完,虽然它说自己是《浪潮之巅》的续集,但是内容其实和《浪潮之巅》关系不大,直接读也没有什么问…

再学C语言38:指针操作

C提供了6种基本的指针操作 示例代码&#xff1a; #include <stdio.h>int main(void) {int arr[5] {1, 2, 3, 4, 5};int * p1, *p2, *p3;p1 arr; // 把一个地址赋给指针p2 &arr[2]; // 把一个地址赋给指针printf("指针指向的地址&#xff0c;指针指向地址中…

Yaklang websocket劫持教程

背景 随着Web应用的发展与动态网页的普及&#xff0c;越来越多的场景需要数据动态刷新功能。在早期时&#xff0c;我们通常使用轮询的方式(即客户端每隔一段时间询问一次服务器)来实现&#xff0c;但是这种实现方式缺点很明显: 大量请求实际上是无效的&#xff0c;这导致了大量…

matlab离散系统仿真分析——电机

目录 1.电机模型 2.数字PID控制 3.MATLAB数字仿真分析 3.1matlab程序 3.2 仿真结果 4. SIMULINK仿真分析 4.1simulink模型 4.2仿真结果 1.电机模型 即&#xff1a; 其中&#xff1a;J 0.0067&#xff1b;B 0.10 2.数字PID控制 首先我们来看一下连续PID&#xff1…

[一键CV] Blazor 拖放上传文件转换格式并推送到浏览器下载

前言 昨天有个小伙伴发了一个老外java编写的小工具给我,功能是转换西班牙邮局快递Coreeos express的单据格式成Amazon格式,他的需求是改一下程序为匹配转换另一个快递公司MRW格式到Amazon格式,然而我堂堂一个Blazor发烧友,怎么可能去反编译人家的java修改呢?必须直接撸一个Bl…

Docker 快速上手学习入门教程

目录 1、docker 的基础概念 2、怎样打包和运行一个应用程序&#xff1f; 3、如何对 docker 中的应用程序进行修改&#xff1f; 4、如何对创建的镜像进行共享&#xff1f; 5、如何使用 volumes 名称对容器中的数据进行存储&#xff1f;// 数据挂载 6、另一种挂载方式&…

Mongodb WT_PANIC: WiredTiger library panic

文章目录故障现象排查过程1.查看Log2.同步恢复数据故障现象 周五突然收到Mongo实例莫名奇妙挂了告警&#xff0c;一般都是RS复制集架构模式&#xff08;5节点&#xff09;&#xff0c;查看此实例角色为SECONDAR&#xff0c;挂了暂时不影响线上业务&#xff0c;但还是需要尽快修…

前端智能化在淘宝的2022实践总结

过去十年是智能化蓬勃发展的十年&#xff0c;但未来十年会是智能化渗入各领域彻底改变我们生活和工作的十年。阿里前端智能化方向小组历经 4 年的实践和演变&#xff0c;在前端融入业务技术团队和终端融合的背景之下&#xff0c;前端智能化小组在2022年更多以优化拓展基础业务工…

【计算机网络】因特网概述

文章目录因特网概述网络、互联网和因特网互联网历史与ISP标准化与RFC因特网的组成三种交换方式电路交换分组交换和报文交换三种交换方式的对比与总结计算机网络的定义和分类计算机网络的定义计算机网络的分类计算机网络的性能指标速率带宽吞吐量时延时延带宽积往返时间利用率丢…

球员分析-前锋

1、球员位置 1.1柱式中锋 球员&#xff1a;吉鲁、奥斯梅恩、米特罗维奇 1.2防守型前锋 球员&#xff1a;劳塔罗、瓦尔迪、维尔纳 1.3抢点前锋 球员&#xff1a;伊卡尔迪、曼联c罗、因扎吉 1.4组织型前锋 球员&#xff1a;凯恩、本泽马、迪巴拉 2、战术职责 2.1柱式中锋&#xf…

设计模式-状态机模式

参考 什么是状态机&#xff1f; 设计模式-状态机模式 什么是状态机(有限状态自动机) 可以把状态机比作方程式, 你输入当前信息, 就能得到下一个信息 举个例子, 按钮门有两个状态, 关闭状态和打开状态, 如果按下开门按钮, 门的状态就从关闭到打开 状态机就是接受门当前状态…