Skip to content

Commit cb17bc7

Browse files
committed
update strings
Signed-off-by: Kirill Mokevnin <[email protected]>
1 parent 04decde commit cb17bc7

File tree

7 files changed

+220
-116
lines changed

7 files changed

+220
-116
lines changed

modules/25-strings/10-quotes/ru/EXERCISE.md

-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
Напишите программу, которая выведет на экран:
32

43
```

modules/25-strings/10-quotes/ru/README.md

+38-24
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1+
В этом уроке разберёмся, что такое строка и какую роль играют кавычки в коде.
12

2-
В этом уроке мы разберемся, что такое строка и какую роль в коде играют кавычки.
3-
4-
Определить строку довольно просто — это некий набор символов. Представим, что у нас есть такие записи:
3+
Строка — это просто набор символов, заключённый в кавычки. Посмотрим на примеры:
54

65
```python
76
'Hello'
@@ -11,64 +10,79 @@
1110
''
1211
```
1312

14-
Какие из этих вариантов — строки? На самом деле, все пять вариантов подходят:
13+
Все эти варианты — строки.
14+
15+
- `'Hello'` и `'Goodbye'` — это строки из нескольких символов.
16+
- `'G'` — строка из одного символа.
17+
- `' '` — строка, состоящая из одного пробела.
18+
- `''` — пустая строка, в ней нет ни одного символа.
1519

16-
* С `'Hello'` и `'Goodbye'` все очевидно — мы уже работали с подобными конструкциями и называли их строками
17-
* `'G'` и `' '` — тоже строки, просто в них всего по одному символу
18-
* `''` — это пустая строка, потому в ней ноль символов
20+
То есть всё, что находится внутри кавычек, считается строкой: даже если там только пробел или вообще ничего нет.
1921

20-
Строкой мы считаем все, что находится внутри кавычек: даже если это пробел, один символ или вообще отсутствие символов.
22+
## Одинарные и двойные кавычки
2123

22-
Выше мы записывали строки в одинарных кавычках, но это не единственный способ. Можно использовать и двойные:
24+
В Python строки можно записывать как в одинарных, так и в двойных кавычках:
2325

2426
```python
25-
print("Dracarys!")
27+
print('Hello')
28+
print("Hello")
2629
```
2730

28-
Теперь представьте, что вы хотите напечатать строчку *Dragon's mother*. Апостроф перед буквой **s** — это такой же символ, как одинарная кавычка. Попробуем:
31+
Оба варианта работают одинаково. Главное — использовать один и тот же тип кавычек в начале и в конце строки.
32+
33+
Хотя Python поддерживает оба варианта, по умолчанию принято использовать одинарные кавычки `'`, если внутри строки не требуется двойных. Этого стиля придерживается официальный стандарт _PEP8_ и линтер _Ruff_, который мы используем на платформе. Он может автоматически заменить двойные кавычки на одинарные там, где это возможно.
34+
35+
## Проблема с кавычками внутри строки
36+
37+
Представьте, что вы хотите напечатать строку _Dragon's mother_. В ней есть апостроф (_'s_) — это тот же символ, что и одинарная кавычка. Попробуем так:
2938

3039
```python
3140
print('Dragon's mother')
3241
# SyntaxError: invalid syntax
3342
```
3443

35-
Такая программа не будет работать. С точки зрения Python строчка началась с одинарной кавычки, а потом закончилась после слова **dragon**. Дальше были символы `s mother` без кавычек — значит, это не строка. А потом была одна открывающая строку кавычка, которая так и не закрылась: `')`. Этот код содержит синтаксическую ошибку — это видно даже по тому, как подсвечен код.
36-
37-
Чтобы избежать этой ошибки, мы используем двойные кавычки. Такой вариант программы сработает верно:
44+
Python решит, что строка заканчивается после слова 'Dragon', а остальное не распознает как валидный код — возникнет синтаксическая ошибка. Чтобы избежать этого, обернём строку в двойные кавычки:
3845

3946
```python
4047
print("Dragon's mother")
4148
```
4249

43-
Теперь интерпретатор знает, что строка началась с двойной кавычки и закончиться должна тоже на двойной кавычке. А одинарная кавычка внутри стала частью строки.
50+
Теперь Python понимает, что одинарная кавычка внутри строки — это обычный символ, а сама строка начинается и заканчивается двойными кавычками.
4451

45-
Верно и обратное. Если внутри строки мы хотим использовать двойные кавычки, то саму строку надо делать в одинарных. Причем количество кавычек внутри самой строки неважно.
52+
Если внутри строки нужны двойные кавычки, а снаружи — одинарные, проблем тоже не будет:
4653

