C. Без комментариев 2.0

Как вы помните, когда вы комментируете свой код, перед его выполнением интерпретатор удаляет комментарии.
Напишите программу, которая выполняет данную функцию за интерпретатор.

Формат ввода

Вводятся строки программы.

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

Каждую строку нужно очистить от комментариев.
А если комментарий — вся строка, то выводить её не нужно.

Пример

Ввод

# Моя первая супер-пупер программа
print("What is your name?") #  Как тебя зовут?
name = input() #  Сохраняем имя
print(f"Hello, {name}!") #  Здороваемся# Конец моей супер-пупер программы

Вывод

print("What is your name?")
name = input()
print(f"Hello, {name}!")

Ввод

# Мой первый цикл
for i in range(10): # Считаем до 10
    print(i) # выводим число

Вывод

for i in range(10):
    print(i)

Решение

Как водится, рассмотрим пару решений. Первое – наивное.

Читаем строки с помощью readlines().
Если строка пустая – сразу ее печатаем.
В противном случае проверяем не начинается ли строка со знака ‘#’ (используя индекс или метод startswith()) если нет, то ищем символ ‘#’ в строке, иесли нашли, отбрасываем все, что находится после него и печатаем строку.

Альтернативный способ, если его описать словами базируется на похожей идее, но использует несколько особенностей:
Во-первых, можно читать строки конструкцией for string in stdin:
Во-вторых, можно не связываться с поиском символа # а просто вызвать метод split(‘#’) который в случае удачи разделит строку пополам, а в случае неудачи оставит все как есть. Нам всего лишь остается напечатать нулевой элемент списка, который вернет нам split(). ну и в силу того, что при таком подходе, мы можем отрезать, а можем не отрезать символ перевода строки (‘\n‘), лучше дополнительно от него избавиться для однообразия.

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

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

Решение

Python
from sys import stdin

for string in stdin.readlines():
    if string == '\n':
        print(string)
    elif string.strip()[0] != '#':
        if (pos := string.find('# ')) + 1:
            string = string[:pos]
        print(string.strip('\n'))

Решение

Python
from sys import stdin

for string in stdin:
    if string[0] != '#':
        print(string.split('#')[0].rstrip('\n'))
Подписаться
Уведомить о
guest
3 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии