LinkedQueues和模拟打印机

时间:2018-10-24 20:26:20

标签: python

我知道还有另一篇关于模拟打印机的文章,但是我在那里没有找到自己问题的任何实际答案。

class LinkedQueue :

    class _Node :
        __slots__ = '_element', '_next'

        def __init__(self, element, next = None):
            self._element = element
            self._next = next

    def __init__(self) :
        self._head = None
        self._tail = None
        self._size = 0

    def __len__(self) :
        return self._size

    def is_empty(self) :
        return self._size == 0

    def first(self) :
        if self.is_empty() :
            raise Empty('Queue is empty')
        return self._head._element

    def dequeue(self) :
        if self.is_empty():
            raise Empty('Queue is empty')
        answer = self._head._element
        self._head = self._head._next
        self._size -= 1
        if self.is_empty() :
            self._tail = None
        return answer

    def enqueue(self, e) :
        newest = self._Node(e,None)
        if self.is_empty() :
            self._head = newest
        else :
            self._tail._next = newest
        self._tail = newest
        self._size += 1

class Printer:
   def __init__(self, name, job_queue):
     self._name = name
     self._job_queue
     self._current_job = None

class Empty(Exception) :
   pass

def main():
   p_jobs = LinkedQueue() 
   red = Printer("Red", p_jobs)                # Creates Printer Red
   green = Printer("Green", p_jobs)            # Creates Printer Green

   print("\nOptions:\n 1. Add Job \n 2. Print Pages \n 3. Status \
   \n 4. Quit")
   i = 0
   while True:
    n = str(input("\nChoice (Type the number): "))

    if n == '1':                            # Add Job
        i += 1
        p = int(input("\nHow many pages? "))
        j = p_jobs.job_list(i,p,next)
        p_jobs.enqueue(j)

    if n == '2':                            # Print Job
        print()
        p_jobs.dequeue()
        i -= 1


    if n == '3':                            # Status
        print()

    if n == '4':                            # Quit
        print("\nGoodbye!")
        break

这是为我们提供的代码。我们应该模拟两个打印机,这些打印机使用LinkedQueue和Node从作业中打印出页面。

我的主要功能准系统w / c包含4个选项: 添加作业,打印作业,状态和退出

我很难理解如何使用(参考)入队和出队方法。有人可以分解该程序的每个部分,以便我至少可以理解从哪里开始。我也很高兴有任何提示告诉我从这里去哪里。谢谢。

编辑:我添加了主要功能w / c基本上只是一个UI

1 个答案:

答案 0 :(得分:0)

尽管这绝不是一个完整的答案,但它显示了如何打印LinkedQueue实例中当前的内容。

首先,将以下方法添加到类中。它将允许迭代内容。

class LinkedQueue:

    def __iter__(self):
        if self.is_empty():
            return None  # No jobs in print queue.

        cur = self._head
        while cur:
            yield cur._element
            cur = cur._next

以下是演示如何使用它的内容:

def test():
    q = LinkedQueue()  # Create a queue.

    # Add some jobs to the LinkedQueue.
    for j in range(3):
        pages = randint(1, 10)
        q.enqueue(('job #{}'.format(j), pages))

    # Show what's currently in the LinkedQueue.
    for v in q:
        print(v)

    # Modify the LinkedQueue and then show what's left in it.
    j = q.dequeue()
    print('\nafter removing one job')
    for v in q:
        print(v)