D. Очистка данных

Местный провайдер собирает большое количество логов, однако зачастую файлы с отчётами приходят в негодность.
Самые частые проблемы — ошибки вида ## и @@@.
Напишите программу, которая избавляется от:

  • Двух символов # в начале информационных сообщений;
  • Строк, заканчивающихся тремя символами @.

Формат ввода

Вводятся строки отчёта. Признаком завершения ввода считается пустая строка.

Формат вывода:

Очищенные данные.

Пример

Ввод

Hello, world
Hello, @@@
##Goodbye

Вывод

Hello, world
Goodbye

Ввод

First Message
##Second Message
@@@Third Message##
##Fourth Message@@@

Вывод

First Message
Second Message
@@@Third Message##

Решение

Задача проще чем кажется на первый взгляд. Если не пытаться усложнять, то нужно проверить всего два условия:
1) строка начнинается с двух символов # (##) – отрезаем первые два символа
2) строка заканчивается тремя символами @ (@@@) – пропускаем строку.

Задачу можно решить с помощью срезов или с помощью методов startswith/endswith

Эту задачу выгоднее начинать решать с последнего условия.

Посмотреть код

Решение

Python
# Срезы

while string := input():
    if string[-3:] != '@@@':
        if string[0:2] == '##':
            string = string[2:]
        print(string)

Решение

Python
# Методы

while string := input():
    if not string.endswith('@@@'):
        if string.startswith('##'):
            string = string[2:]
        print(string)
Подписаться
Уведомить о
guest
3 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Сергей
Сергей
18.05.2024 11:56

Доброго времени суток!

В Хендбуке часто встречаются задачи с “потоковым” вводом данных (как и в данной задаче). Но нет, как мне кажется, очень важного пояснения, что программа либо должна выводить результат по окончанию ввода данных (то есть нам необходимо задействовать дополнительную память), либо данные могут выводится сразу не дожидаясь последующего ввода.
Ввод:
Hello, world
Hello, @@@
##Goodbye

Вывод “1” (как в примере)
Hello, world
Goodbye

Вывод “2”
Hello, world
Hello, world
Hello, @@@
##Goodbye
Goodbye

Если судить по примерам из Хендбука, то напрашивается вывод данных по окончанию ввода:

list_string = []

while (string := input()) != ”:
    if string[-3:] == ‘@@@’:
        continue
    elif string[:2] == ‘##’:

        list_string.append(string[2:])
    else:
         list_string.append(string)

for string in list_string:
    print(string)

Возможно я ошибаюсь.

Сергей
Сергей
Ответить на  Сергей Клочко
19.05.2024 11:32

Спасибо за ответ! Претензий к Вашим решениям ни в коем случае не подразумевалось. Это лишь небольшой крик души когда не до конца понятно, какой именно ответ от тебя ожидают в Хендбуке))) Просто если бы писали вывод очищенного после полного ввода текста, пришлось бы задействовать дополнительную память чтобы его запомнить, а если в условии допускается чистить в процессе ввода, то конечно глупо использовать дополнительные ресурсы.