排值班表的小程序

不记得是从什么时候开始我区要求24小时值班,就是每天都要有个领导24小时在单位,另外白班两个人(4小时),夜班一个人(12小时),外加保安一名,可能是怕办公楼被人偷走吧。制度如此,P民也只能遵照执行,只是单位人多,排值班是个挺复杂的事,之前负责排值班表的同事就问过我能不能帮她写个小程序,那个时候比较菜,只帮她写了个excel统计每个人的值班次数的函数,排人还是要手动排。今年值班计划又升级了,夜班必须一男一女,我很怀疑这个制度的初衷是不是为了促进同事友谊,不过不管怎么说排表难度又增加了,已经非常擅长python(并没有)的我突然想起来要不要写个小程序来玩玩,于是就搞了起来(这篇不会有代码的,在我改好之前)。

结果这个程序的长度有点出乎我的想象,而且一直没想好要怎么排次数比较好。目前是把名字和之前历史数据的值班次数(分休息日和工作日)先汇在数据库里,然后读成列表,名字是一个列表,休息日和工作日次数分别生成一个列表,然后生成了一个总次数的列表。排的时候从列表读取一个最小值,然后打印出列表下标对应的人名。之所以这样设定是因为值班表没确定之前没必要把数据写到库里,但是又需要计次,并且据我(薄弱的)观察,字典这个数据格式并不符合我的需求。

其实这么看还是挺简单的,但是代班,白班(分上下午),夜班男,夜班女,同事里还有专门值班的(全天班并且次数比较多),院领导每个月最多只值一次班,只能把这些特殊情况的统计次数写成负数,然后放在次数统计的列表尾部,次数到零了就把他们删掉,再另外建一个列表输出最后的本月统计= -= 所以写出来的东西根本不好意思给别人看。最近想了一个解决办法是给这些特殊人群加一个最大次数的参数,这样就不用删列表了,缺点是每次都要对比一下有没有够次数,可能还是删列表更简单一点。

后期还想增加一些同事的特殊需求,比如有些人喜欢值上午班,有些人喜欢下午班和晚班连值之类的,不过我也确实想不出更好的算法了,看了下网上其他朋友的排班表似乎还有用矩阵的,但是嗯毫无帮助= -=

如果我更新出更正常的写法好意思给别人看的话就贴出来。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据