医院为提升服务质量,编写程序模拟就诊顺序。现获取某医生早上就诊患者的数据,分别为姓名、预约或挂号时间、就诊时长(单位:分钟)。预约挂号数据(准时到达人员数据)如图a所示,直接挂号数据如图b所示。运行程序,输出前三位就诊顺序名单,如图c所示。
图 a |
图 b |
图 c |
def sort(lst) :
n=len(lst)-1
for i in range(n-1) :
for j in range(n,i+1,-1) :
if:
lst[j],lst[j-1]=lst[j-1],lst[j]
return lst
def insert(lst,i,head) :
curtime=lst[head] [1]+int(lst[head] [2]) #就诊结束时间
if :
lst[i].append(head)
head=i
curtime=lst[i] [1]+int(lst[i][2])
i+=1
q=lst[p] [3]
while i<=len(lst)-1 :
if curtime>=lst[q][1] and q!=-1 : #预约人员优先就诊
p=q
q=lst[p] [ ]3
curtime+=int(lst[p][2])
elif curtime>=lst[i] [1] or q==-1 :
lst[i].append(q)
curtime+=int(lst[i] [2])
p=i
i+=1
elif lst[q] [1]<=lst[i] [1]:
curtime=lst[q] [1]
else :
curtime=lst[i] [1]
return lst
#预约挂号数据转换为列表 lst,并将时间转换为分钟,如 08:30 转为 510,代码略
lst=sort(lst)
n=len(lst)-1
for i in range(1,n) :
lst[i].append(i+1) #lst[i]追加一个元素 i+1
lst[n].append(-1)
#将门诊挂号数据合并至列表 lst 中,列表 lst数据如图d所示,代码略 head=1
lst1=insert(lst,n+1,head)
#输出就诊顺序,代码略
图 d