【办公类-16-07-05】合并版“2023下学期 中班户外游戏(有场地和无场地版,两周一次)”(python 排班表系列)

c019305f28c64d1c82445d1722753680.png

ba66bbbcd94d417caf8747dd8daef333.png

背景需求:

制作了中班户外游戏的班级排班表(有场地和无场地)

【办公类-16-07-04】合并版“2023下学期 中班户外游戏(有场地和无场地版,一周一次)”(python 排班表系列)-CSDN博客文章浏览阅读365次,点赞9次,收藏4次。【办公类-16-07-04】合并版“2023下学期 中班户外游戏(有场地和无场地版,一周一次)”(python 排班表系列)https://blog.csdn.net/reasonsummer/article/details/136196822

同理孩子做大班的户外游戏 班级排班表(有场地和无场地)

分析:

1、1-14周,大班场地是2周轮一次(中班是1周轮1次),7*2周

2、15-19周,大班场地是1周轮1次(中班都是1周轮1次)

3、大班有7个场地,也是斜线循环,共计7次(每次2周)

8efe1d41a77d4df89f309e2e455ff733.png

代码展示:


#20230217 


'''
大班7个班级
2023学年下学期中班户外游戏安排_有场地和无场地 两个版本
(7个班级 第1-14周 各班每2周玩一个场地5天, 15周-19周1周1次 )
作者:阿夏
时间:2024年2月20日
'''

# import sys
# sys.path.append('/path/to/openpyxl')

import sys
import random
import xlrd
import xlwt
from openpyxl import load_workbook

import time



# '''班主任贴周计划用的(按班级分类)'''
weekweek=19
# int(input('共有几周?(如19周 20)\n'))
# aaa=int(input('1、需要场地、2、不要场地\n'))

