Какие бывают типы данных: числа, строки, логика и списки

Pythonобновлено 07.10.20268 мин чтенияесть тренажёр

Типы данных в Python определяют, что за значение лежит в переменной и что с ним можно делать: целые числа int складывают, строки str склеивают, логические значения bool проверяют в условиях. Узнать тип помогает функция type(), а поменять — int(), float() и str(). В конце страницы — квиз из 8 вопросов.

Загружаем…

Что такое тип данных

Тип данных — это вид значения, от которого зависят допустимые действия: число можно делить, строку — нет, зато строку можно перевернуть или разрезать на слова. 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")ValueErrorint() не читает точку
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].