医院病床安排算法

#coding:utf-8
import random
import datetime
start = datetime.datetime.now()
#定义病人结构体
class patient(object):
    def __init__(self):
        self.id = []
        self.treatment = []
        self.emergency = []
#病人初始化 n:未看病病人,m:病床数,p:已入住病人,w:等待人数
def patient_init():
    #list = ['False','True']
    inList = patient()
    treatList = patient()
    n = input("请输入还没有入院的病人数:")
    n = int(n)
    m = input("请输入病床数:")
    m = int(m)
    p = input("请输入已入院的病人数:")
    p = int(p)
    #创建已经入院的病人
    for i in range(p):
        treatList.id.append(i)
        treatList.treatment.append(random.randint(1,20))
    #创建还没有入院的病人
    for j in range(n):
        inList.id.append(j+p)
        inList.treatment.append(random.randint(1,20))
        if random.randint(0,1) == 0:
            inList.emergency.append('F')
        else:
            inList.emergency.append('T')
        #inList.emergency = list[random.randint(0,1)]
    return n,m,p,inList,treatList

#显示目前状态
def patient_dispaly(n,w,p,inList,treatList,waitList):
    print("即将问诊的病人         等待住院的病人         正在住院的病人")
    print("序号 住院时间 外伤/非外伤  序号 住院时间 外伤/非外伤  序号 住院时间")
    for i in range(max(len(inList.id),len(waitList.id),len(treatList.id))):
        # 输出未入院病人
        if i<len(inList.id):
            print(inList.id[i],'    ',inList.treatment[i],'          ',inList.emergency[i],'      ',end = '')
        else:
            print("                            ",end = '')
        #输出等待的病人
        if i<len(waitList.id):
            print(waitList.id[i],'    ',waitList.treatment[i],'          ',waitList.emergency[i],'       ',end = '')
        else:
            print("                            ",end = '')
        #输出治疗中的病人
        if i<len(treatList.id):
            print(treatList.id[i],'    ',treatList.treatment[i],'          ',end = '')
        else:
            print("                             ",end = '')
        print("")
#按优先级排序:
def Sort(waitList):
    temp = patient()
    temp1 = patient()
    temp2 = patient()
    for a in range(len(waitList.id)):
        if waitList.emergency[a] == 'T':
            temp1.id.append(waitList.id[a])
            temp1.treatment.append(waitList.treatment[a])
            temp1.emergency.append(waitList.emergency[a])
        else:
            temp2.id.append(waitList.id[a])
            temp2.treatment.append(waitList.treatment[a])
            temp2.emergency.append(waitList.emergency[a])
    #print(temp2.id,temp1.id)
    for i in range(len(temp1.id)):
        for j in range(i+1,len(temp1.id)):
            if temp1.treatment[i]>temp1.treatment[j]:
                temp1.id[i], temp1.id[j] = temp1.id[j], temp1.id[i]
                temp1.treatment[i],temp1.treatment[j] = temp1.treatment[j],temp1.treatment[i]
                temp1.emergency[i], temp1.emergency[j] = temp1.emergency[j], temp1.emergency[i]
    for m in range(len(temp2.id)):
        for n in range(m+1,len(temp2.id)):
            if temp2.treatment[m]>temp2.treatment[n]:
                temp2.id[m], temp2.id[n] = temp2.id[n], temp2.id[m]
                temp2.treatment[m],temp2.treatment[n] = temp2.treatment[n],temp2.treatment[m]
                temp2.emergency[m], temp2.emergency[n] = temp2.emergency[n], temp2.emergency[m]
    temp1.id.extend(temp2.id)
    temp1.treatment.extend(temp2.treatment)
    temp1.emergency.extend(temp2.emergency)
    return temp1
#病人看病n:未看病病人,m:病床数,p:已入住病人,w:等待人数
def see_doctor(n,w,p,m,inList,treatList,waitList,days):
    sum = 0
    j = []
    print('days',days)
    #patient_dispaly(n, w, p, inList, treatList, waitList)
    #如果未入院病人>0,则进入等待列表
    if len(inList.id)>0:
        waitList.id.append(inList.id[0])
        waitList.treatment.append(inList.treatment[0])
        waitList.emergency.append(inList.emergency[0])
        del inList.id[0]
        del inList.treatment[0]
        del inList.emergency[0]
    # 正在治疗的病人 n:未看病病人,m:病床数,p:已入住病人,w:等待人数
    for i in range(len(treatList.id)):
        if treatList.treatment[i] > 1:
            treatList.treatment[i] = treatList.treatment[i] - 1
            '''if treatList.treatment[i] == 0:
                del treatList.id[i]
                del treatList.treatment[i]'''
        else:
            j.append(i)
    j.sort(reverse=True)
    for o in j:
        del treatList.id[o]
        del treatList.treatment[o]
    # 如果存在空余病房,则入住n:未看病病人,m:病床数,p:已入住病人,w:等待人数
    while(True):
        if len(treatList.id) == m or len(waitList.id) == 0:
            break
        treatList.id.append(waitList.id[0])
        treatList.treatment.append(waitList.treatment[0])
        del waitList.id[0]
        del waitList.treatment[0]
        del waitList.emergency[0]
        '''else:
            if len(waitList.id)>0:
                treatList.id[i] = waitList.id[0]
                treatList.treatment[i] = waitList.treatment[0]
                del waitList.id[0]
                del waitList.treatment[0]
                del waitList.emergency[0]'''
    days = days + 1
    waitList = Sort(waitList)
    patient_dispaly(n, w, p, inList, treatList, waitList)
    if len(inList.id) > 0 or len(waitList.id) > 0 or len(treatList.id) > 0:
        see_doctor(n, w, p, m, inList, treatList, waitList, days)
    #print(waitList.id)
    '''for j in range(len(treatList.id)):
        if treatList.treatment[j] == 0:
            sum = sum + 1
    if sum < len(treatList.id):
        see_doctor(n,w,p,m,inList,treatList,waitList,days)'''
if __name__ == '__main__':
    waitList = patient()
    w = 0
    days = 2
    n, m, p, inList, treatList = patient_init()
    print('days', 1)
    patient_dispaly(n, w, p, inList, treatList, waitList)
    see_doctor(n,w,p,m,inList,treatList,waitList,days)
end = datetime.datetime.now()
print(end - start)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值