47-
Теперь представим, что мы хотим создать такую строку:
54+
```python
55+
print('He said "No"')
56+
```
57+
58+
Иногда в строке встречаются оба типа кавычек:
4859

4960
```python
5061
Dragon's mother said "No"
5162
```
5263

53-
В ней есть и одинарные, и двойные кавычки. Нам нужно каким-то образом указать интерпретатору, что кавычки — это один из символов внутри строки, а не начало или конец строки.
54-
55-
Для этого используют **символ экранирования**: `\` — обратный слэш. Если мы поставим `\` перед кавычкой (одинарной или двойной), то интерпретатор распознает кавычку как обычный символ внутри строки, а не начало или конец строки:
64+
В этом случае, чтобы Python не спутал кавычки внутри строки с внешними, используют символ экранирования — обратный слэш `\`. Он говорит интерпретатору: следующий за ним символ — часть строки, а не управляющий символ.
5665
5766
```python
58-
# Экранируем кавычки вокруг No, чтобы интерпретатор
59-
# распознал их как часть строки
6067
print("Dragon's mother said \"No\"")
6168
# => Dragon's mother said "No"
6269
```
6370

64-
Обратите внимание, что в примере выше нам не пришлось экранировать одинарную кавычку (апостроф 's), потому что сама строка создана с двойными кавычками. Если бы строка создавалась с одинарными кавычками, то символ экранирования нужен был бы перед апострофом, но не перед двойными кавычками:
71+
В этом примере мы экранируем двойные кавычки внутри строки, заключённой в двойные кавычки.
72+
73+
Обратите внимание: Python воспринимает `\"` как один символ — кавычку, а не два символа.
74+
То же самое касается `\'`, `\\`, `\n` и других управляющих последовательностей — они выглядят как два символа в коде, но в строке считаются за один.
75+
76+
То же самое работает и в обратном случае:
6577

6678
```python
6779
print('Dragon\'s mother said "No"')
6880
# => Dragon's mother said "No"
6981
```
7082

71-
Если нужно вывести сам обратный слеш, то работает такое же правило. Как и любой другой специальный символ, его надо экранировать:
83+
## Как вывести обратный слэш
84+
85+
Чтобы вывести сам обратный слэш, его тоже нужно экранировать:
7286

7387
```python
7488
print("\\")
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,61 @@
1+
Допустим, мы хотим вывести диалог:
12

2-
Мы хотим показать вот такой диалог:
3-
4-
```
3+
```bash
54
- Are you hungry?
65
- Aaaarrrgh!
76
```
87

9-
Попробуем вывести на экран строку с таким текстом:
8+
Попробуем записать его как одну строку:
109

1110
```python
1211
print("- Are you hungry?- Aaaarrrgh!")
1312
# => - Are you hungry?- Aaaarrrgh!
1413
```
1514

16-
Как видите, результат получился не такой, как мы хотели. Строки расположились друг за другом, а не одна ниже другой. Нам нужно как-то сказать интерпретатору «нажать на Enter» — сделать перевод строки после вопросительного знака. Это можно сделать с помощью символа `\n`:
15+
Получилось не то что нужно: обе реплики слились в одну строку. Чтобы каждая из них начиналась с новой строки, нужно указать Python'у сделать перевод строки — то есть «нажать Enter».
16+
17+
Для этого используется специальный управляющий символ `\n`:
1718

1819
```python
1920
print("- Are you hungry?\n- Aaaarrrgh!")
20-
# => - Are you hungry?
21-
# => - Aaaarrrgh!
2221
```
2322

24-
`\n` — это пример **экранированной последовательности** (escape sequence). Такие последовательности еще называют управляющими конструкциями. Их нельзя увидеть в том же виде, в котором их набрали.
23+
Результат:
2524

26-
Набирая текст в Word, вы нажимаете на Enter в конце строчки. Редактор при этом ставит в конец строчки специальный невидимый символ, который называется LINE FEED (LF, перевод строчки). В некоторых редакторах можно даже включить отображение невидимых символов. Тогда текст будет выглядеть примерно так:
25+
```python
26+
- Are you hungry?
27+
- Aaaarrrgh!
28+
```
29+
30+
## Что такое `\n`?
31+
32+
Символ `\n` — это экранированная последовательность, или управляющий символ. Он обозначает перевод строки, но не отображается напрямую. Вы не увидите `\n` в выводе программы — он влияет только на расположение текста.
33+
34+
В текстовых редакторах при нажатии Enter добавляется невидимый символ — LF (Line Feed). Именно его и означает `\n`. Иногда такие символы можно увидеть, если включить отображение спецсимволов:
2735