for aaa in [1,2]:

    print('---------第1步:制作每个班级的游戏的总表------')

    # 本学期:大1,大2,大3,大4,大5,大7,大8,大9班,其中6班空缺,一共有8个大班
    gradenum=[]
    for g in range(1,8):
        gradenum.append('大{}班'.format(g))
    
    gradenum.insert(0, gradenum.pop())
    # print(gradenum)
    # ['大7班', '大1班', '大2班', '大3班', '大4班', '大5班', '大6班']
    # print(len(gradenum))# 7

    L=[]# 班级
    L1=[]
    L3=[]  
    L2=[]
    L4=[]
    # 这里是8个活动室游戏活动室,因为后面有递进,所以把最后一个 08,放到01前面,这样摆放后面才会正确)
    # L3=['美术游戏','角色游戏','建构游戏','表演游戏','沙水游戏','角色游戏']原始
    L3=gradenum

    # 生成6个班级(第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 
     # print(L1)
    #     [['大1班', '大2班', '大3班', '大4班', '大5班', '大6班', '大7班'], ['大2班', '大3班', '大4班', '大5班', '大6班', '大7班', '大1班'], ['大3班', '大4班', '大5班', '大6班', '大7班', '大1班', '大2班'], ['大
    # 4班', '大5班', '大6班', '大7班', '大1班', '大2班', '大3班'], ['大5班', '大6班', '大7班', '大1班', '大2班', '大3班', '大4班'], ['大6班', '大7班', '大1班', '大2班', '大3班', '大4班', '大5班'], ['大7班', '大1班', '大2班', '大3班', '大4班', '大5班', '大6班']]
    # print(len(L1))
    # # 7组基本    

    # 第1、2周相同,第3、4周相同--第13=14周
           # 把各班“游戏活动室基本元素8个”循环21次,数量多一点,便于后期提取内容
    for y in L1:  
        for b in range(2):       
            for z in y:              
                L.append(z)     #把y提取的单个元素一个个加到列表里,并且依次循环22次,数量足够多
    
    # print(L)
    #   ['大1班', '大2班', '大3班', '大4班', '大5班', '大6班', '大7班', '大1班', '大2班', '大3班', '大4班', '大5班', '大6班', '大7班', '大2班', '大3班', '大4班', '大5班', '大6班', '大7班', '大1班', '大2班', '大3班', '大4班', '大5班', '大6班', '大7班', '大1班', '大3班', '大4班', '大5班', '大6班', '大7班', '大1班', '大2班', '大3班', '大4班', '大5班', '大6班', '大7班', '大1班', '大2班', '大4班', '大5班', '大
    # 6班', '大7班', '大1班', '大2班', '大3班', '大4班', '大5班', '大6班', '大7班', '大1班', '大2班', '大3班', '大5班', '大6班', '大7班', '大1班', '大2班', '大3班', '大4班', '大5班', '大6班', '大7班', '大1 
    # 班', '大2班', '大3班', '大4班', '大6班', '大7班', '大1班', '大2班', '大3班', '大4班', '大5班', '大6班', '大7班', '大1班', '大2班', '大3班', '大4班', '大5班', '大7班', '大1班', '大2班', '大3班', '大4班
    # ', '大5班', '大6班', '大7班', '大1班', '大2班', '大3班', '大4班', '大5班', '大6班']
    # print(len(L))
    # 98 /7班=14周

    # 15-19周
    for y in L1[:5]:   # 只要5周  7组基本取前5的内容,变出 35个班级
        for z in y:              
            L.append(z)
    # print(L)
    # print(len(L))
    # 133   最后班级等于98+35=133个班级

        
    # print('---------第2步:六类游戏乘以19周(只有一个)------')  
    L4=['美术游戏1(滑滑梯)','美术游戏2(小山坡)','建构游戏 (东侧操场)','沙水游戏 (一楼中庭)','角色游戏1(大1班南门口)','角色游戏2(小农场)','表演游戏 (大3班南门口)']
    # 确保5个字符,4个就加一个空格

    L6=[]
    for v in range(weekweek):        # 19周a        
        for w in L4:
            # for l in range(5):# 美术游戏中1班一周玩5次,角色
                L6.append(w)
    # print(L6)
    # print(len(L6))
    # 133

    # 根据班级,增加角色、表演旁边的场地(这里不涉及班级,共用场地,所以直接加在游戏名称后面
        # 美术游戏1:滑滑梯;                美术游戏2:小山坡;
        # 角色游戏1:大1班南门口;          角色游戏2:小农场;
        # 建构游戏:东侧操场;               表演游戏:大3班南门口

    L5=[]
    
    for cc in range(len(L6)):    
        L5.append(L6[cc])
        
    # print(L5)
    # print(len(L5))
    # 133

    # 复制5次
    L7=[]
    for ff in L5:
        for ww in range(5):
            if aaa==1:
                L7.append(ff)        # 美术活动(操场)
            if aaa==2:
                L7.append(ff[:5])      # 美术活动
    # print(L7)
    # print(len(L7))
    # 665/5=133

#    切割成5个一组
       
    for j in range(0,int(len(L7)/5)):#第1周
        L2.append(L7[j*5:j*5+5])
    print(L2)
    print(len(L2))
    # 133
    # L2=角色游戏等6类游戏的嵌套列表




#     # # #     # print('---------第3步:如果每周需要跳过假日(考虑跳过假日)------')

#     # # #     # #  每周需要的天数 (跳过节日.如第1周只有2天工作,9月1-2日(周四周五) ,第3周周一是中秋节放假1天,所以只有4个工作日)
#     # # #     # day=['2','5','4','5','5','2','5','5','5','5','5','5','5','5','5','5','5','4','5','5','2']

#     # # #     # print('大{}班'.format(gradenum[num]))
#     # # #     # # 第1周
#     # # #     # for d in range(0,1):          # d=索引数字
#     # # #     #     print(L[0:int(day[0])]) # 列表有8个活动室项目,但只要其中5个(周一到周五)
#     # # #     #     L2.append(L[0:int(day[0])]) 
#     # # #     # # 第2周开始
#     # # #     # for d in range(1,len(day)):        # 0-21
#     # # #     #     # print(d+1)
#     # # #     #     L=L[int(day[d-1]):]  # day[0]=2,
#     # # #     #     L.append(L) # 将a安排到最后一个座位
#     # # #     #     print(L[0:int(day[d])])# 列表是八个循环,我只要其中5个
#     # # #     #     L2.append(L[0:int(day[d])])

