【办公类-16-04】“核酸采样3人轮流排班表”(python 排班表系列)

背景需求:

       为了保护广大幼儿及教职工的健康安全,从2022年9月开学后,上海在校学生统一在学校内进行核酸采样。本周我开始做机动班,也轮到了幼儿园核酸采样点的工作——2位行政+1位机动  3个人自行协商,每天由2个人在2号采样点进行采样和辅助工作。

      这几天3个人都是口头协商。我想如果有一个《2号点3人采样排班表》,就能更合理的分配工作量。不过从实际情况来看,管理层的工作非常忙碌琐碎,基本不可能按照表格分配工作,最终还是以每天的协商为主。但是从信息管理的角度,我还是尝试写一个“核酸采样点3人轮流排班表”

程序设计

    因为前期有2份排班表的代码(机动岗代班排班表、大班运动场地排序表),所以这份代码很快就完成了。

import sys
import random
import xlrd
import xlwt
from openpyxl import load_workbook
# # list2=int(input('你班级第1周第1天的运动场地数字(不同班级不同的起始数字'))


print('-----------第1步,3个人每天轮2人做核酸(前面的人采样、后面的掰管)--------')
# namelist=[ 'XRZ','YTH','LZH']# 基本的一周排班
name=[ '01张三','02李四','03王五']# 基本的一周排班

namelist=[]

# 无论总数多少人,都可以任意组合,排除重复值
num = 0
for i in name:              
        for k in name:         
                if (i!=k)and(k!=i) :
                        print("人员组合:"+str(i)+"、"+str(k))
                        num = num + 1
                        namelist.append(str(i)+"、"+str(k))
print(namelist)
print("人员组合总数是:"+ str(num)+'组')
# ['01张三、02李四', '01张三、03王五', '02李四、01张三', '02李四、03王五', '03王五、01张三', '03王五、02李四']
# 人员组合总数是:6组


# 可以执行3个人的多,如果>3人会出现错误和重复值,这里不用)
# for i in range(0,len(name)):
        # print(i) 
       #  a=name[i-1]+"、"+name[i]   
       #  b=name[i]+"、"+name[i-1]
       #  namelist.append(a)
       #  namelist.append(b)
# print(namelist)
'''
显示结果:['03王五、01张三', '01张三、03王五', '01张三、02李四', '02李四、01张三', '02李四、03王五', '03王五、02李四']
'''
print('---------第2步:把基本的内容循环21次 126个元素------')
list=[]
list2=[]
for x in range(21):  #大约有21周,但是
        for y in namelist:       # 提取基本一周排班里面的每一个值
                # print(y)
                list.append(y)  # 把每个班级添加到list列表里,顺序为“小3(二)','中1(一)','中3(总)','中4(总)','大1(总)” 并且重复提取21次。
print(list)  # 不缩进,打印出来只有一份126个元素的列表

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']

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

print('-----------第3步,保存到excle--------')
# 以下是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=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  

arrlan = len(list2)# list2是终端显示的列表值
row = 1     # 第2行
for i in range(arrlan):         # 遍历21组[]的总数
        for col,item in enumerate(list2[i],1):            # L2[i]=表格内的内容=item,索引数字=col
                sheet.write(row,col,item)  # row,col,item 行=1、列=索引数字、内容=表格内容 写入第一行第一列
        row += 1   
            
try:
    workbook.save(r"D:\test\03办公类\10采样点轮班\采样点轮班排班.xls")    # 新建保存 只能xls
    print('计划生成成功')
except e:
    print('失败...')
    print(e)

   重点解析:

1、岗位出席情况:将3人循环成6种2人岗排列方法

 

2、时间:跳过节日练习排列

存在问题:

1、需要手动调整节日那一周的排班信息的位置

 2.手动表格制作

 

2号点采样轮班表(2022.9-2023.1)
周次星期一星期二星期三星期四星期五
103夏、0101姚、03
201姚、0202凌、0102凌、0303夏、0203夏、01
3中秋01姚、0301姚、0202凌、0102凌、03
403夏、0203夏、0101姚、0301姚、0202凌、01
502凌、0303夏、0203夏、0101姚、0301姚、02
6国庆02凌、0102凌、03
703夏、0203夏、0101姚、0301姚、0202凌、01
802凌、0303夏、0203夏、0101姚、0301姚、02
902凌、0102凌、0303夏、0203夏、0101姚、03
1001姚、0202凌、0102凌、0303夏、0203夏、01
1101姚、0301姚、0202凌、0102凌、0303夏、02
1203夏、0101姚、0301姚、0202凌、0102凌、03
1303夏、0203夏、0101姚、0301姚、0202凌、01
1402凌、0303夏、0203夏、0101姚、0301姚、02
1502凌、0102凌、0303夏、0203夏、0101姚、03
1601姚、0202凌、0102凌、0303夏、0203夏、01
1701姚、0301姚、0202凌、0102凌、0303夏、02
1803夏、0101姚、0301姚、0202凌、01元旦
1902凌、0303夏、0203夏、0101姚、0301姚、02
2002凌、0102凌、0303夏、0203夏、0101姚、03
2101姚、0202凌、01
说明:1采样
2辅助(管子)

3、使用反馈:日期不显示

老师表示:只有周次,看不到具体看日期,查询不方便。

后续思考:

在excle表格内容加入日期

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿夏reasonsummer

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

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

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

打赏作者

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

抵扣说明:

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

余额充值