2836
```
2937
- Привет!¶
3038
- О, привет!¶
3139
- Как дела?
3240
```
3341

34-
Устройство, которое выводит соответствующий текст, учитывает этот символ. Например, принтер при встрече с LF протаскивает бумагу вверх на одну строку, а текстовый редактор переносит весь последующий текст ниже, также на одну строку.
42+
Принтеры, редакторы и интерпретаторы Python понимают `\n` как команду начать строку с новой строки.
3543

36-
Существует несколько десятков таких невидимых символов, но в программировании часто встречаются всего несколько. Кроме перевода строки, к таким символам относятся:
44+
## Другие управляющие символы
3745

38-
* табуляция `\t` — разрыв, который получается при нажатии на кнопку Tab
39-
* возврат каретки `\r` — работает только в Windows
46+
Кроме `\n`, в Python есть и другие специальные последовательности:
4047

41-
Распознать такую управляющую конструкцию в тексте можно по символу `\`. Программисты часто используют перевод строки `\n`, чтобы правильно форматировать текст. Например, напишем такой код:
48+
- `\t` — табуляция (эквивалент клавиши Tab)
49+
- `\r` — возврат каретки (используется в Windows, но редко применяется в Python-коде)
50+
- В программировании чаще всего используют именно \n — его достаточно для большинства задач.
51+
52+
## Примеры использования `\n`
4253

4354
```python
4455
print("Gregor Clegane\nDunsen\nPolliver\nChiswyck")
4556
```
4657

47-
Тогда на экран выведется:
58+
Результат:
4859

4960
```
5061
Gregor Clegane
@@ -53,38 +64,30 @@ Polliver
5364
Chiswyck
5465
```
5566

56-
Когда работаете с символом перевода, учитывайте следующие моменты:
67+
Вы также можете вставлять `\n` в любую часть строки — до, после или даже использовать его отдельно:
5768

58-
1. Не важно, что стоит перед или после `\n`: символ или пустая строка. Перевод обнаружится и выполнится в любом случае
69+
```python
70+
print("First line")
71+
print("\n") # Просто пустая строка
72+
print("Second line")
73+
```
5974

60-
2. Строка может содержать только `\n`:
75+
Результат:
6176

62-
```python
63-
print('Gregor Clegane') # Строка с текстом
64-
print("\n") # Строка с невидимым символом перевода строки
65-
print('Dunsen') # Строка с текстом
66-
```
77+
```
78+
First line
6779
68-
Программа выведет на экран:
80+
Second line
81+
```
6982

70-
```
71-
Gregor Clegane
83+
## Важные детали
7284

85+
- '\n' — один символ, несмотря на то, что в коде он записан как два (\ и n).
86+
- Если вы хотите вывести символы \n буквально (как текст), используйте двойной обратный слэш `\\n`:
7387

74-
Dunsen
88+
```python
89+
print("Joffrey loves using \\n")
90+
# => Joffrey loves using \n
7591
```
7692

77-
3. В коде последовательность `\n` выглядит как два символа, но с точки зрения интерпретатора — это один специальный символ
78-
79-
4. Если нужно вывести `\n` как текст (два отдельных печатных символа), то можно воспользоваться экранированием — добавить еще один `\` в начале. Последовательность `\\n` отобразится как символы `\` и `n`, которые идут друг за другом:
80-
81-
```python
82-
print("Joffrey loves using \\n")
83-
# => Joffrey loves using \n
84-
```
85-
86-
В Windows для перевода строк по умолчанию используется `\r\n`. Такая комбинация хорошо работает только в Windows, но создает проблемы при переносе в другие системы. Например, когда в команде разработчиков есть пользователи Linux.
87-
88-
Дело в том, что последовательность `\r\n` имеет разную трактовку в зависимости от выбранной кодировки, о чем мы поговорим позже. По этой причине в среде разработчиков принято всегда использовать `\n` без `\r`.
89-
90-
В таком случае перевод строки всегда трактуется одинаково и отлично работает в любой системе. Не забудьте настроить ваш редактор на использование `\n`.
93+
- На Windows по умолчанию используется комбинация \r\n, но в Python (и вообще в кроссплатформенной разработке) принято использовать только \n, чтобы избежать проблем при переносе кода между системами.
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
2-
Выведите на экран
1+
Выведите на экран фразу используя конкатенацию слов.
32

43
```text
54
Winter came for the House of Frey.
65
```
76

8-
используя конкатенацию слов.

0 commit comments

Comments
 (0)