Skip to content

Commit 5bf1bc8

Browse files
committed
update
Signed-off-by: Kirill Mokevnin <[email protected]>
1 parent 91e1ec0 commit 5bf1bc8

File tree

6 files changed

+194
-61
lines changed

6 files changed

+194
-61
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,97 @@
1+
Программы работают с разной информацией: текст, числа, даты, списки, булевы значения. У каждого фрагмента данных в программе есть тип — его “категория”.
12

2-
Бывают разные способы представлять данные в программах. Есть **строки** — наборы символов в кавычках вроде `"Hello, World!"`. Есть **целые числа** — например, `7`, `-198`, `0`. Это две разные категории информации — два разных **типа данных**. Операция умножения имеет смысл для категории «целые числа», но не для категории «строки»: нет смысла умножать слово «мама» на слово «блокнот».
3+
Например:
34

4-
Тип данных определяет, что можно делать с элементами конкретного множества информации. В этом уроке мы изучим типы данных и узнаем, как работает типизация в Python.
5+
- "Hello, World!" — это строка (набор символов)
6+
- 7, -198, 0 — это целые числа
7+
- 3.14, -0.01, 1.0 — это рациональные числа (или числа с плавающей точкой)
58

6-
Язык программирования распознает типы данных, поэтому Python не позволит нам умножать строку на строку — нельзя умножать текст на текст. При этом можно умножать целое число на другое целое число. Наличие типов и таких ограничений в языке защищает программы от случайных ошибок.
9+
## 🔍 Что такое тип данных?
710

8-
В отличие от строк, числа оборачивать в кавычки не нужно. Чтобы напечатать число 5, достаточно написать:
11+
Тип данных определяет:
12+
13+
- как интерпретировать значение;
14+
- какие операции с ним можно делать.
15+
16+
Например, числа можно складывать, делить и умножать. А вот строки складываются по-другому — при помощи конкатенации (склеивания). Но умножать строку на строку нельзя — это бессмысленно:
17+
18+
```python
19+
# Нельзя: 'мама' * 'блокнот' ❌
20+
```
21+
22+
## 🧮 Числа и строки — разные типы
23+
24+
Пример вывода числа:
925

1026
```python
1127
print(5) # => 5
1228
```
1329

14-
Число `5` и строка `'5'` — совершенно разные вещи, хотя вывод у `print()` для этих данных идентичный. Целые числа (`1`, `34`, `-19` и т.д.) и рациональные числа (`1.3`, `1.0`, `-14.324` и т.д.) — это два отдельных **типа данных**. Такое разделение связано с особенностями устройства компьютеров. Есть и другие типы, с ними мы познакомимся позже.
30+
Пример вывода строки:
31+
32+
```python
33+
print('5') # => 5
34+
```
35+
36+
На экране результат выглядит одинаково, но внутри программы это совершенно разные вещи:
37+
38+
| Значение | Тип данных |
39+
|----------|------------------|
40+
| `5` | `int` (целое число) |
41+
| `'5'` | `str` (строка) |
42+
43+
Строку '5' нельзя сложить с числом 5, как и '10' / 2 не даст числа 5.0.
44+
Python будет ругаться, если вы попытаетесь смешать несовместимые типы без явного преобразования.
45+
46+
## 🔢 Целые и рациональные числа
47+
48+
Python различает два вида чисел:
49+
50+
- int — целые числа: -3, 0, 7, 100000
51+
- float — вещественные (рациональные) числа: 1.0, -3.14, 2.718
1552

16-
Вот еще один пример, но уже с рациональным числом:
53+
Пример:
1754

1855
```python
1956
print(10.234) # => 10.234
2057
```
2158

