Ответы на вопрос:
--- Python 3.8.3 ---
import typing
from typing import Iterable
from typing import List
from typing import Any
from typing import AnyStr
from typing import Callable
from typing import NoReturn
def _Ok(func: Callable[[Any], Any]):
def OkWrapper(*a, **kw):
r = func(*a, **kw)
if(r):
print('ok')
else:
print('Error')
return OkWrapper
class Queue:
buffer = []
_t = None
_iterPos = 0
def __init__(self, t, InitSeq : Iterable[Any] = None):
if (InitSeq != None):
self.buffer.extend(InitSeq)
self._t = t
def __getitem__(self, position):
return self.buffer[position]
def __len__(self):
return len(self.buffer)
@property
def T(self):
return self._t
@_Ok
def push(self, item):
assert isinstance(type(item), type(self._t))
self.buffer.append(item)
self._length = len(self.buffer)
return True
@_Ok
def clear(self):
self.buffer.clear()
return True
def front(self):
return self._peek(0)
@_Ok
def pop(self):
if (len(self.buffer) > 0):
self.buffer.pop(0); return True
return False
def _peek(self, itempos):
if (len(self.buffer) > 0):
return self.buffer[itempos]
print('Error: Empty Queue'); return
def CommandHandler(q: Queue, cmds: List[AnyStr]) -> NoReturn:
IsRunning = True
while IsRunning:
NewCmd = input()
Tokens = NewCmd.split(' ')
if (Tokens[0] == 'push'):
try:
q.push(q.T(Tokens[1]))
except IndexError:
print('Invalid Command')
except AssertionError:
print('Invalid pushed type')
if (Tokens[0] == 'pop'):
q.pop()
if (Tokens[0] == 'front'):
print(q.front())
if (Tokens[0] == 'size'):
print( len(q) )
if (Tokens[0] == 'clear'):
q.clear()
if (Tokens[0] == 'exit'):
print('bye')
IsRunning = False
def main():
q = Queue(int)
avCommands = ['push','pop','front','size','clear', 'exit']
CommandHandler(q, avCommands)
if __name__ == "__main__":
main()
Пояснения:
Экземпляр Queue может инициализироваться как пустой очередью, так и уже заполненной. Что бы инициализировать пустую очередь, не передавайте в конструктор InitSeq:
q = Queue(int)
Что бы инициализировать очередь с некоторыми значениями, передайте в конструктор InitSeq:
q = Queue(int, [1,2,4,5,6])
Класс Queue строго типизирован, и каждый новый элемент будет проверяться на соответствие хранимому типу, с которым был инициализирован текущий экземпляр.
В моей реализации класс Queue не поддерживает изменение хранимого типа с приведением всех хранимых значений к новому типу
В моей реализации класс Queue не поддерживает изменение хранимого типа без приведения хранимых значений
В моей реализации класс Queue не поддерживает изменение хранимого типа при пустом буфере.
В моей реализации класс Queue является итерируемым объектом (Поддерживает простой перебор в цикле for), а так же поддерживает доступ к элементу по индексу из вне.
q[index] -> q.buffer[index]
Реши свою проблему, спроси otvet5GPT
-
Быстро
Мгновенный ответ на твой вопрос -
Точно
Бот обладает знаниями во всех сферах -
Бесплатно
Задай вопрос и получи ответ бесплатно
Популярно: Информатика
-
Niki191730.04.2022 06:14
-
главныймозг7406.02.2023 06:23
-
учеба635815.02.2021 17:39
-
ggimat20312.04.2021 00:20
-
samuraterikov021.04.2022 18:34
-
zzaaiirra23.03.2022 02:02
-
an12175913.05.2023 15:31
-
шляпамайонезная13.06.2020 21:42
-
ТупаяСандра30.07.2021 01:20
-
Shmanin3201.03.2022 09:07
Есть вопросы?
-
Как otvet5GPT работает?
otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса. -
Сколько это стоит?
Проект находиться на стадии тестирования и все услуги бесплатны. -
Могу ли я использовать otvet5GPT в школе?
Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое! -
В чем отличия от ChatGPT?
otvet5GPT черпает академические источники из собственной базы данных и предназначен специально для студентов. otvet5GPT также адаптируется к вашему стилю письма, предоставляя ряд образовательных инструментов, предназначенных для улучшения обучения.