前言

点击查看代码地址

我们在日常生活中,有太多的重复机械工作,比如A表中的数据复制粘贴到B表。一两次尚可接受,如果每天都要重复,岂不是浪费生命?学一门编程语言的意义即在此,劳动时间的缩短就代表劳动产出的增加。所以又想起那句老话:人生苦短,快用python。

最初设计

这是我在工作中遇到的一个问题,我大致了解了一下在手术麻醉排班过程中需要完成的各部分工作——哪些是可以轻易用机器代替的,哪些是没办法的。这里我直接略去其他,只关注可以用机器代替部分的实现。

这个排班过程实际上是将一群人分配到各个房间的过程,去掉人为因素,实际上就是一个随机分配的问题。当然细节的处理有很多。

以下是每日班表(input文件)的部分截图(已删除涉及隐私部分)

input

下图则是要被分配的医生的表格(persons文件,涉及隐私,内容改为百家姓):

persons

此表格有两个sheets,第一个是高年资医师,作为负责和主麻,这里每个片区只列了4位医生,但其实只要小于等于房间数就可以了,系统会自己填补空白;第二个sheet是低年资医师,作为助手,这里为了方便,列出的数量与房间数目一致,实际操作中,只要小于等于房间数即可。

程序的目标就是将persons文件中的不同年资的医师,填补到负责、主麻、助手三列中。代码可点击文章开头的链接查看,也可download到本地来试着执行一下,每次执行得到的output.xls都是随机分配的,前提是已经安装了python环境,安装python环境的教程这里不详述,搜索即可。

输出效果

下图即为执行surgery_duty.py后得到的output.xls文件:

output

空白表格表示人员不足,需配比,此时需要通过手工调配得到最后的班表。本系统只要将人员放置到合适的片区,则完全随机分配,公平公正。

几点注意

  • 此程序只能解决机械重复的部分,后期各方因素都是需要排班人员整合考虑的,但也可或多或少缩短排班时间,日积月累,时间收益是可观的。
  • 代码的大致思路是:建立各个片区的房间列表——读取persons文件信息并进行洗牌(为了随机分配),人数不足则用空白填补(用到了一个首尾间隔分配的方法使人员和空白能够尽量间隔分配,而不至于出现几个房间都是空白的情况),最后构建房间与人员的字典——拷贝排班文件,对应房间写入人员,保存表格。
  • 如果出现错误,一般是表格的格式有改变,因为这个程序是按照8月的某一天的排版表做的,因此需要尽量统一排班表格式才能推广。

写到最后

本程序只是出于学习和兴趣爱好才写的,不带有任何功利或者利益目的。并且在我心里,深深知道一件事,工作即工作,爱好即爱好,生活即生活,如果不分清楚,就会活得糊里糊涂。因此,我没有义务担除了本职工作以外的任何工作。所有的行为,只跟兴趣爱好和学习有关。套用某大神的一句话:学习,是最幸福的事情。