Python自动排班:确保每天有人值班,避免连续值班
import random
定义人员列表
people = ['张莹', '范艾利', '温海霞', '柯乔', '冀腾宇', '程姣姣', '曹立帆']
定义可选的工作日列表
available_days = { '张莹': ['周一'], '范艾利': ['周一', '周三', '周四'], '温海霞': ['周三'], '柯乔': ['周一', '周二', '周六'], '冀腾宇': ['周四', '周二', '周三'], '程姣姣': ['周一', '周二', '周三', '周四', '周五', '周六', '周日'], '曹立帆': ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] }
定义班主任列表
tutors = list(range(1, 21))
定义班主任需要排班的日期
tutor_days = ['周五']
初始化排班字典
schedule = {} for i in range(1, 21): schedule[i] = []
循环填充每周的排班
for week in range(1, 21): # 随机排序人员列表 random.shuffle(people)
# 分配人员到工作日
for day in ['周一', '周二', '周三', '周四', '周五', '周六', '周日']:
if day in tutor_days:
# 每周五排班给班主任
schedule[week].append(tutors.pop(0))
else:
# 平均分配其他人员
for person in people:
if day in available_days[person]:
schedule[week].append(person)
people.remove(person)
break
# 如果people列表为空,则重新填充
if len(people) == 0:
people = ['张莹', '范艾利', '温海霞', '柯乔', '冀腾宇', '程姣姣', '曹立帆']
打印所有20周的排班
for week in range(1, 21): print(f"Week {week}: {schedule[week]}")
原文地址: https://www.cveoy.top/t/topic/okzj 著作权归作者所有。请勿转载和采集!