Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/215: Рейтинг темы: голосов - 215, средняя оценка - 4.95
1 / 1 / 0
Регистрация: 03.06.2020
Сообщений: 13

Стек с защитой от ошибок

16.06.2020, 11:36. Показов 46320. Ответов 13
Метки нет (Все метки)

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

push n — добавить в стек число n (значение n задается после команды). Программа должна вывести ok.
pop — удалить из стека последний элемент. Программа должна вывести его значение.
back — программа должна вывести значение последнего элемента, не удаляя его из стека.
size — программа должна вывести количество элементов в стеке.
clear — программа должна очистить стек и вывести ok.
exit — программа должна вывести bye и завершить работу.
Перед исполнением операций back и pop программа должна проверять, содержится ли в стеке хотя бы один элемент. Если во входных данных встречается операция back или pop, и при этом стек пуст, то программа должна вместо числового значения вывести строку error.

Входные данные:

Вводятся команды управления стеком, каждая в отдельной строке. Среди них обязательно присутствует команда exit.

Выходные данные:

Программа должна вывести протокол работы стека, по одному сообщению в строке.

Примеры:

Ввод

size
push 1
size
push 2
size
push 3
size
exit

Вывод

0
ok
1
ok
2
ok
3
bye



Практически на все проверки на informatics с моим кодом выдает: 'Ошибка во время исполнения', но я не знаю, в чем проблема(у меня все проходит), мне кажется, что я что-то не так поняла из условия задачи.
Мой код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
def push(a,n):
    a.append(n)
    print('ok')
def pop(a):
    if len(a)>0:
        print(a.pop())
    else:
        print('error')
def back(a):
    if len(a)>0:
        print(a.top())
    else:
        print('error')
def size(a):
    print(len(a))
def clear(a):
    a=[]
    print('ok')
a=[]
word=input()
while 'exit' not in word:
    if 'size' in word:
        size(a)
    elif 'pop' in word:
        pop(a)
    elif 'back' in word:
        back(a)
    elif 'clear' in word:
        clear(a)
    else:
        push(a,int(list(map(str,word.split()))[-1]))
    word=input()
print('bye')
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.06.2020, 11:36
Ответы с готовыми решениями:

Очередь с защитой от ошибок
ЗАДАЧА Очередь с защитой от ошибок Реализуйте структуру данных "очередь". Напишите программу, содержащую описание очереди и...

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

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

13
17 / 17 / 0
Регистрация: 16.06.2020
Сообщений: 24
16.06.2020, 15:41
я по другому ввод сделал:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
a=[]
word=list(iter(input, 'exit'))
 
for i in word:
    if 'size' in i:
        size(a)
    elif 'pop' in i:
        pop(a)
    elif 'back' in i:
        back(a)
    elif 'clear' in i:
        clear(a)
    else:        
        push(a,i.split()[-1])
        
print('bye')
1
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
16.06.2020, 16:03
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# -*- mode: python 3.8 -*-
 
stack: list = []
while (command := input()) != "exit":
    if command.startswith("size"):
        print(len(stack))
    elif command.startswith("back"):
        print(stack[-1])
    elif command.startswith("pop"):
        print(stack.pop(-1))
    elif command.startswith("clear"):
        stack.clear()
        print("ok")
    elif command.startswith("push"):
        _, n = command.split()
        stack.append(int(n))
        print("ok")
 
print("bye")
Добавлено через 3 минуты
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# -*- mode: python 3 -*-
 
stack: list = []
while True:
    command, *args = input().split()
    if command == "size":
        print(len(stack))
    elif command == "back":
        print(stack[-1])
    elif command == "pop":
        print(stack.pop(-1))
    elif command == "clear":
        stack.clear()
        print("ok")
    elif command == "push":
        stack.append(int(args[0]))
        print("ok")
    elif command == "exit":
        print("bye")
        break
1
1 / 1 / 0
Регистрация: 03.06.2020
Сообщений: 13
16.06.2020, 17:47  [ТС]
Оба кода так же выдают ошибку в процессе выполнения. Мне кажется, что дело не в порядке ввода и вывода, а в чем-то другом.
0
17 / 17 / 0
Регистрация: 16.06.2020
Сообщений: 24
16.06.2020, 22:42
В последние два кода на back и pop надо добавить проверку на непустой стек. В твоём коде она есть.
1
3 / 3 / 0
Регистрация: 17.06.2020
Сообщений: 1
17.06.2020, 09:35
Сам сижу на сириусе, делаю эту задачу. Оказалось, ответы должны быть выведены только после конца ввода. Проверку она прошла.)))
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
res = []
stack = []
while True:
    command, *args = input().split()
    if command == "size":
        res.append(len(stack))
    elif command == "back":
      if len(stack) == 0:
        res.append('error')
      else:  
        res.append(stack[-1])
    elif command == "pop":
      if len(stack) == 0:
        res.append('error')
      else:  
        res.append(stack.pop())
    elif command == "clear":
        stack.clear()
        res.append("ok")
    elif command == "push":
        stack.append(int(args[0]))
        res.append("ok")
    elif command == "exit":
        res.append("bye")
        break
print(*res,sep='\n')
И да, я доработал программу пользователя DmFat, ему отдельное спасбо
3
2 / 2 / 0
Регистрация: 26.03.2019
Сообщений: 35
22.06.2020, 12:39
Нет, не проходит
0
 Аватар для Semen-Semenich
5224 / 3471 / 1173
Регистрация: 21.03.2016
Сообщений: 8,298
22.06.2020, 14:29
TukTukL,
Цитата Сообщение от TukTukL Посмотреть сообщение
clear — программа должна очистить стек и вывести ok.
теперь допишем в конце кода вывод стека
Python
1
2
print('bye')
print(a)
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
ввод
 
