首页 > 解决方案 > 将值列表添加到打印机类

问题描述

在此代码中,如果用户键入 >>> create 5

它将创建 5 个不同的打印机对象

当用户键入 >>>添加 1 2 3 4 5

程序应将 1 页添加到第一个打印机对象

然后将 2 页添加到第二个打印机对象

等等...

当用户输入 >>>添加 1 2 3 4 5 6

或者当用户输入 >>>添加 1 2 3

它应该检查空的打印机对象(Printer.isEmpty() 实例)

然后将该值添加到那些空打印机,直到没有更多的空打印机,然后将其余的排入作业。

目前我的输出是:

printSimulation()
create 5
add 1 2 3
status
Printer: 0 Pages to print: 1 Total pages printed: 0
Printer: 1 Pages to print: 2 Total pages printed: 0
Printer: 2 Pages to print: 3 Total pages printed: 0
Printer: 3 Pages to print: 0 Total pages printed: 0
Printer: 4 Pages to print: 0 Total pages printed: 0
add 1 2 3 4 5
status
Printer: 0 Pages to print: 2 Total pages printed: 0
Printer: 1 Pages to print: 4 Total pages printed: 0
Printer: 2 Pages to print: 6 Total pages printed: 0
Printer: 3 Pages to print: 4 Total pages printed: 0
Printer: 4 Pages to print: 5 Total pages printed: 0
add 1 2 3 4 5 6
Traceback (most recent call last):
  Python Shell, prompt 2, line 1
    # Used internally for debug sandbox under external interpreter
    if created[i].isEmpty():
builtins.IndexError: list index out of range

该程序根本不检查空打印机,如果没有空打印机则排队

这是我下面的代码:

class Queue:
    class Job:
        def __init__(self, element, _next):
            self._element = element
            self._next = _next
            
    
    def __init__(self):
        self._front = None
        self._rear = None
        self._size = 0
    def __str__(self):
        pass
    def enqueue(self, n):
        if self.isEmpty():
            self._front = self.Job(n, None) #setting the front value
            self._rear = self._front #value on the end is now the value in the previous front
            self._size += 1 #adds 1 to size
            return
        self._rear._next = self.Job(n, None) #rear value is None
        self._rear = self._rear._next #sets the latter value
        self._size += 1
        return 
    
    def dequeue(self):
        if self.isEmpty():
            raise EmptyError('Queue is empty. Cannot dequeue.')
        dequeued = self._front._element #our popped/dequeued element
        self._front = self._front._next #new front is the next item 
        self._size -= 1 #subtract 1 from size
        if self.isEmpty():
            self._rear = None
        return dequeued
    
    def front(self):
        if self.isEmpty():
            raise EmptyError('Queue is empty. Front element does not exist.')
        return self._front._element
    def __len__(self):
        return self._size
    
    def isEmpty(self):
      
        return self._size == 0

class Printer:
    def __init__(self, number):
        self._number = number
        self._pages = 0
        self._print = 0
        self._cycles = 0
        
    def add(self, n):
        self._pages += int(n)
        
    def status(self):
        return f'Printer: {self._number} Pages to print: {self._pages} Total pages printed: {self._print}'
    
    def isEmpty(self):
        return self._pages == 0
        
           
def printSimulation():
    jobs = Queue()
    amount = []
    created = []
    while True:
        command = str(input())
        
        if 'create' in command:
            val = command.split(' ')[1] #separation of command from value
            amount.append(val)
            
            for printers in range(int(val)):
                printers = Printer(printers)
                created.append(printers)
                
        if 'status' in command:
            for items in created:
                print(items.status())
               
        if 'add' in command:
            value = command.split(' ')
            value.remove(value[0])
            if len(created) == len(value):
                for i in range(len(created)):
                    created[i].add(value[i])
            if len(created) != len(value):
                for i in range(len(value)):
                    if created[i].isEmpty():
                        created[i].add(value[i])
                    else:
                        jobs.enqueue(int(value[i]))

标签: pythonpython-3.xlistfunctionclass

解决方案


            for i in created:
                
                if len(created) == len(value):
                    for x in range(0 , len(created)):
        
                        i.add(value[x])

您正在为每台打印机添加每一个价值。您想要做的是将值添加到每个特定的打印机:

if len(created) == len(value):
    for i in range(len(created)):
        created[i].add(value[i])

推荐阅读