zoukankan      html  css  js  c++  java
  • 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.获取每类对象的参数,对每类对象进行一类操作

  • 相关阅读:
    原子变量AtomicInteger
    8.2.2.2 Speed of UPDATE Statements 加速UPDATE语句:
    8.2.2 Optimizing DML Statements 优化DML 语句:
    CSS3中-moz、-ms、-webkit和-o分别代表什么意思
    8.2.1.19 Optimizing LIMIT Queries 优化LIMIT 查询:
    java.lang.IllegalArgumentException: Negative time
    8.2.1.17 DISTINCT Optimization
    Python基本语法_函数_参数的多类型传值
    Python基本语法_函数_参数的多类型传值
    8.2.1.16 GROUP BY Optimization
  • 原文地址:https://www.cnblogs.com/SKEZhi/p/13340725.html
Copyright © 2011-2022 走看看