size
push 1
size
push 2
size
push 3
size
[COLOR="Red"]clear[/COLOR]
exit
 
результат:
0
ok
1
ok
2
ok
3
ok
bye
[1, 2, 3]
>>>
>>>
упсс. а стек то не пустой
1
1 / 1 / 0
Регистрация: 25.06.2020
Сообщений: 4
25.06.2020, 19:56
должно работать

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
def push(elem):
    stack.append(elem)
 
        
def pop():
    if len(stack)<1:
        c='error'
    else:
        c=stack.pop();
    return c
 
def back(stack):
    if len(stack)<1:
        d='error' 
    else:
        d=stack[-1]
    return(d)
 
 
def size(stack):
    return len(stack)
 
 
def clear(stack):
    while len(stack)>0:
        stack.pop()
      
        
def exit():
    print("bye")
    b=False
 
stack=list([])
b=True
while b==True:
    a=input()
    if a[1]=="u":
        p,n=a.split()
        n=int(n)
        push(n)
        print("ok")
    
    if a=="pop":
        print(pop())
    if a=="size":
        print(size(stack))
    if a=="back":
        print(back(stack))
    if a=="clear":
        clear(stack)
        print("ok")
    if a=="exit":
        exit()
        break
1
Заблокирован
27.06.2020, 09:15
Мне кажется, что код marmeladze, возможно будет долгим, так как функция clear выполняется за время O(n) из за цикла while. Проблема не решается и заменой stack = [] - ничего не поменяется. Решается всё тем, чтобы убрать параметры функции clear, а в ней - добавить строку global stack:
Python
1
2
3
def clear():
    global stack
    stack = []
Но я не создавал отдельную функцию:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
def push(elem, stack):
    stack.append(elem)
 
def top(stack):
    return stack[-1]
 
def pop(stack):
    stack.pop()
def size(stack):
    return len(stack)
stack = []
s = input()
while s != "exit":
    if s == "pop":
        if stack:
            print(top(stack))
            pop(stack)
        else:
            print("error")
    elif s == "back":
        if stack:
            print(top(stack))
        else:
            print("error")
    elif s == "size":
        print(size(stack))
    elif s == "clear":
        stack = [] 
        print("ok")
    else:
        k = int(s[5:])
        push(k, stack)
        print("ok")
    s = input()
print("bye")
1
17 / 17 / 0
Регистрация: 16.06.2020
Сообщений: 24
27.06.2020, 12:45
gurulTailan,
Можно, но
Я хочу обратить ваше внимание на то, что не нужно менять глобальные переменные внутри функции. Комьюнити Python объявило такую практику очень нежелательной, так как из-за этого исправление кода становится намного сложнее.
0
17 / 17 / 0
Регистрация: 16.06.2020
Сообщений: 24
14.07.2020, 08:57
Special 4 Sirius

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
def push(a,n):
    a.append(n)
    print('ok')
 
def pop(a):
    if len(a)>0:
        print(a.pop())
    else:
        print('error')
        
def back(a):
    if len(a)>0:
        print(a[-1])
    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 'back' in i:
        back(a)
    elif 'clear' in i:
        clear(a)
    else:        
        push(a,i.split()[-1])
        
print('bye')
1
0 / 0 / 0
Регистрация: 29.05.2020
Сообщений: 2
16.03.2021, 11:01
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
stack = []
while True:
    comm = input()
    if comm.startswith("size"):
        print(len(stack))
    elif comm.startswith("back"):
        if len(stack) > 0:
            print(stack[-1])
        else:
            print('error')
    elif comm.startswith("pop"):
        if len(stack) > 0:
            print(stack.pop())
        else:
            print('error')
    elif comm.startswith("clear"):
        stack.clear()
        print("ok")
    elif comm.startswith("exit"):
        print("bye")
        raise SystemExit
    elif comm.startswith("push"):
        wrd, n = comm.split()
        stack.append(int(n))
        print("ok")
0
0 / 0 / 0
Регистрация: 08.10.2021
Сообщений: 1
08.10.2021, 22:31
проверку проходит

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
def push(n):
    global st
    st.append(n)
    return('ok')
def pop():
    global st
    if len(st)==0:
        return ('error')
    else:
        return st.pop(-1)
def back():
    global st
    if len(st)>0:
        return st[-1]
    else:
        return ('error')
def size():
    global st
    return len(st)
def clear():
    global st
    st=[]
    return('ok')
st=[]
an=[]
a=input()
while a!='exit':
    if a.startswith('push'):
        an.append(push(a[5:]))
    elif a.startswith('pop'):
        an.append(pop())
    elif a.startswith('back'):
        an.append(back())
    elif a.startswith('size'):
        an.append(size())
    else:
        an.append(clear())
    a=input()
for i in an:
    print(i)
print('bye')
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.10.2021, 22:31
Помогаю со студенческими работами здесь

Очередь с защитой от ошибок
2 задача Очередь с защитой от ошибок Реализуйте структуру данных &quot;очередь&quot;. Напишите программу, содержащую описание очереди и...

[Python] Дек с защитой от ошибок
Реализуйте структуру данных &quot;дек&quot;. Напишите программу, содержащую описание дека и моделирующую работу дека, реализовав все указанные здесь...

Стек с защитой от ошибок
Реализуйте структуру данных &quot;стек&quot;. Напишите программу, содержащую описание стека и моделирующую работу стека, реализовав все указанные...

Стек с защитой от ошибок
Стек с защитой от ошибок Реализуйте структуру данных &quot;стек&quot;. Напишите программу, содержащую описание стека и моделирующую работу стека,...

Стек с защитой от ошибок
Реализуйте структуру данных &quot;стек&quot;. Напишите приложение, которое содержит описание стека и моделирует работу стека, реализовав все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru