Python: Экранированные последовательности
Допустим, мы хотим вывести текст ниже в две строчки:
- Are you hungry?
- Aaaarrrgh!
Если мы просто передадим этот текст в print()
, то Python напечатает все в одну строчку:
print("- Are you hungry?- Aaaarrrgh!")
# => - Are you hungry?- Aaaarrrgh!
Чтобы каждая из них начиналась с новой строки, нужно добавить перевод строки — то есть «нажать Enter». Технически это реализуется через добавление специальных символов, в данном случае \n
. Да, это не опечатка. Несмотря на то, что мы видим здесь два символа, с точки зрения Python это один символ.
print("- Are you hungry?\n- Aaaarrrgh!")
Результат:
- Are you hungry?
- Aaaarrrgh!
Что такое \n
?
Символ \n
— это экранированная последовательность, или управляющий символ. Он обозначает перевод строки, но не отображается напрямую. Вы не увидите \n
в выводе программы — он влияет только на расположение текста.
В текстовых редакторах при нажатии Enter добавляется невидимый символ — LF (Line Feed). Именно его и означает \n
. Иногда такие символы можно увидеть, если включить отображение спецсимволов:
- Привет!¶
- О, привет!¶
- Как дела?
Принтеры, редакторы и интерпретаторы Python понимают \n
как команду начать строку с новой строки.
Примеры использования \n
Местоположение \n
меняет итоговый вывод:
print("Hello\nWorld")
# Hello
# World
print("Hello \nWorld")
# Hello
# World (в конце первой строки есть пробел)
print("Hello\n World")
# Hello
# World (во второй строке в начале пробел)
print("Hello\n\nWorld")
# Hello
#
# World (пустая строка между ними)
Пробелы до или после \n
также учитываются: Python воспринимает их как обычные символы и отображает в выводе.
Вы также можете вставлять \n
в любую часть строки — до, после или даже использовать его отдельно:
print("First line")
print("\n") # Просто пустая строка
print("Second line")
Результат:
First line
Second line
Как вывести сам символ \n
Так как \n
в Python — это управляющая последовательность, он не отображается напрямую, а указывает на то, как отобразить текст. Если вам нужно вывести именно символы \
и n
, а не перевод строки, их нужно экранировать. Для этого перед обратным слешем добавляют ещё один слеш:
print("Hello\\nWorld")
# Hello\nWorld
# Если забыть указать второй слеш
print("Hello\nWorld")
# Hello
# World
В этом случае Python понимает \\
как обычный обратный слеш и показывает строку без перевода строки.
Другие управляющие символы
Кроме \n
, в Python есть и другие специальные последовательности:
\t
— табуляция (эквивалент клавиши Tab)\r
— возврат каретки (используется в Windows, но редко применяется в Python-коде)- В программировании чаще всего используют именно
\n
— его достаточно для большинства задач.
Важные детали
- '\n' — один символ, несмотря на то, что в коде он записан как два (\ и n).
- На Windows по умолчанию используется комбинация \r\n, но в Python (и вообще в кроссплатформенной разработке) принято использовать только \n, чтобы избежать проблем при переносе кода между системами.
Задание
Напишите программу, которая выводит на экран:
- Did Joffrey agree?
- He did. He also said "I love using \n".
При этом программа использует только один print()
, но результат на экране должен выглядеть в точности, как показано выше.
Полезное
Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект
Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "ИИ-помощник":
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи. В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в обратной связи нашего сообщества
Ваше упражнение проверяется по этим тестам
from hexlet.test import expect_output
def test(capsys):
expected = '- Did Joffrey agree?\n- He did. He also said "I love using \\n".' # noqa: E501
expect_output(capsys, expected)
Решение учителя откроется через:
20:00
