Что такое тип данных
Тип данных — это вид значения, от которого зависят допустимые действия: число можно делить, строку — нет, зато строку можно перевернуть или разрезать на слова. Python сам определяет тип по тому, как записано значение.
print(type(15))
print(type(15.0))
print(type("15"))
print(type(15 > 3))
<class 'int'>
<class 'float'>
<class 'str'>
<class 'bool'>
Четыре похожие записи дали четыре разных типа: целое число, дробное число, строку и логическое значение. Для человека «15» и 15 почти одно и то же, а для Python это разные вещи. Официальная документация Python описывает стандартные типы данных и правила, по которым они взаимодействуют[1].
В Python тип принадлежит значению, а не имени переменной. Одна и та же переменная сегодня может хранить число, а после нового присваивания — строку. Об этом подробнее в уроке о переменных в Python. В школьной программе по ФОП в 8 классе изучают целые, вещественные и символьные переменные[2] — это и есть int, float и str.
Зачем школьнику разбираться в типах данных, если Python определяет их сам? Потому что от типа зависит результат: "2" + "2" даёт «22», а 2 + 2 — 4. По материалам ФИПИ, в задании 16 ОГЭ программа получает числа на вход, и если забыть превратить введённую строку в int, решение выведет не тот ответ или упадёт с ошибкой. Такие ловушки встречаются и в заданиях «что выведет программа»: там нужно в уме понять, какого типа каждое значение, и только потом считать.
Главные типы данных Python в одной таблице
Школьнику достаточно знать 5 основных типов: int, float, str, bool и list. Остальные — словари, кортежи, множества — появятся позже, когда понадобятся.
| Тип | Что хранит | Пример записи | Что можно делать |
| int | Целое число | 42, -7, 0 | Считать: + − * // % ** |
| float | Дробное число | 3.14, 2.0 | Считать с дробями, округлять |
| str | Текст | "кот", '42' | Склеивать, повторять, искать буквы |
| bool | Истина или ложь | True, False | Проверять условия |
| list | Набор значений | [3, 1, 2] | Добавлять, сортировать, перебирать |
Запомнить таблицу помогает простой вопрос к любому значению: «что с ним можно сделать?». Если его нужно посчитать — это число, если показать человеку — строка, если проверить — логическое значение. Названия типов взяты из английского: integer — целое, floating point — плавающая точка, string — строка, boolean — в честь математика Джорджа Буля.
Целые числа int и дробные float
Тип int — это целые числа любой длины (так их описывает официальная документация), а float — дробные числа с точкой. Python не ограничивает размер целого: 2 ** 100 он посчитает точно, все 31 цифру.
print(2 ** 100)
print(7 / 2, 8 / 2)
print(7 // 2, 7 % 2)
1267650600228229401496703205376
3.5 4.0
3 1
Обратите внимание: 8 / 2 дало 4.0, а не 4. Обычное деление всегда возвращает float. Чтобы получить целую часть от деления, используют //, а остаток — %; для целых чисел оба оператора дают int.
Дробные числа компьютер хранит в двоичном виде и не всегда точно. Поэтому 0.1 + 0.2 в Python даёт 0.30000000000000004. Это не ошибка языка, а свойство всех компьютеров, и документация Python объясняет его отдельно. На практике результат округляют: round(0.1 + 0.2, 2) вернёт 0.3. Сравнивать дробные числа через == не стоит — лучше проверять, что разница меньше маленького числа.
Строки str
Строка — это любой текст в кавычках: буквы, цифры, пробелы и знаки. Строку "123" нельзя сложить с числом 1, зато её можно склеить с другой строкой.
slovo = "черепаха"
print(len(slovo))
print(slovo[0], slovo[-1])
print(slovo.upper())
print("ура" + "!" * 3)
8
ч а
ЧЕРЕПАХА
ура!!!
Функция len() считает символы, квадратные скобки достают букву по номеру (нумерация с нуля, -1 — последняя буква), а upper() переводит текст в заглавные. Строки в Python неизменяемы: заменить одну букву через slovo[0] = "Ч" нельзя, вместо этого создают новую строку. Подробно об этом — в уроке о строках и их методах.
Функция type() и преобразование типов
Чтобы узнать тип значения, используют type(), а чтобы превратить одно в другое — функции с именами типов: int(), float(), str(), bool(). Это самая частая операция в задачах с вводом.
| Команда | Результат | Комментарий |
int("25") | 25 | Строка из цифр → целое |
int(3.99) | 3 | Дробная часть отбрасывается |
float("2.5") | 2.5 | Строка с точкой → дробное |
str(100) | "100" | Число → текст |
int("2.5") | ValueError | int() не читает точку |
float("2,5") | ValueError | Запятая вместо точки |
Руководство PEP 8 советует проверять тип через isinstance(x, int), а не сравнением type(x) == int[3]: так проверка учитывает и родственные типы. Главный практический случай — ввод: функция input() всегда возвращает строку, даже если пользователь набрал цифры. Поэтому число из ввода получают так: n = int(input()). Об этом подробно рассказано в уроке о функции input. Если строку превратить в число не получается, Python сообщает об ошибке ValueError, а при попытке сложить строку с числом — TypeError.
Отдельно про округление. int() отбрасывает дробную часть, а round() округляет до ближайшего целого. Но при ровно половине Python выбирает чётное число: round(2.5) даёт 2, а round(3.5) — 4. Так устроено «банковское» округление, и это описано в документации языка.
Логический тип bool
Логический тип имеет ровно 2 значения: True (истина) и False (ложь). Их возвращает любое сравнение, и на них держатся все условия и циклы с условием.
vozrast = 12
print(vozrast > 10)
print(vozrast == 13)
print(True + True)
True
False
2
Последняя строка удивляет новичков: True ведёт себя как 1, а False — как 0. Ещё полезно знать, какие значения Python считает ложными: 0, 0.0, пустая строка "" и пустой список []. Всё остальное — истинно, даже строка "0" и строка "False".
Списки list
Список — это упорядоченный набор значений в квадратных скобках; в нём могут лежать числа, строки и даже другие списки. В отличие от строки, список можно менять на месте.
ocenki = [5, 4, 5, 3]
ocenki.append(5)
print(ocenki, len(ocenki), sum(ocenki))
[5, 4, 5, 3, 5] 5 22
Списки — отдельная большая тема с индексами, срезами и сортировкой; ей посвящён урок о списках в Python. Здесь важно запомнить одно: список — тоже тип данных, и функция type() покажет для него <class 'list'>.
Когда знание типов не поможет
Если ошибка в логике программы, а не в виде значения, проверка типов не поможет. Вот 4 ситуации, где нужен другой подход.
- Неверная формула. Если вместо периметра считается площадь, тип int в обоих случаях одинаковый — ищите ошибку в выражении на 1 строке выше вывода.
- Бесконечный цикл. Условие типа bool может оставаться истинным 1000 раз подряд из-за забытого изменения переменной.
- Деление на 0. Тип делителя правильный, но ZeroDivisionError всё равно возникнет.
- Точные денежные расчёты с float. Ошибка в 15-м знаке после точки накапливается; копейки удобнее хранить целыми числами.
Миф: «Python — язык без типов, ему всё равно, что лежит в переменной». Это не подтверждается: типы в Python строгие (это подчёркивает и документация Python), и сложить строку с числом он откажется. Просто тип хранится у значения, а не объявляется заранее.
Миф: «Функция int() округляет число». Это не так: int(3.99) даёт 3, потому что дробная часть отбрасывается. Для округления существует отдельная функция round().
Чего делать нельзя
Нельзя складывать строку с числом без преобразования: Python не угадывает, что вы имели в виду. Вот 6 правил работы с типами.
- Нельзя забывать int() вокруг input(). Без него «2» + «3» превратится в «23».
- Не следует писать дробные числа через запятую.
3,5— это два числа, а не одно. - Не стоит сравнивать дробные числа через ==. Из-за двоичного хранения 0.1 + 0.2 не равно 0.3.
- Нельзя менять букву в строке по индексу. Строки неизменяемы, создавайте новую.
- Не стоит называть переменные именами встроенных типов. Встроенная функция с таким именем перестанет работать.
- Не следует ждать округления от преобразования в целое. Дробная часть просто отбрасывается, а округляет round().
Проверьте себя в квизе ниже: в каждом вопросе нужно предсказать, что выведет код. Ответ появится сразу, вместе с объяснением, а в конце — счёт. Похожие вопросы на смешанные темы есть в большом квизе по Python.
Источники
[1] The Python Tutorial (официальная документация Python 3). Python Software Foundation.
[2] Приказ Минпросвещения России от 18.05.2023 № 370 «Об утверждении федеральной образовательной программы основного общего образования».
[3] van Rossum G., Warsaw B., Coghlan N. PEP 8 — Style Guide for Python Code. Python Software Foundation, 2001.
[4] Roediger H. L., Karpicke J. D. Test-enhanced learning: Taking memory tests improves long-term retention // Psychological Science. 2006. Vol. 17, № 3. P. 249–255.
Вопросы и ответы
Сколько типов данных в Python?
Встроенных типов больше десятка, но в школьных задачах хватает пяти: int, float, str, bool и list. Позже к ним добавятся словари dict, кортежи tuple и множества set.
Как проверить, что строка состоит из цифр?
Метод isdigit() вернёт True для строки вроде "123". Для отрицательных и дробных чисел он даст False, это стоит учитывать.
Почему 10 / 2 равно 5.0, а не 5?
Оператор / всегда возвращает дробное число. Если нужен целый результат, используйте // — он даёт целую часть от деления.
Чем отличаются типы данных Python от типов в Паскале?
В Паскале вид переменной объявляют заранее и не меняют. В Python тип определяется значением и может меняться при новом присваивании.
Что такое None?
Это особое значение «ничего». Его возвращают функции без return, например print. У None свой тип — NoneType.
Зачем нужен квиз, если можно просто запустить код?
Предсказать результат в уме сложнее, чем увидеть его. Именно эта попытка вспомнить закрепляет знания: самопроверка работает лучше перечитывания[4].