Python: Multi-line строки
Иногда текст в программе должен состоять из нескольких строк. Например, при генерации письма, создании шаблона, форматировании сообщения об ошибке или просто работе с длинными текстами.
Конечно, можно использовать символ перевода строки \n, как мы делали раньше:
text = 'Пример текста,\nсостоящего из\nнескольких строк'На печати строка будет выглядеть вот так:
Пример текста,
состоящего из
нескольких строкНо такой способ становится неудобным, особенно если строка длинная или нужно часто добавлять новые переносы. Каждый \n приходится вставлять вручную, и это ухудшает читаемость кода.
Многострочные строки (multi-line) как альтернатива
В Python есть более удобный способ записывать текст в несколько строк: многострочные строки (multi-line strings). Чтобы создать такую строку, нужно заключить текст в тройные кавычки (технически это одна кавычка, повторенная три раза): ''' или """:
text = '''Пример текста,
состоящего из
нескольких строк'''Теперь в коде все выглядит так же, как и при выводе:
Пример текста,
состоящего из
нескольких строкОсторожно с пустой строкой в конце
Если вы закрываете тройные кавычки на новой строке, Python включает и эту строку в результат:
text = '''Пример текста,
состоящего из
нескольких строк
'''
print("====")
print(text)
print("====")Вывод:
====
Пример текста,
состоящего из
нескольких строк
====Обратите внимание: появляется пустая строка в конце. Чтобы ее избежать, не переносите закрывающие кавычки на новую строку:
text = '''Пример текста,
состоящего из
нескольких строк'''Вывод:
====
Пример текста,
состоящего из
нескольких строк
====Преимущества multi-line строк
- Читаемость кода: текст в коде выглядит почти как на экране.
- Удобство при редактировании: легко добавлять, удалять и менять строки.
- Не нужно экранировать кавычки:
quote = '''Здесь не нужно экранировать 'одинарные' и "двойные" кавычки'''Интерполяция внутри многострочной строки
Многострочные строки можно сочетать с f-строками, чтобы подставлять значения переменных:
a = 'А'
b = 'B'
text = f'''{a} и {b}
сидели на трубе'''Вывод:
А и B
сидели на трубеЭто особенно удобно для шаблонов, писем, сообщений об ошибках и многострочных описаний.
Компьютер и человек воспринимают код по-разному
Python может обработать и строки с \n, и многострочные строки. Для интерпретатора это одно и то же. Но для человека, читающего код, multi-line строки намного удобнее и нагляднее.
Задание
Запишите в переменную text текст, приведенный ниже. Все переносы строк должны сохраниться.
Уважаемый пользователь!
Ваш заказ успешно оформлен.
Ожидаемая дата доставки: 3-5 рабочих дней.
Спасибо, что выбрали нас!Полезное
Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект
Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "ИИ-помощник":
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи. В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в обратной связи нашего сообщества
Ваше упражнение проверяется по этим тестам
import runpy
def test(capsys):
expected = """Уважаемый пользователь!
Ваш заказ успешно оформлен.
Ожидаемая дата доставки: 3-5 рабочих дней.
Спасибо, что выбрали нас!"""
runpy.run_module('solution')
out, _ = capsys.readouterr()
assert out.strip() == expectedРешение учителя откроется через:
20:00
