Помогите доработать код. Нужно избавиться от словаря при этом все расчеты индексов оставить в методе def _get_index_by_method(self, name):
введите сюда код
class QueueIsFull(Exception):
pass
class QueueIsEmpty(Exception):
pass
class Dek:
def __init__(self, max_size: int):
self._elements = [None] * max_size
self._max_size = max_size
self._head = 0
self._tail = 0
self._size = 0
def is_empty(self):
return self._size == 0
def _get_index_by_method(self, name):
results = {
'push_front': self._head - 1,
'push_back': self._tail + 1,
'pop_front': self._head + 1,
'pop_back': self._tail - 1
}
index = results.get(name) % self._max_size
return index
def push_back(self, value: int):
if self._size != self._max_size:
self._elements[self._tail] = value
self._tail = self._get_index_by_method(self.push_back.__name__)
self._size += 1
else:
raise QueueIsFull
def push_front(self, value: int):
if self._size != self._max_size:
self._elements[self._head - 1] = value
self._head = self._get_index_by_method(self.push_front.__name__)
self._size += 1
else:
raise QueueIsFull
def pop_back(self):
if self.is_empty():
raise QueueIsEmpty
x = self._elements[self._tail - 1]
self._elements[self._tail - 1] = None
self._tail = self._get_index_by_method(self.pop_back.__name__)
self._size -= 1
return x
def pop_front(self):
if self.is_empty():
raise QueueIsEmpty
x = self._elements[self._head]
self._elements[self._head] = None
self._head = self._get_index_by_method(self.pop_front.__name__)
self._size -= 1
return x
def main():
count_command = int(input())
queue_size = int(input())
queue = Dek(queue_size)
for i in range(count_command):
command = input()
operation, *value = command.split()
if value:
try:
result = getattr(queue, operation)(int(*value))
if result is not None:
print(result)
except QueueIsFull:
print('error')
else:
try:
result = getattr(queue, operation)()
print(result)
except QueueIsEmpty:
print('error')
if __name__ == '__main__':
main()
Ответы (1 шт):
Автор решения: Rinat
→ Ссылка
Задача решается вот таким образом:
def _get_index_by_method(self, var: int, val: int):
if val:
return (var + 1) % self._max_size
else:
return (var - 1) % self._max_size