python写一个随机排班表,每次值班为24小时,分为员工和领导,员工100人,50个女员工,50个男员工,领导30人,15个男领导,15个女领导,要求排班时男领导对应男员工。并且员工只随机一次
时间: 2023-11-21 20:03:55 浏览: 125
下面是一个可能的实现,使用 Python 的 random 模块进行随机排班:
```python
import random
# 员工名单
employees = ['员工' + str(i) for i in range(1, 101)]
# 女员工名单
female_employees = employees[:50]
# 男员工名单
male_employees = employees[50:]
# 领导名单
leaders = ['领导' + str(i) for i in range(1, 31)]
# 女领导名单
female_leaders = leaders[:15]
# 男领导名单
male_leaders = leaders[15:]
# 随机派班函数
def random_schedule():
# 拷贝员工名单
available_employees = employees.copy()
# 随机选择一名员工
selected_employee = random.choice(available_employees)
# 将该员工从可选名单中删除
available_employees.remove(selected_employee)
# 如果该员工是男员工,则随机选择一名男领导
if selected_employee in male_employees:
available_leaders = male_leaders.copy()
# 如果该员工是女员工,则随机选择一名女领导
else:
available_leaders = female_leaders.copy()
# 随机选择一名领导
selected_leader = random.choice(available_leaders)
# 将该领导从可选名单中删除
available_leaders.remove(selected_leader)
# 返回值班表
return (selected_employee, selected_leader)
# 测试
schedules = []
for i in range(5):
schedule = random_schedule()
schedules.append(schedule)
print(f'第{i+1}次值班:', schedule)
# 检查员工只随机一次
assert len(set([s[0] for s in schedules])) == 5
# 检查男领导对应男员工
for s in schedules:
if s[0] in male_employees:
assert s[1] in male_leaders
else:
assert s[1] in female_leaders
```
在上面的代码中,我们先定义了员工和领导的名单,然后定义了一个随机派班函数 `random_schedule()`。该函数首先拷贝员工名单,然后随机选择一名员工,并将该员工从可选名单中删除。接着,如果该员工是男员工,则选择一名男领导,否则选择一名女领导。最后,将该领导从可选名单中删除,并返回值班表。
我们通过多次调用 `random_schedule()` 函数来生成多个值班表,并检查员工只随机一次,男领导对应男员工等要求。
阅读全文