class Queue:
def init(self):
self.items=[]
def isEmpty(self):
return self.items ==[]
def enqueue(self,item):
self.items.insert(0,item)#0是指对象object插入索引的位置
def dequeue(self,):
return self.items.pop()
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.timeRemaining!=0:
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()
class Task:
def init(self,time):
self.timestamp=time#生成时间戳,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(self):
num=random.randrange(1,181)#构造概率
if num == 180:
return True
else:
return False
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(currenttime))
labprinter.startNext(nexttask)
labprinter.tick()
averageWait=sum(waitingtimes)/len(waitingtimes)
print("Aberage Wait %6.2f secs %3d tasks remaining."%(averageWait,printQueue.size()))
for i in range(20):
simulation(3600,5)
D:\python\python.exe D:/python/painting.py
Traceback (most recent call last):
File "D:/python/painting.py", line 66, in
simulation(3600,5)
NameError: name 'simulation' is not defined
simulation在哪里定义的,是全局函数还是Task的成员函数,没有缩进无法判断
你自己检查下。按理说应该作为全局函数才行