Задача на работу со стэком/Работа со списками

Рейтинг: 0Ответов: 2Опубликовано: 06.08.2023

Уже несколько дней мучаюсь над задачей со степика, кажется, что решение совсем близко, но никак не могу понять, в чём причина. Условие: Напишите программу, которая будет эмулировать функциональность стека. Вам на вход будут поступать четыре команды:

add <число> – добавить в стек число,(add 3 например) pop – удалить из стека число и напечатать его, head – вывести текущий элемент стека, close – завершить программу,

number=[]
while True:
   n = input()
   
     n = input().split()
  
  if n!='close'and len(n)==2:  
     
      a = v[0]
      b = v[-1]

       if a== "add":
           number.append(b)


       if a== "head":
               print(number)
       elif a== "pop":
               numb= number.pop()
               print(numb)
   if n=='close':
                exit(0)

print(number)

ВВОД add 5, add 10, head, pop, add 7, add 9, pop, pop, head, close, ВЫВОД 10, 10, 9, 7, 5, Результат Empty, кажется, не вижу очевидного, подскажите

Ответы

▲ 1

У вас одна двуместная операция add и три одноместные. Поэтому проверка len(n)==2 для трех команд неправильна, более логично сделать эту проверку только для обработки add, а то и вовсе убрать, если проверять v[0].

Кроме того, head должно выводить только последний элемент списка, а не весь список.

И нужно предусмотреть случай обращения к пустому списку для pop и head. А как именно это обрабатывать - должно быть в задании.

▲ 0

number=[]

while True: n = input()

if n!='close':
    v = n.split()
    a = v[0]
    b = v[-1]
    if a== "add":
        number.append(b)
    if a== "head":
           print(number[-1])
    elif a== "pop":
        numb= number.pop()
        print(numb)
if n=='close':
            exit(0)

print(number)

Проблема была просто в сместившихся блоках,(раньше даже с head print(number[-1]) не работало) алгоритм, по сути,верный