Напишите функцию to_string
, которая формирует из последовательности данных строку.
Функция должна принимать:
- неопределённое количество данных;
- необязательный параметр
sep
(по умолчанию пробел); - необязательный параметр
end
(по умолчанию\n
).
Примечание
Ваше решение должно содержать только функции.
В решении не должно быть вызовов требуемых функций.
Пример
Ввод
result = to_string(1, 2, 3)
Вывод
result = '1 2 3\n'
Ввод
data = [7, 3, 1, "hello", (1, 2, 3)]
result = to_string(*data, sep=", ", end="!")
Вывод
result = '7, 3, 1, hello, (1, 2, 3)!'
Решение
Для решения этой задачи надо понимать, что мы можем получить на вход нашей функции любой количество данных любого типа, не обязательно однородных. Кроме того, можно вызвать функцию совсем без передаваемых данных. Можно сказать, что нас просят написать упрощенный аналог функции print().
Для того, чтобы обеспечить обработку различного количества входных параметров воспользуемся *args. Обратите внимание, что название нашей переменной может быть любым, совсем необязательно использовать пары *args/**kwargs.
Дальше перебираем содержимое нашей переменной любым удобным для нас способом, с помощью функции str() преобразуем наш объект в строковый тип данных и накапливаем в строку. между объектами вставляем содержимое строковой переменной, которую получили в параметре sep, а в конце добавляем то, что получили в параметре end.
Посмотреть код
Решение
# Развернутый алгоритм
def to_string(*data, sep=' ', end='\n'):
string = ''
data = list(data)
while data:
item = data.pop(0)
string += str(item)
if data:
string += sep
return string + end
Решение
# Свернутый в одну строку.
def to_string(*data, sep=' ', end='\n'):
return sep.join(str(item) for item in data) + end
Здравствуйте.
Вот еще такой вариант. Яндекс принял.
def to_string(*data, **kwargs):
return kwargs.get(‘sep’, ‘ ‘).join(str(i) for i in data) + kwargs.get(‘end’, ‘\n’)
Это вариант приведенный во втором решении, просто имена переменных принимаются сразу в словарь. У него есть небольшой недостаток – можно передавать несуществующие параметры в функцию. С одной стороны это не страшно, пока это учебный код, с другой, рано или поздно кто-то в серьезной разработке опечатается (передаст, например cep=’ ‘) и это пойдет в код. Если потом этот код начнут плодить и модифицировать, могут начаться вопросы.
Да, поняла. Огромное спасибо за подробное объяснение.