Как вы помните, когда вы комментируете свой код, перед его выполнением интерпретатор удаляет комментарии.
Напишите программу, которая выполняет данную функцию за интерпретатор.
Формат ввода
Вводятся строки программы.
Формат вывода
Каждую строку нужно очистить от комментариев.
А если комментарий — вся строка, то выводить её не нужно.
Пример
Ввод
# Моя первая супер-пупер программа
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‘), лучше дополнительно от него избавиться для однообразия.
Несмотря на то, что описание второго варианта выглядит куда более сложным, код получится сильно проще первого варианта решения.
Посмотреть код
Решение
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'))
Решение
from sys import stdin
for string in stdin:
if string[0] != '#':
print(string.split('#')[0].rstrip('\n'))
Скажите, пожалуйста, насколько с точки зрения профессионала наивен такой вариант:
from sys import stdin
for line in stdin.read().split(‘\n’):
if line:
pos = line.find(‘#’)
if not pos + 1:
print(line)
elif line[:pos].strip():
print(line[:pos].rstrip())
Я не являюсь профессионалом во многих смыслах, но в принципе нормальный вариант – без особой необходимости ничего не делается. Если записать ту же логику чуть по-другому получится первый вариант решения, а если все свернуть, то второй.
Осмыслила. Все понятно. Спасибо!