22-
Типы данных «строка», «целое число» и «рациональное число» — это *примитивные типы*, то есть они встроены в сам язык Python. В язык встроены также и некоторые составные типы, но пока мы будем работать только с примитивными. Программисты также могут создавать собственные типы данных.
59+
Числа с точкой Python воспринимает как float — с ними можно делать арифметику с десятичной точностью.
60+
61+
## ⚙️ Почему типы вообще нужны?
62+
63+
Типы помогают компьютеру понимать, как обрабатывать данные. Они:
64+
65+
- определяют набор допустимых операций;
66+
- влияют на поведение функций и выражений;
67+
- позволяют языку выявлять ошибки ещё до выполнения программы.
68+
69+
Например, если вы случайно попытаетесь сложить строку с числом, Python остановит программу и покажет ошибку — именно благодаря строгой типизации.
70+
71+
🧱 Примитивные типы
72+
73+
Типы вроде:
74+
75+
- str (строка),
76+
- int (целое число),
77+
- float (рациональное число)
78+
79+
называются примитивными — они встроены прямо в язык. Существуют и составные типы: списки, словари, кортежи и другие. С ними мы познакомимся позже. Более того, в Python можно создавать и свои собственные типы (например, классы), но для начала важно хорошо разобраться с примитивами.
80+
81+
## 📚 Терминология: строка или строчка?
82+
83+
В программировании есть терминологическая ловушка:
84+
85+
- строка (string) — это тип данных, например 'hello'
86+
- строчка (line) — это строка текста в файле или в коде
87+
88+
Например, в коде ниже есть строчка, но не строка:
89+
90+
```python
91+
print(5)
92+
```
93+
94+
Чтобы избежать путаницы, в этом курсе мы будем использовать:
2395

24-
По-английски строки в программировании называются strings, а строчки текстовых файлов — lines. Например, в коде кода выше есть строчка (line), но нет никаких строк (strings). В русском иногда может быть путаница, поэтому во всех уроках мы будем говорить **строка** для обозначения типа данных «строка», и **строчка** для обозначения строчек кода (lines) в файлах.
96+
- строка — когда говорим о данных типа str;
97+
- строчка — когда речь идёт о строках кода (lines).
Original file line numberDiff line numberDiff line change
@@ -1,2 +1 @@
1-
21
Выведите на экран результат выражения: `7 - (-8 - -2)`. Попробуйте сделать число 7 не числом, а строкой. Сработает ли такой код? Поэкспериментируйте с другими числами тоже.
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,50 @@
1+
Python относится к типам данных очень серьёзно. Если вы попытаетесь выполнить операцию между несовместимыми типами — программа выдаст ошибку. Всё дело в том, что Python — язык со строгой (или сильной) типизацией.
12

2-
Python — один из языков, который строго относится к типам данных. Поэтому на любую несовместимость типов он ответит ошибкой. Все дело в сильной типизации.
3+
## 🧮 Что это значит на практике?
34

4-
Нам известно про два разных типа данных: числа и строки. Например, мы могли складывать числа, потому что операция сложения — это операция для типа «числа». А что, если применить эту операцию не к двум числам, а к числу и строке?
5+
Допустим, вы складываете два числа:
56

6-
```python
7-
print(1 + '7') # TypeError: unsupported operand type(s)...
7+
```Python
8+
print(1 + 7) # => 8
89
```
910

10-
Python не разрешит сложить число `1` и строку `'7'`, потому что это значения разных типов. Нужно сначала либо сделать строку числом, либо число строкой. Как это сделать, мы поговорим позже.
11+
Всё отлично. Операция сложения допустима для чисел.
12+
А что будет, если попробовать сложить число и строку?
1113

12-
Такое педантичное отношение к совместимости типов называется **строгой типизацией** или **сильной типизацией**. Python — язык со строгой типизацией.
14+
```Python
15+
print(1 + '7')
16+
# TypeError: unsupported operand type(s) for +: 'int' and 'str'
17+
```
18+
19+
Python сообщает, что не может сложить int и str. Это ошибка типов: значения принадлежат к разным категориям, и программа отказывается продолжать.
20+
21+
## 🔎 Почему так строго?
22+
23+
Python защищает вас от неочевидных и опасных ошибок. Он требует, чтобы вы явно указали, как вы хотите преобразовать данные:
24+
25+
- либо сделать строку числом (`int('7')`);
26+
- либо число строкой (`str(1)`).
27+
28+
Мы научимся делать это чуть позже.
1329

14-
Не все языки так делают. Например, PHP — это язык со **слабой типизацией**. Он знает о существовании разных типов, но относится к их использованию не очень строго. PHP пытается преобразовывать информацию, когда это кажется разумным. То же самое относится к JavaScript:
30+
## 🔁 А как в других языках?
1531

16-
```javascript
17-
// Как тебе такое, Илон Маск?
18-
// Число 1 + Строка 7 = Строка 17
19-
1 + '7'; // '17'
32+
Не все языки такие. Например, PHP и JavaScript используют слабую типизацию — они автоматически преобразуют типы, когда считают это «разумным»:
33+
34+
```Python
35+
1 + '7'; // => '17'
2036
```
2137

