Python队列 - 打印

代码:

 1 from pythonds.basic.queue import Queue
 2 import random
 3 
 4 class Printer:  # 不需要def
 5     def __init__(self, ppm):  # 也就是初始化这个打印机的时候,你得告诉打印机每分钟能打印多少页
 6         self.pagerate = ppm  # 每分钟打印多少面 
 7         self.currentTask = None
 8         self.timeRemaing = 0
 9     
10     def busy(self):  # 除了初始函数,其他不需要加两个斜杠
11         return self.currentTask != None
12 
13     def tick(self):  # 每一个内置函数,一般都需要传入属于这个类的内置函数
14         if self.timeRemaing != 0:
15             self.timeRemaing = self.timeRemaing - 1
16             if self.timeRemaing <= 0:
17                 self.currentTask = None
18     
19     def startNewTask(self, newtask):
20         self.currentTask = newtask
21         self.timeRemaing = newtask.getPages()*60/self.pagerate  # 注意这里是每分钟打印多少张
22 
23 class Task:
24     def __init__(self, time):
25         self.pages = random.randrange(1, 21)
26         self.timeStamp = time
27     
28     def getStamp(self):
29         return self.timeStamp
30     
31     def getPages(self):
32         return self.pages
33 
34     def waitTime(self, currentTime):
35         return currentTime - self.timeStamp
36 
37 
38 def getNewTask():
39     num = random.randrange(1, 181)
40     return num == 7
41 
42 def simulation(time, model):
43     printer0 = Printer(model)
44     taskQueue = Queue()
45     waitingTimes = []
46     for currentTime in range(time):
47         if getNewTask():
48             task = Task(currentTime)
49             taskQueue.enqueue(task)  # 可能有多个任务在等待
50         
51         if (not printer0.busy()) and (not taskQueue.isEmpty()):
52             task1 = taskQueue.dequeue()
53             printer0.startNewTask(task1)
54             waitingTimes.append(task1.waitTime(currentTime))  # 核心,我们想得到的是每个任务等待时间,而不是每个任务的工作时间
55         
56         printer0.tick()  # 没有任务也可以写这行代码,类的声明里已经解决了
57     averageWaitTime = sum(waitingTimes) / len(waitingTimes)
58     print("Average Waiting time is %6.2f secs, %3d tasks remaining." \
59             % (averageWaitTime, tq.size()))
60 
61 for i in range(7):
62     simulation(3600, 10)

 

 
关于的体会:

1.声明类不用def, class即可
2.每个类一般都要有初始化函数,def __init__(self, 其他参数):,而类的其他函数不需要__ __init__
3.类的初始化变量十分重要,类里的其他函数往往都会用到这些,为了区分开,所以类的函数需要传入self参数,表示函数利用的变量是类自身的
4.获取每类对象的参数,对每类对象进行一类操作

posted @ 2020-07-19 18:30  SKEZhi7  阅读(383)  评论(0编辑  收藏  举报
Live2D