标签:sem result insert als ota ppm print http class
队列



队列代码实现
class queue():
def __init__(self):
print(‘队列初始化‘)
self.items=[]
def isempty(self):
return self.items==[]
def enqueue(self,item):
print(‘入队列:‘,item)
self.items.insert(0,item)
def dequeue(self):
print(‘出队列:‘)
res=self.items.pop()
return res
def size(self):
return len(self.items)
q=queue()
q.enqueue(1)
q.enqueue(2)
q.enqueue(3)
print(q.dequeue())
应用(击鼓传花)

实现
class queue():
def __init__(self):
#print(‘队列初始化‘)
self.items=[]
def isempty(self):
return self.items==[]
def enqueue(self,item):
#print(‘入队列:‘,item)
self.items.insert(0,item)
def dequeue(self):
#print(‘出队列:‘)
res=self.items.pop()
return res
def size(self):
return len(self.items)
def hotpotato(Name,num):
simqueue=queue()
t=0
for name in Name:
simqueue.enqueue(name)
while simqueue.size()>1:
for i in range(1,num):
simqueue.enqueue(simqueue.dequeue())
result=simqueue.dequeue()
t+=1
print(‘第%s局‘%t,result)
return simqueue.dequeue()
result=hotpotato([‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘],4)
print(result)
应用(模拟打印机打印任务)

打印任务建模


模拟流程


代码实现



代码具体实现
class queue():
def __init__(self):
#print(‘队列初始化‘)
self.items=[]
def isempty(self):
return self.items==[]
def enqueue(self,item):
#print(‘入队列:‘,item)
self.items.insert(0,item)
def dequeue(self):
#print(‘出队列:‘)
res=self.items.pop()
return res
def size(self):
return len(self.items)
import random
#定义打印机类
class printer:
def __init__(self,ppm):
self.pagerate=ppm #打印速度
self.currenttask=None
self.timeremaining=0
def tick(self):
if self.currenttask!=None:
self.timeremaining=self.timeremaining-1
if self.timeremaining<=0:
self.currenttask=None
def busy(self):
if self.currenttask!=None:
return True
else:
return False
def startnext(self,newtask):
self.currenttask=newtask
self.timeremaining=newtask.getpages()*60/self.pagerate
#定义任务类
class Task:
def __init__(self,time):
#生成时间
self.timestamp=time
# 生成打印页数
self.pages=random.randrange(1,21)
def getstamp(self):
return self.timestamp
def getpages(self):
return self.pages
def waittime(self,currenttime):
#计算等待时间
return currenttime-self.timestamp
def newprinttask():
#生成作业
num=random.randrange(1,181)
if num==180:
return True
else:
return False
#numseconds表示模拟打印时间设定,pagesperminute表示打印速度
def simulation(numseconds,pagesperminute):
labprinter=printer(pagesperminute)
printqueue=queue()
waitingtimes=[]
for currentsecond in range(numseconds):
if newprinttask():
task = Task(currentsecond)
printqueue.enqueue(task)
if (not labprinter.busy()) and (not printqueue.isempty()):
nexttask=printqueue.dequeue()
waitingtimes.append(nexttask.waittime(currentsecond))
labprinter.startnext(nexttask)
labprinter.tick()
averagewaite=sum(waitingtimes)/len(waitingtimes)
print(‘打印平均时间:%s,等待打印数:%s‘% (averagewaite,printqueue.size()))
#模拟10次
for i in range(10):
simulation(3600,5)
标签:sem result insert als ota ppm print http class
原文地址:https://www.cnblogs.com/2018-1025/p/12528783.html