22-
С одной стороны, автоматическое неявное преобразование типов и правда кажется удобным. Но на практике это свойство языка создает множество ошибок и проблем, которые трудно найти. Код может иногда работать, а иногда не работать — в зависимости от того, «повезло» ли с автоматическим преобразованием. Программист это заметит не сразу и потратит много времени на отладку.
38+
В этом примере число 1 неявно превращается в строку '1', и результатом становится '17'.
39+
40+
Сначала может показаться, что слабая типизация — это удобно. Меньше кода, всё "просто работает". Но на практике это приводит к:
41+
42+
- Неявным преобразованиям, о которых программист даже не подозревает.
43+
- Непредсказуемому поведению кода.
44+
- Трудным для отладки ошибкам, которые появляются в самых неожиданных местах.
45+
46+
Такие ошибки особенно сложно поймать, потому что программа может «иногда работать, иногда нет» — в зависимости от типа данных, которые в неё попали.
47+
48+
## 📌 Вывод
49+
50+
Python — язык со строгой типизацией. Он не позволяет выполнять операции между несовместимыми типами без явного преобразования. Это делает программы надёжнее и понятнее. Мы ещё научимся преобразовывать данные из одного типа в другой — и делать это всегда сознательно.
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,48 @@
1-
2-
Представим, что нам нужно изменить символ в строке. Вот, что из этого выйдет:
1+
Представим, что у нас есть строка, и мы хотим заменить в ней один символ — например, первую букву имени:
32

43
```python
54
first_name = 'Alexander'
6-
first_name[0] = 'B'
7-
# Ошибка: TypeError: 'str' object does not support item assignment
5+
first_name[0] = 'B' #
6+
```
7+
8+
Python сразу выдаст ошибку:
9+
810
```
11+
TypeError: 'str' object does not support item assignment
12+
```
13+
14+
Что это значит? Строки в Python нельзя изменять по частям. Как только они созданы — всё, они неизменяемы (или, как говорят программисты, иммутабельны).
15+
16+
## 🧱 Почему строки неизменяемые?
17+
18+
Python устроен так, что примитивные типы (строки, числа, булевы значения и т. д.) нельзя менять. Это даёт важные преимущества:
919

10-
Такое происходит из-за неизменяемости примитивных типов в Python — язык не дает никакой физической возможности поменять строку. Неизменяемость примитивных типов важна по многим причинам. Ключевая причина — производительность.
20+
- 🔐 Безопасность: значения не изменятся случайно
21+
- ⚡️ Производительность: с неизменяемыми объектами проще работать внутри интерпретатора
22+
- 🧠 Предсказуемость: меньше неожиданных эффектов при передаче данных в функции
1123

12-
Но иногда нам нужно изменить строку. Для этого и существуют переменные:
24+
## 🔁 А как тогда изменить строку?
25+
26+
Если нужно "изменить" строку — мы не редактируем её, а создаём новую строку и сохраняем в ту же переменную:
1327

1428
```python
1529
first_name = 'Alexander'
1630
first_name = 'Blexander'
31+
1732
print(first_name) # => Blexander
1833
```
1934

20-
Есть большая разница между *изменением значения переменной* и *изменением самого значения*. Примитивные типы в Python поменять нельзя, а составные — можно. Также можно без проблем заменить значение переменной.
35+
Переменная first_name теперь просто указывает на другую строку. Это не изменение самой строки, а замена значения переменной.
36+
37+
## 🔄 В чём разница?
38+
39+
Важно различать два действия:
40+
41+
| Действие | Можно? | Пример |
42+
|-------------------------------|--------|--------------------------------|
43+
| Изменить содержимое строки | ❌ Нет | `first_name[0] = 'B'` — ошибка |
44+
| Заменить значение переменной | ✅ Да | `first_name = 'Blexander'` |
45+
46+
## 📌 Вывод
47+
48+
Примитивные типы данных в Python — такие как строки (str), целые числа (int), вещественные числа (float) и логические значения (bool) — являются неизменяемыми (immutable). Это означает, что после создания их внутреннее значение изменить нельзя. Вы не можете поменять один символ в строке или один разряд в числе — любые "изменения" происходят путём создания нового значения и переопределения переменной.

modules/33-data-types/55-data-types-casting/ru/EXERCISE.md

-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
Выведите на экран строку `2 times`, полученную из числа 2.9 (хранится в переменной `value`) и строки `times`, используя преобразования типов и конкатенацию. Для этого нужно выполнить два преобразования: сначала в целое число, а затем в строку
32

43
<pre class='hexlet-basics-output'>

0 commit comments

Comments
 (0)