Числовые типы данных в Python

Python предоставляет различные типы для работы с числами, что делает его мощным инструментом для математических вычислений. В этой статье мы подробно рассмотрим числовые типы данных и операции, которые можно с ними выполнять.

Основные числовые типы

В Python два основных числовых типа:

  • Целые числа (int) — числа без дробной части
  • Числа с плавающей точкой (float) — числа с дробной частью

Есть ещё complex для мнимых чисел, в обычной разработке практически не встречается.

Целые числа (int)

Целые числа (тип int) представляют числа без дробной части:

Python 3.13
# Положительные и отрицательные целые числа
positive = 42
negative = -73
zero = 0

big_number = 1234567890123456789012345678901234567890

# Подчёркивание-разделитель для удобства чтения больших чисел
million = 1_000_000  # То же самое, что 1000000

В отличие от многих других языков, в Python целые числа имеют неограниченную точность: они могут быть сколь угодно большими, ограничены только доступной памятью.

Числа с плавающей точкой (float)

Числа с плавающей точкой (тип float) представляют действительные числа с дробной частью:

Python 3.13
price = 19.99
pi_approx = 3.14159
negative_float = -0.5

Главное, что нужно знать про float: их точность ограничена, и в простых на вид вычислениях вылезают погрешности:

Python 3.13
result = 0.1 + 0.2
print(result)
0.30000000000000004

Это не баг Python, а особенность хранения дробных чисел в двоичном представлении: некоторые десятичные дроби в нём не представимы точно. Для финансовых вычислений и других задач, где точность критична, используют модуль decimal.

По той же причине не сравнивайте float через == напрямую — две казалось бы равные дроби могут отличаться в последнем знаке:

Python 3.13
print(0.1 + 0.2 == 0.3)
False

Если нужно сравнение с допуском, используйте math.isclose(a, b):

Python 3.13
import math
print(math.isclose(0.1 + 0.2, 0.3))
True

Арифметические операции

Python поддерживает все стандартные арифметические операции:

Python 3.13
a = 10
b = 3

# Сложение, вычитание, умножение
a + b   # 13
a - b   # 7
a * b   # 30

# Деление — всегда возвращает float
a / b   # 3.3333333333333335

# Целочисленное деление — возвращает int (отбрасывает дробь)
a // b  # 3

# Остаток от деления
a % b   # 1

# Возведение в степень
a ** b  # 1000

Смешанные типы

Если в выражении есть и int, и float, результат всегда будет float:

Python 3.13
5 + 3.14    # 8.14 (float)
10 * 2.0    # 20.0 (float)
4 ** 0.5    # 2.0  (float)

Округление

Python даёт несколько способов округлить число:

Python 3.13
# Округление до ближайшего целого
round(3.14159)      # 3

# Округление до указанного количества знаков после запятой
round(3.14159, 2)   # 3.14

import math

# Округление вниз (к меньшему целому)
math.floor(3.99)    # 3

# Округление вверх (к большему целому)
math.ceil(3.01)     # 4

# Отбрасывание дробной части
math.trunc(3.99)    # 3

Тонкость: round и округление к чётному

При попадании значения ровно посередине (например, 0.5 или 2.5) Python округляет не к большему, а к ближайшему чётному. Это называется банковским округлением (banker's rounding) и сделано для уменьшения статистической ошибки при больших объёмах округлений:

Python 3.13
print(round(0.5))   # ожидаем 1
0
print(round(1.5))
2
print(round(2.5))   # ожидаем 3
2
print(round(3.5))
4

Если нужно «школьное» округление (0.5 всегда вверх), пишите свою функцию или используйте decimal с явно заданным режимом.

Математические функции

Модуль math даёт полезные функции — sqrt (квадратный корень), константы pi и e:

Python 3.13
import math

math.sqrt(16)   # 4.0
math.pi         # 3.141592653589793
math.e          # 2.718281828459045

Там же лежат тригонометрия, логарифмы, факториал и много чего ещё — полный список в документации модуля math.

Встроенные функции для чисел

Часть числовых функций встроена прямо в Python, без import:

Python 3.13
# Абсолютное значение
abs(-10)              # 10

# Максимум и минимум
max(1, 5, 3, 9, 2)    # 9
min(1, 5, 3, 9, 2)    # 1

# Сумма последовательности
sum([1, 2, 3, 4, 5])  # 15

# Преобразование других типов в числовые
int("42")             # 42
float("3.14")         # 3.14

Задания для самопроверки

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

Что нового в задании: системная строка чтения ввода и плейсхолдеры в print

Первая строка a, b = map(int, input().split()) — это системная часть, которая читает входные данные из теста. После её выполнения в переменных a и b оказываются два числа, с которыми нужно работать в задаче. В большинстве следующих заданий она будет в начале. Что именно делают map, input и split, разберём позже; пока её можно просто оставить как есть.

Строки с print('...') теперь содержат тексты-плейсхолдеры. Их нужно заменить на реальные выражения: например, print('результат целочисленного деления') превращается в print(a // b).

В результатах теперь видно, с каким вводом запускался каждый тест

В результатах теперь видно поле «Входные данные» — там показывают, с каким вводом запускался конкретный тест. Тестов может быть несколько, и все они должны пройти.