#     # # #     # 以下是跳过假日的最初的写法,太长了,研究上面的是2022.9.9-2023.1.17 共21周的假日安排


    print('---------第4-1步:xls写入)------') 
    workbook = xlwt.Workbook()# 新建xls工作簿
    sheet = workbook.add_sheet("Sheet")# 新建xls工作簿的工作表的名字是sheet 

    print('---------第4-2步:第1行 写入 星期一等)------')    
    weeks = ['班级','周次','星期一','星期二','星期三','星期四','星期五',]
    # weeks=['周次','美术游戏','角色游戏','建构游戏','表演游戏','沙水游戏','角色游戏']
    week = len(weeks) 

    col=0
    for d in range(0, len(weeks)):
        sheet.write(0,col,weeks[d])         # 因为只有一行,所以就用有两种写法(enumerate和这种)
        col+= 1 



    print('---------第4-3步:第2列写入周次)------')    # 第0列 写入“第1周、第2周、第3周……第21周
    dates=[]
    # 制作第一列的所有文字
    for i in range(1,int(weekweek+1)):
        for r in range(len(L4)):
            n="第{}周".format('%02d'%i)    # 用遍历方法获得“第1周、第2周、第21周”字样,
            dates.append(n)          # 添加到列表    s
    print(dates)  
    print(len(dates))  
    #114 

    # 写入周次
    row=1
    for d in range(0, len(dates)):
        sheet.write(row, 1, dates[d])         # 这里enumerate不能用,因为只有一列,所以就用
        row += 1    

    print('---------第4-3步:第1列写入班级)------') 
    # 写入班级列 L=班级列
    row=1
    for h in range(0, len(L[:len(dates)])):        # 只要班级列表的前114个        
        sheet.write(row,0,L[h])         # 因为只有一行,所以就用有两种写法(enumerate和这种)
        row += 1      


    print('---------第4-5步:第3-9列写入游戏内容一周五次相同)------') 


    row=1    
    #  写入游戏内容列 L2=游戏内容一周五个
    for i in range((len(L2))):         # 遍历21组[]的总数
        for col,item in enumerate(L2[i],2):            # 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\桌面\周计划\大班\过渡.xls")    # 新建保存 只能xls
        print('计划生成成功')
    except e:
        print('失败...')
        print(e)

    # print('---------第6步:把1份xls按照班级,分类成N个不同的工作表内(班主任贴周计划用)------')      
    # https://blog.csdn.net/xo3ylAF9kGs/article/details/135856653

    # 切割成同表
    import pandas as pd
    import os
    
    df = pd.read_excel(r'C:\Users\jg2yXRZ\OneDrive\桌面\周计划\大班\过渡.xls')
    if aaa==1:
        writer = pd.ExcelWriter(r'C:\Users\jg2yXRZ\OneDrive\桌面\周计划\大班\02贴墙壁版-大班户外游戏-有场地标题.xls')
    if aaa==2:
        writer = pd.ExcelWriter(r'C:\Users\jg2yXRZ\OneDrive\桌面\周计划\大班\01贴周计划-大班户外游戏-无场地.xls')
        
    df.to_excel(writer, sheet_name='Sheet', index=False)
    
    for j in df['班级'].unique():
        df[df['班级'] == j].to_excel(writer, sheet_name=j+'户外游戏', index=False)
    
    writer.save()



# 删除过渡EXCLE
os.remove(r'C:\Users\jg2yXRZ\OneDrive\桌面\周计划\大班\过渡.xls')


重点说明:

22486b126d1f4bc3811407b1179ff958.pnge633527d6ea941979b9f6a89ca4775fd.png

如何让第1、2周的7个班级相同

1a96bf5c797848e6ab0fd98076c01c39.png

82dbf7db37864dd892a8aee1307fd32c.png

cc6a803bf4264a76bd186d91c65186e4.png作品展示:

296f65604f70450689d8e9899b861162.png

一、无场地版——贴周计划用(贴周计划上的空格,宽度有限,最好4个字符)2d28ce0043f943d49bd8cacf9452cc14.png

53115b058ec04885b3c252f58018a4e3.png

二、有场地版——贴墙用(便于每天查看活动内容和区域,尽量在A4一页上)

4b494c720de64a9f99e84c60abe03c05.png

7773dafd4aa4400ca023fcd829761979.png问题:

目前没有对EXCEL表格进行格式设置,都是通过手动全选标签,批量统一设置标题、添加黑色边框、调整行列宽度。

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿夏reasonsummer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值