自定义类实现带超时功能的队列结构
一、 实验目的
- 了解标准库time中time函数的用法
- 了解如何定义一个类
- 理解队列结构的特点
- 理解入队和出队时超时功能的实现。
二、 实验内容
- 编写程序,实现自定义类、模拟队列结构。
- 要求实现入队、出队以及修改队列大小和判断队列是否为空,是否为满的功能,
- 同时要求在入队时如果队列已满则等待指定时间,出队时如果队列已空则等待指定时间等辅助功能。
- 自选现实生活案例演示类的该类的使用方法。
import time
class Que:
"""建立一个模拟队列结构"""
def __init__(self, maxsize=float('inf')):
self._maxsize = maxsize
self.queue = []
def getout(self):
"""出队"""
if self.qsize() == 0:
time.sleep(1)
print("无人在此窗口排队打饭,请等待2S以上")
return False
else:
return self.queue.pop(0)
def putin(self, item):
"""入队,假设成功入栈需要2秒"""
if self._maxsize <= self.qsize():
print("请等待{}秒!".format(2 - (time.time() - self.lastintime)))
return False
else:
time.sleep(2)
self.lastintime = time.time()
self.queue.append(item)
return True
def qsize(self):
"""队列中的项目数。"""
return len(self.queue)
def empty(self):
"""如果队列为空,则返回 True,否则返回 False。"""
return not self.queue
def full(self):
"""如果队列中有 maxsize 项,则返回 True。
注意:如果队列是用 maxsize= float('inf')(默认值)初始化的,那么 full() 永远不会为 True。
"""
if self._maxsize <= 0:
return False
else:
return self.qsize() >= self._maxsize
def modify(self, maxsize):
"""修改队列大小"""
self._maxsize = maxsize
"""理想状态下模拟食堂排队打饭情况,假设窗口大妈盛饭需要2秒
部分同学可能看到本窗口菜品后又立即getout走开了,也有同学在思考人生不出队"""
cw = Que(2)
print("--------------------------------------------------")
print("---第一人进入")
cw.putin("A")
print("---队列大小{0}---是否满{1}---是否空{2}---".format(cw.qsize(), cw.full(), cw.empty()))
print("--------------------------------------------------")
print("---第二人进入")
cw.putin("B")
print("---队列大小{0}---是否满{1}---是否空{2}---".format(cw.qsize(), cw.full(), cw.empty()))
print("--------------------------------------------------")
print("---第三人尝试进入进入")
cw.putin("C")
print("---队列大小{0}---是否满{1}---是否空{2}---".format(cw.qsize(), cw.full(), cw.empty()))
cw.modify(3)
print("--------------------------------------------------")
print("---第三人进入")
print(cw.putin("C"))
print("---队列大小{0}---是否满{1}---是否空{2}---".format(cw.qsize(), cw.full(), cw.empty()))
print("--------------------------------------------------")
print("---第一人走出")
print(cw.getout())
print("---队列大小{0}---是否满{1}---是否空{2}---".format(cw.qsize(), cw.full(), cw.empty()))
print("--------------------------------------------------")
print("---第二人走出")
print(cw.getout())
print("---队列大小{0}---是否满{1}---是否空{2}---".format(cw.qsize(), cw.full(), cw.empty()))
print("--------------------------------------------------")
print("---第三人走出")
print(cw.getout())
print("---队列大小{0}---是否满{1}---是否空{2}---".format(cw.qsize(), cw.full(), cw.empty()))