python - 将值列表添加到打印机类
问题描述
在此代码中,如果用户键入 >>> 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]))
解决方案
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])
推荐阅读
- list - 无法输入整数类型错误 1700 AppleScript
- scala - 未调用符号函数
- c - SDL_RenderSetLogicalSize() 在拖动和调整窗口大小时不居中
- html - 返回内容锚点顶部
- java - 为什么颜色类不能在 JButton 上工作?
- xml - XSLT 1.0 - 使用 Vanilla XSLT 1.0 或 PHP XSLT 的节点中值唯一性的输出计数
- javascript - 如何指定我的 Vue 项目的 ECMAScript 版本目标?
- postgresql - 在 PostgreSQL 中以列表格式显示数据
- java - 在Tomcat中部署后Spring Boot Admin无法正常工作
- assembly - 我需要汇编程序中的数据部分吗?