Python: Кавычки

В этом уроке разберёмся, что такое строка и какую роль играют кавычки в коде.

Строка — это просто набор символов, заключённый в кавычки. Посмотрим на примеры:

'Hello'
'Goodbye'
'G'
' '
''

Все эти варианты — строки.

  • 'Hello' и 'Goodbye' — это строки из нескольких символов.
  • 'G' — строка из одного символа.
  • ' ' — строка, состоящая из одного пробела.
  • '' — пустая строка, в ней нет ни одного символа.

То есть всё, что находится внутри кавычек, считается строкой: даже если там только пробел или вообще ничего нет.

Одинарные и двойные кавычки

В Python строки можно записывать как в одинарных, так и в двойных кавычках:

print('Hello')
print("Hello")

Оба варианта работают одинаково. Главное — использовать один и тот же тип кавычек в начале и в конце строки.

Хотя Python поддерживает оба варианта, по умолчанию принято использовать одинарные кавычки ', если внутри строки не требуется двойных. Этого стиля придерживается официальный стандарт PEP8 и линтер Ruff, который мы используем на платформе. Он может автоматически заменить двойные кавычки на одинарные там, где это возможно.

Проблема с кавычками внутри строки

Представьте, что вы хотите напечатать строку 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""

Программа должна вывести на экран эту фразу в точности. Обратите внимание на кавычки в начале и в конце фразы:

"Khal Drogo's favorite word is "athjahakar""

Полезное

Как с вами связаться? 🙃

Команда проекта находится в телеграм-сообществе по ссылке https://ttttt.me/HexletLearningBot. Там можно задать любой вопрос и повлиять на проект

Упражнение не проходит проверку — что делать? 😶

Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "Обсуждение". Как правильно задать вопрос:

В моей среде код работает, а здесь нет 🤨

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Мой код отличается от решения учителя 🤔

Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи. В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.

Прочитал урок — ничего не понятно 🙄

Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в обратной связи нашего сообщества

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются

Привет! Я Тота и моя задача помочь в обучении. Чтобы активировать меня, нужно зарегистрироваться или залогиниться, если у вас уже есть аккаунт

Loading...

Ваше упражнение проверяется по этим тестам

1from hexlet.test import expect_output
2
3
4def test(capsys):
5    expected = '"Khal Drogo\'s favorite word is "athjahakar""'
6    expect_output(capsys, expected)
7

Решение учителя откроется через:

20:00
waiting_clock