Python: Экранированные последовательности
Допустим, мы хотим вывести текст ниже в две строчки.
- Are you hungry?
- Aaaarrrgh!Если мы просто передадим этот текст в print(), то Python напечатает все в одну строчку. Технически можно написать два подряд идущих print(), но представим что мы хотим это сделать с помощью одного.
print("- Are you hungry?- Aaaarrrgh!")
# => - Are you hungry?- Aaaarrrgh!Чтобы каждая из них начиналась с новой строки, нужно добавить перевод строки, то есть "нажать Enter". В программировании это реализуется через добавление специальных символов, в данном случае \n. Да, это не опечатка. Несмотря на то, что мы видим здесь два символа, с точки зрения Python это один символ.
print("- Are you hungry?\n- Aaaarrrgh!")Результат будет таким.
- Are you hungry?
- Aaaarrrgh!Что такое \n?
\n является управляющей последовательностью (англ. escape sequence, иногда говорят "экранированная последовательность"). Она обозначает перевод строки, но не отображается напрямую. Вы не увидите \n в выводе программы, так как она влияет только на расположение текста.
В текстовых редакторах при нажатии Enter добавляется невидимый символ LF (Line Feed). Именно его и означает \n. Иногда такие символы можно увидеть, если включить отображение спецсимволов.
- Привет!¶
- О, привет!¶
- Как дела?Принтеры, редакторы и интерпретаторы Python понимают \n как команду начать строку с новой строки.
Примеры использования \n
Вот как Python обрабатывает управляющую последовательность \n.
В коде 'Hello\nWorld'
↓
На экране Hello
WorldМестоположение \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, чтобы избежать проблем при переносе кода между системами.
Задание
Выведите на экран подсказку о символе \n, используя только один print():
Для разделения строк используйте "\n"
Пример: print("строка1\nстрока2")Обратите внимание: \n в первой строке — это буквальный текст, а не перевод строки.
Полезное
Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект
Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "ИИ-помощник":
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи. В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в обратной связи нашего сообщества
Ваше упражнение проверяется по этим тестам
import runpy
def test(capsys):
expected = 'Для разделения строк используйте "\\n"\nПример: print("строка1\\nстрока2")'
runpy.run_module('solution')
out, _ = capsys.readouterr()
assert out.strip() == expectedРешение учителя откроется через:
20:00
