這個我目前是先隨機產生一些顧客到來的時間,但是接下來的當等待的時間太長而離開的功能想了很久沒寫出來,也沒一點思路,請問我下面的代碼該怎么改,或者有什么幾題思路去改
import datetime
import random
customerPR = 0.5
class timeshow:
def __init__(self,time):
self.time=time
def alltime(self):
pass
def closetime(self):
pass
# later = datetime.datetime.now() + datetime.timedelta(minutes=self.time)#營業時間
# print(" 本次營業結束,店面關門!"+later.strftime("%Y-%m-%d %H:%M"))
class customer: # 顧客
def __init__(self,time,nowtime):
self.time=time
self.nowtime = nowtime # 營業開始時間
self.customer_num=0 # 顧客總人數
self.dicttime = {} # 字典 存放顧客到達時間
self.temp=0
def addcustomer (self):
for i in range(self.time):
self.nowtime = datetime.timedelta(minutes=1) + self.nowtime # 顧客到達時間
if customerPR > random.random(): # 亂數小于0.5則增加一個顧客
self.temp += 1
self.dicttime.update({self.temp:self.nowtime}) # 顧客到達時間加入串列
self.customer_num += 1 #人數+1
return self.dicttime
def showcustomer (self):
print("一共有{}名顧客".format(self.customer_num))
return self.customer_num
class running: # 服務員處理業務
def __init__(self,num_peopel,all_time,dic):
self.solved = 0 # 完成人數
self.all_time = all_time # 營業時間
self.temp = 1 # 記錄顧客處理順序
self.dic = dic # 存放顧客到達時間
self.begin_time = self.dic[self.temp] # 開始處理時間
self.end_time = 0 # 結束處理時間
self.rd = 0 # 隨機生成店員處理時間
self.leave = 0 # 離開的顧客
self.finish = 0 # 完成的顧客
self.tempMan = [] #暫存
self.deltemp = []
self.k = 0
# for x in dic.values():
# print(x.strftime("%Y-%m-%d %H:%M"))
def solved_num(self):
for i in range(self.all_time):
try:
self.begin_time = self.dic[self.temp] # 開始時間是第一個元素
self.rd = random.randint(1, 5)
self.end_time = self.begin_time + datetime.timedelta(minutes=self.rd)
for f in self.dic:
try:
if self.begin_time <= self.dic[f+1] or self.dic[f+1] <= self.end_time: # 在處理的時候到來
self.k = list(self.dic.keys())[list(self.dic.values()).index(self.dic[f+1])]
self.tempMan.append(self.k)
except:
break # 超出索引停止
for j in self.tempMan: # 回圈處理時候到來的顧客
try:
# 等待2分鐘的時間還沒處理完
if self.dic[j] + datetime.timedelta(minutes=2) < self.end_time and self.dic[j] in self.dic.values():
self.k = list(self.dic.keys())[list(self.dic.values()).index(self.dic[j])]
self.deltemp.append(self.k) # 2分鐘后還沒處理玩的加入
del self.tempMan[self.k] # 洗掉加入的
self.leave += 1
except:
continue
for x in self.deltemp: # 回圈兩分鐘后還沒處理玩的
try:
if x in self.dic.values(): # 如果兩分鐘后還在dic里面
self.k=list(self.dic.keys())[list(self.dic.values()).index(x)] # 找出對應的key
del self.dic[self.k] # 洗掉對應在dic里面的鍵
except:
continue
del self.dic[self.temp] # 成功回圈一次 洗掉完成的顧客
self.temp += 1 # 顧客處理順序+1
self.finish += 1 # 完成人數+1
except:
self.temp += 1 # 如果已洗掉 則顧客處理順序+1繼續回圈
def main():
print("當前時間為: " + datetime.datetime.now().strftime("%Y-%m-%d %H:%M"))
business_time = int(input("請輸入營業時間(分鐘)"))
begin_time=datetime.datetime.now()
c=customer(business_time,datetime.datetime.now())
c.addcustomer() # 增加顧客
c.showcustomer() # 顯示顧客
r=running(c.customer_num,business_time,c.dicttime)
r.solved_num()
print("離開人數:{}".format(r.leave))
print("完成人數:{}".format(r.finish))
# for x in r.tempMan:
# print(x.strftime("%Y-%m-%d %H:%M"))
#for i in c.dicttime.values():
# print(i.strftime("%Y-%m-%d %H:%M"))
if __name__ == '__main__':
main()
# 到達時間 等待時間 計數時間
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/23108.html
上一篇:flask中-%的作用
