背景需求:
制作了中班户外游戏的班级排班表(有场地和无场地)
同理孩子做大班的户外游戏 班级排班表(有场地和无场地)
分析:
1、1-14周,大班场地是2周轮一次(中班是1周轮1次),7*2周
2、15-19周,大班场地是1周轮1次(中班都是1周轮1次)
3、大班有7个场地,也是斜线循环,共计7次(每次2周)
代码展示:
#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')