Разработайте функцию modern_print
, которая принимает строку и выводит её, если она не была выведена ранее.
Примечание
В решении не должно быть вызовов требуемых функций.
Пример
Ввод
modern_print("Hello!")
modern_print("Hello!")
modern_print("How do you do?")
modern_print("Hello!")
Вывод
Hello!
How do you do?
Ввод
modern_print("Ало!")
modern_print("Ало!")
modern_print("Я тебя не слышу")
modern_print("Ало!")
modern_print("Ало!")
modern_print("Позвони когда сможешь")
modern_print("Позвони когда сможешь")
modern_print("Я тебя не слышу")
Вывод
Ало!
Я тебя не слышу
Позвони когда сможешь
Решение
Для решения этой задачи нам потребуется глобальная переменная, которая накапливала бы уже напечатанные строки. Тип переменной может быть множеством или списком. С академической точки рения множество предпочтительнее потому что в не проще и быстрее организован поиск.
Посмотреть код
Решение
Python
history = []
def modern_print(string):
if string not in history:
print(string)
history.append(string)
Решение
Python
history = set()
def modern_print(string):
if string not in history:
print(string)
history.add(string)
Вообще не понял как решать задачу и не думал что в рамках задачи можно создавать внешнее хранилище в виде списка и его редактировать внутри функции. Бродя по интернету в поисках решения нашел способ через создание атрибута внутри функции в таком виде:
def modern_print(string: str) -> str:
if not hasattr(modern_print, ‘printed’):
modern_print.printed = set()
if string in modern_print.printed:
pass
else:
modern_print.printed.add(string)
print(string)
решение хорошее, но выходит за рамки курса.
Всё так просто?!
Я уже дошел до изучения замыкания и декораторов. А тут надо тупо объявить глобальную переменную…
глобальные переменные чаще зло, чем добро. Но иногда они меньшее зло, чем чрезмерное усложнение кода.