Помогите доработать код. Нужно избавиться от словаря при этом все расчеты индексов оставить в методе 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
→ Ссылка