Python: Кавычки
Строки в программировании на Python используются очень часто и в самых разных ситуациях. С их помощью мы работаем с текстом: выводим сообщения на экран, обрабатываем пользовательский ввод, читаем данные из файлов, формируем запросы к базам данных или внешним системам.
С точки зрения Python, строка — это просто набор символов, заключённый в кавычки. Посмотрим на примеры:
'Hello'
'Goodbye'
'G'
' '
''
Все эти варианты — строки.
'Hello'
и'Goodbye'
— это строки из нескольких символов.'G'
— строка из одного символа.' '
— строка, состоящая из одного пробела.''
— пустая строка, в ней нет ни одного символа. Играет такую же роль, как 0 в математике
То есть всё, что находится внутри кавычек, считается строкой: даже если там только пробел или вообще ничего нет.
Если вывести строки на экран, то 'Hello'
и 'Goodbye'
будут хорошо заметны. Но '
' и ''
могут сбивать с толку: пустая строка ничего не покажет, а строка с пробелом покажет «пустое место», которое визуально сложно отличить. При этом Python чётко различает их: пустая строка — это отсутствие символов, а строка с пробелом содержит конкретный символ пробела.
Этим языки программирования отличаются от разговорных языков: здесь нет места для интерпретаций. В обычных языках человек может по-разному понять сказанное, уловить смысл даже при неточностях или пропусках. В коде такого не бывает — строка всегда трактуется однозначно.
Контрольный вопрос. Это одинаковые строки или нет?
'хекслет'
' хекслет'
📚 Терминология: строка или строчка?
В программировании есть терминологическая ловушка:
- Строка (string) — это тип данных (то что разбирали выше), например 'hello'.
- Строчка (line) — это строка текста в файле или в коде.
Например, в коде ниже есть строчка, но не строка:
print(5)
Чтобы избежать путаницы, в этом курсе мы будем использовать:
- Строка — когда говорим о типе данных.
- Строчка — когда речь идёт о строках кода.
Одинарные и двойные кавычки
В Python строки можно записывать как в одинарных, так и в двойных кавычках:
print('Hello')
print("Hello")
Оба варианта работают одинаково. Главное — использовать один и тот же тип кавычек в начале и в конце строки.
Хотя Python поддерживает оба варианта, по умолчанию принято использовать одинарные кавычки '
, если внутри строки не требуется двойных. Этого стиля придерживается официальный стандарт оформления кода PEP8.
Проблема с кавычками внутри строки
Представьте, что вы хотите напечатать строку Dragon's mother. В ней есть апостроф ('s) — это тот же символ, что и одинарная кавычка. Попробуем так:
print('Dragon's mother')
# SyntaxError: invalid syntax
Python решит, что строка заканчивается после слова 'Dragon', а остальное не распознает как валидный код — возникнет синтаксическая ошибка. Чтобы избежать этого, обернём строку в двойные кавычки:
print("Dragon's mother")
Теперь Python понимает, что одинарная кавычка внутри строки — это обычный символ, а сама строка начинается и заканчивается двойными кавычками.
Если внутри строки нужны двойные кавычки, а снаружи — одинарные, проблем тоже не будет:
print('He said "No"')
Иногда в строке встречаются оба типа кавычек:
Dragon's mother said "No"
В этом случае чтобы Python не спутал кавычки внутри строки с внешними, используют символ экранирования — обратный слэш \
. Он говорит интерпретатору: следующий за ним символ — часть строки, а не управляющий символ.
print("Dragon's mother said \"No\"")
# => Dragon's mother said "No"
Здесь мы экранируем двойные кавычки внутри строки, заключённой в двойные кавычки.
Обратите внимание: Python воспринимает \"
как один символ — кавычку, а не два символа.
То же самое касается \'
, \\
, \n
и других управляющих последовательностей — они выглядят как два символа в коде, но в строке считаются за один.
То же самое работает и в обратном случае:
print('Dragon\'s mother said "No"')
# => Dragon's mother said "No"
Как вывести обратный слэш
Чтобы вывести сам обратный слэш, его тоже нужно экранировать:
print("\\")
# => \
Задание
Напишите программу, которая выведет на экран в точности как она записана:
"Khal Drogo's favorite word is "athjahakar""
Полезное
Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект
Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "ИИ-помощник":
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи. В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в обратной связи нашего сообщества
Ваше упражнение проверяется по этим тестам
from hexlet.test import expect_output
def test(capsys):
expected = '"Khal Drogo\'s favorite word is "athjahakar""'
expect_output(capsys, expected)
Решение учителя откроется через:
20:00
