【办公类-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人岗排列方法

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

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

2、时间:跳过节日练习排列【办公类-16-04】“核酸采样3人轮流排班表”(python 排班表系列)_第3张图片

存在问题:

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

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

 2.手动表格制作

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

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

2号点采样轮班表(2022.9-2023.1)
周次 星期一 星期二 星期三 星期四 星期五
1 03夏、01 01姚、03
2 01姚、02 02凌、01 02凌、03 03夏、02 03夏、01
3 中秋 01姚、03 01姚、02 02凌、01 02凌、03
4 03夏、02 03夏、01 01姚、03 01姚、02 02凌、01
5 02凌、03 03夏、02 03夏、01 01姚、03 01姚、02
6 国庆 02凌、01 02凌、03
7 03夏、02 03夏、01 01姚、03 01姚、02 02凌、01
8 02凌、03 03夏、02 03夏、01 01姚、03 01姚、02
9 02凌、01 02凌、03 03夏、02 03夏、01 01姚、03
10 01姚、02 02凌、01 02凌、03 03夏、02 03夏、01
11 01姚、03 01姚、02 02凌、01 02凌、03 03夏、02
12 03夏、01 01姚、03 01姚、02 02凌、01 02凌、03
13 03夏、02 03夏、01 01姚、03 01姚、02 02凌、01
14 02凌、03 03夏、02 03夏、01 01姚、03 01姚、02
15 02凌、01 02凌、03 03夏、02 03夏、01 01姚、03
16 01姚、02 02凌、01 02凌、03 03夏、02 03夏、01
17 01姚、03 01姚、02 02凌、01 02凌、03 03夏、02
18 03夏、01 01姚、03 01姚、02 02凌、01 元旦
19 02凌、03 03夏、02 03夏、01 01姚、03 01姚、02
20 02凌、01 02凌、03 03夏、02 03夏、01 01姚、03
21 01姚、02 02凌、01
说明: 1 采样
2 辅助(管子)

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

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

后续思考:

在excle表格内容加入日期

你可能感兴趣的:(Python,java,开发语言)