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

Моделирование стека

02.02.2021, 20:26. Показов 7999. Ответов 13

Студворк — интернет-сервис помощи студентам
Напишите программу, которая моделирует работу стека целых чисел, управляемого текстовыми командами. В начале работы стек пуст. Затем последовательно выполняются команды, записанные в файле input.txt . Для управления стеком используются две команды:

'+<число>' – втолкнуть число на вершину стека

'-' – удалить число с вершины стека

Требуется определить состояние стека после окончания выполнения всех команд.

Входные данные
Входные строки в файле input.txt содержат команды управления стеком. Последняя строка файла пустая.

Выходные данные
Программа должна вывести в файл output.txt в одной строке через пробел все числа, оказавшиеся в стеке после выполнения всех команд. Слева должно быть дно стека, справа – вершина. Если стек пуст, нужно вывести слово 'EMPTY'. Если во время выполнения команд произошла ошибка, нужно вывести слово 'ERROR'.

Примеры
входные данные
+12
+23
-
+34
выходные данные
12 34
входные данные
+12
+23
-
-
выходные данные
EMPTY
Сделал вот такой код, но проходит только 2 теста. Что можете посоветовать? Все тесты из примеров проходят.

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
import re
 
F = open ( "input.txt" )
Err = False
stack = []
stack1 = []
 
def error():
    F = open ( "output.txt", "w" )
    F.write ( "ERROR" )
    F.close()
 
while Err != True:
    s = F.readline().split()
    if not s:
        error()
        break
    for k in s:
        stack.append( k )
        stack1.append( k )
        if len(stack) >= 2:
            a1 = stack.pop()
            a2 = stack.pop()
            stack.append( k )
            if a1 == "-" and a2 == "-":
                Err = True
F.close()
 
if Err == False:
    a = stack1.pop()
    b = stack1[0]
 
if Err == True:
    F = open ( "output.txt", "w" )
    F.write ( "EMPTY" )
    F.close()
else:
    a1 = re.sub(r'[+-]',"", a)
    b1 = re.sub(r'[+-]',"", b)
    F = open ( "output.txt", "w" )
    F.write ( b1 + " " + a1 )
    F.close()
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.02.2021, 20:26
Ответы с готовыми решениями:

Моделирование стека в Python
Напишите программу, которая моделирует работу стека целых чисел, управляемого текстовыми командами. В начале работы стек пуст. Затем...

Моделирование стека
пожалуйста,помогите в написании программ,очень-очень надо 1)Сформировать стек из 7 чисел. Уменьшить на единицу 4-й элементов и...

Моделирование работы стека
Добрый день. Получил задание - Напишите программу моделирующую работу стека. Программа считывает последовательность команд и в зависимости...

13
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
02.02.2021, 20:33
Maksos121, разве тут не подразумевалось ООП?
0
0 / 0 / 0
Регистрация: 06.03.2020
Сообщений: 8
02.02.2021, 20:58  [ТС]
Welemir1, не знаю. Я просто не могу понять, что не так. Проблема в том, что на том сайте не видно, что конкретно не прошло.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38169 / 21104 / 4307
Регистрация: 12.02.2012
Сообщений: 34,693
Записей в блоге: 14
03.02.2021, 06:45
Умиляет использование re в этой задаче...

Добавлено через 4 минуты
Maksos121, ты это сам писал? Программную логику своего кода понимаешь? По-моему, она очень мутная. Задача-то прозрачна: читать строку за строкой из файла, анализировать первый символ, выполнять команду. С ООП или без - не столь важно.
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
03.02.2021, 07:35
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
with open("input.txt", "rt") as file_handle:
    in_put = file_handle.read()
 
stack, result = [], None
for line in in_put.splitlines():
    command, *args = line.split()
    if command == "+":
        stack.append(*args)
    elif command == "-":
        if len(stack) == 0:
            result = "ERROR"
            break
        stack.pop()
else:
    result = " ".join(map(str, stack)) if stack else "EMPTY"
 
