Мы надеемся, вы пишите комментарии к своему коду. Если так, то интерпретатор удаляет их перед тем, как выполнить код. Напишите программу, которая выполняет данную функцию за интерпретатор.
Формат ввода
Вводятся строки программы.
Признаком остановки является пустая строка.
Формат вывода:
Каждую строку нужно очистить от комментариев.
А если комментарий — вся строка, то выводить её не надо.
Пример
Ввод
# Моя первая супер-пупер программа
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)
Решение
В целом, простая задача. Перебираем строки, ищем знак комментария #. Если нашли в первой позиции, то строку пропускаем, если нашли в любой другой – обрезаем до знака # и выводим. Если не нашли, тоже выводим.
Второй вариант чистит код от комментариев более аккуратно, но для прохождения тестов, достаточно первого.
Посмотреть код
Решение
# простой код
while string := input():
if not (pos := string.find('#')) + 1:
print(string)
elif string[:pos]:
print(string[:pos])
Решение
# более корректный код.
# обрезаются пустые символы в конце строки.
# если в строке кроме комментария ничего не было, а комментарий начинался не с первого символа, то строка все равно игнорируется.
while string := input():
if not (pos := string.find('#')) + 1:
print(string)
elif string[:pos].strip():
print(string[:pos].rstrip())
Вы чего то мудрите
while text := input():
if text[0] == ‘#’:
continue
if ‘#’ in text:
n = text.index(‘#’)
new_text = text[:n]
print(new_text)
else:
print(text)
Спасибо за комментарий.
Мне не совсем понятно что “слишком мудрого” в моем решении.
В нем всего две ветки проверки проверки, против ваших трех. Да и строк поменьше.
Возможно, вас смущает конструкция
if not (pos := string.find(‘#’)) + 1:
Но тут все предельно просто – если символ не найден, то вернется -1, что в сумме с 1 даст False и строка напечатается. В противном случае, если строка не пустая после удаления комментария, печатаем строку до #.
Собственно вы делаете то же самое, только капельку длиннее.
Но, возможно, вы правы и надо было написать чуть проще.
Второй вариант закрывает дыру в тесте яндекса, когда в коде может встретиться такой комментарий:
Ваш код, как и мой первый, напечатает вторую строку пустой, а мой второй вариант ее удалит, потому что она по факту пустая и не несет никакого смысла. Кроме того, ваш и мой первый вариант, оставляют пробел в конце строки, что тоже не так, чтобы совсем корректно.
Поэтому в комментарии ко второму решению и указано, что этот вариант более корректен.
Поясните тогда, пожалуйста, еще и за строку elif string[:pos].strip():
То есть elif – это условный оператор, в который нужно загонять условие. Как в таком случае “перевести на житейский” данную строку для понимания?
Тут все просто – если результат выполнения string[:pos].strip() окажется не пустым, то выполнится код, написанный ниже.
О том почему это так работает написано в статье Проверка на пустоту.