Решите проблему с здачей очередь с защитой от ошибок

я писал подобное обращение, но я в заблуждении, так как с стеком и деком решил, а тут ничего не помогает

Очередь с защитой от ошибок Реализуйте структуру данных "очередь". Напишите программу, содержащую описание очереди и моделирующую работу очереди, реализовав все указанные здесь методы. Программа считывает последовательность команд и в зависимости от команды выполняет ту или иную операцию. После выполнения каждой команды программа должна вывести одну строчку. Возможные команды для программы:

push n — добавить в очередь число n (значение n задаётся после команды). Программа должна вывести ok;

pop — удалить из очереди первый элемент. Программа должна вывести его значение;

front — программа должна вывести значение первого элемента, не удаляя его из очереди;

size — программа должна вывести количество элементов в очереди;

clear — программа должна очистить очередь и вывести ok;

exit — программа должна вывести bye и завершить работу.

Перед исполнением операций front и pop программа должна проверять, содержится ли в очереди хотя бы один элемент. Если во входных данных встречается операция front или pop и при этом очередь пуста, то программа должна вместо числового значения вывести строку error.

ввод:

push 1
front
exit

вывод:

ok
1
bye

вот код

def push(a,n):
    a.append(n)
    print('ok')

def pop(a):
    if len(a)>0:
        print(a.pop([0]))
    else:
        print('error')

def front(a):
    if len(a)>0:
        print(a[0])
    else:
        print('error')
    
def size(a):
    print(len(a))

def clear(a):
    a.clear()
    print('ok')
a=[]
word=list(iter(input, 'exit'))

for i in word:
    if 'size' in i:
        size(a)
    elif 'pop' in i:
        pop(a)
    elif 'front' in i:
        front(a)
    elif 'clear' in i:
        clear(a)
    else:        
        push(a,i.split()[-1])
    
print('bye')

конкретно не проходит тесты , прошу помощи


Ответы (2 шт):

Автор решения: анонимус

У тебя по времени не проходит или ответы неверные? Ты подумал про то, что все операции для очереди должны быть за О(1)? Твое >a.pop([0])< будет работать за О(n). Предлагаю вариант: смещать индекс первого элемента очереди, не производя других операций. Также не забудь подумать про лишнее место в массиве, которое будет забито уже "удаленными" элементами. Другие команды также придется немного изменить, но это будет быстрее.

→ Ссылка
Автор решения: pchelka_sociofob

Идея такая же, как у ответа выше. В тестирующей системе Сириуса проходит все тесты.

command = 0
index_first = 0
queue = []
while command != 'exit':
    command = input()
    if 'push' in command:
        if len(queue) - index_first <= index_first:
            queue = queue[index_first:]
            index_first = 0
        queue.append(int(command.split()[-1]))
        print('ok')
    elif command == 'pop':
        if len(queue) - index_first > 0:
            print(queue[index_first])
            index_first += 1
        else:
            print('error')
    elif command == 'front':
        print(queue[index_first]) if len(queue) - index_first > 0 else print('error')
    elif command == 'size':
        print(len(queue) - index_first)
    elif command == 'clear':
        queue = []
        index_first = 0
        print('ok')
    elif command == 'exit':
        print('bye')
→ Ссылка