with open("output.txt", "wt") as file_handle:
    file_handle.write(result)
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38169 / 21104 / 4307
Регистрация: 12.02.2012
Сообщений: 34,693
Записей в блоге: 14
03.02.2021, 09:21
Простой вариант:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
stack=[]
flgError=False
with open("input.txt","rt") as fi:
    for stri in fi.readlines():
        if len(stri)==0:
            break        
        code=stri[0]
        if code=="+":
            num=int(stri[1:])
            stack.append(num)
        elif len(stack)==0:
            flgError=True
            break
        else:
            stack.pop()
with open("output.txt","wt") as fo:
    if flgError:
        print("Error",file=fo)
    elif len(stack)==0:
        print("Empty",file=fo)
    else:
        print(*stack,sep=' ',file=fo)
0
03.02.2021, 10:42

Не по теме:

Catstail, не люблю держать файлы долго.

0
03.02.2021, 12:10

Не по теме:

DmFat, я бы держал файлы, а в памяти ничего не держал. Хотя тут уже дело вкуса...

P. S. Попадется файлик на терабайт, что будешь делать?

0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38169 / 21104 / 4307
Регистрация: 12.02.2012
Сообщений: 34,693
Записей в блоге: 14
03.02.2021, 12:34
DmFat, да, в этой задаче держать файл открытым смысла нет. Но Arsegg прав - для больших файлов заливка всего содержимого в память накладна... А с точки зрения обучения, умение работать с файлом как таковым (без заливки в память всего содержимого) - навык небесполезный.
1
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
03.02.2021, 13:07
Вставлю свои пять копеек:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import sys
 
def solution():
    stack = []
    for command in iter(input, ""):
        if command.startswith("+"):
            stack.append(command.lstrip("+"))
        elif command == "-":
            stack.pop()
        else:
            print("ERROR")
            return
    print(*stack if stack else ("EMPTY",))
 
with open("input.txt") as f, open("output.txt", "w") as out:
    sys.stdin, sys.stdout = f, out
    solution()
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
03.02.2021, 13:23
Цитата Сообщение от Arsegg Посмотреть сообщение
P. S. Попадется файлик на терабайт, что будешь делать?
Элементарно, Ватсон. Я просто оберну в блок try except и выдам ошибку юзеру чтоб файл ручками разделил!

Цитата Сообщение от Arsegg Посмотреть сообщение
я бы держал файлы, а в памяти ничего не держал. Хотя тут уже дело вкуса...
В моей работе фалики постоянно дергают, так что я привык с файлами работать в таком плане, но да, ты прав, если файл больших объемов, то лучше построчно считывать.
0
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
03.02.2021, 13:24
Лучший ответ Сообщение было отмечено Maksos121 как решение

Решение

Catstail, так readlines весь файл читает.
Вам нужно
Python
1
for stri in fi:
1
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
03.02.2021, 13:26
Catstail, Кстати, ioprst прав!
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38169 / 21104 / 4307
Регистрация: 12.02.2012
Сообщений: 34,693
Записей в блоге: 14
03.02.2021, 14:01
ioprst, да, я тоже не обратил внимание... Хотя с т.з. интерфейса - ничего не меняется
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.02.2021, 14:01
Помогаю со студенческими работами здесь

Задача. Моделирование стека
Здравствуйте! Столкнулся со следующей задачей: Напишите программу, которая моделирует работу стека целых чисел, управляемого...

Моделирование стека целых чисел
Напишите программу, которая моделирует работу стека целых чисел, управляемого текстовыми командами, аналогичными командам языка Форт. В...

Моделирование работы Т-образного сортировочного узла на железной дороге с использованием стека
Написать программу для моделирования работы Т-образного сортировочного узла на железной дороге с использованием стека. Программа должна...

Дан указатель Р1 на вершину непустого стека. Создать два новых стека, переместив в первый из них все элементы исходного стека с четными значениями, а
Помогите срочно составить задачу: Дан указатель Р1 на вершину непустого стека. Создать два новых стека, переместив в первый из них все...

Дан указатель Top1 на вершину непустого стека. Создать два новых стека, переместив в первый из них все элементы исходного стека с четными значениями,
Здравствуйте, Уважаемые пользователи!!! Помогите пожалуйста решить данную задачу : Дан указатель Top1 на вершину непустого стека....


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru