程序实现值班表

在很多时候我们需要拍值班表,现在我遇到一个问题就是每一个周一到周五需要一个人值班,手动排序很麻烦,现在用程序实现这一功能,具体如下:

1 导入包

import datetime
import calendar
import math
import pandas as pd
from itertools import cycle

2 主要代码

start_date = datetime.date(2023,12,4)    # 这里输入星期一  
end_date = datetime.date(2026,1,1)
# 计算两个日期之间的周数
weeks_count = (end_date-start_date).days/7
weeks_count = math.ceil(weeks_count)
# 获取每个星期一和星期五的日期
dates = []
for week in range(weeks_count):
    # 获取本周的星期一日期
    week_start = start_date + datetime.timedelta(days=week * 7)
    # print('week_start:',week_start)
    week_end = week_start + datetime.timedelta(days=6)
    # print('week_end:',week_end)
    monday = week_start + datetime.timedelta(days=(week_start.weekday() + 1) % 7 + 6)   # 这里必须是6  上面开始日期是星期一
    # print('周一:',monday)
    # 获取本周的星期五日期
    friday = monday + datetime.timedelta(days=4)
    # 将日期添加到列表中
    dates.append((monday, friday))

3 日期和名单循环遍历

name_list = ['张三','李四','王五','周二','孙悟空','张无忌']   # 值班人员名单
# 创建DataFrame
df = pd.DataFrame(columns=['周一', '周五','name'])
# 循环遍历日期对列表,并将日期写入DataFrame
for date_pair,name in zip(dates,cycle(name_list)):
    monday = date_pair[0]
    friday = date_pair[1]
    df = df.append({'周一': monday, '周五': friday,'name':name}, ignore_index=True)

下面是结果显示:
程序实现值班表_第1张图片
注:这个程序有一点小问题,后续优化之后再会更新的!!!

你可能感兴趣的:(python,算法)