Числа: int и float, арифметика
Числа: int и float, арифметика
В прошлом уроке вы узнали, как хранить данные в переменных. Теперь разберёмся с числами — одним из самых фундаментальных типов данных в любом языке программирования. В Python числа бывают двух основных видов: целые (int) и дробные (float).
Целые числа: int
Целые числа (int, от integer) — это числа без дробной части: 0, 5, -42, 1_000_000. В Python целые числа могут быть сколь угодно большими — ограничений по размеру нет (в отличие от большинства других языков, где есть границы вроде ±2 147 483 647).
year = 2025
temperature = -15
big_number = 999_999_999_999 # миллиард - без ограничений
print(type(year)) # <class 'int'>
Дробные числа: float
Числа с дробной частью называются float (от floating point — «плавающая точка»). Для разделения целой и дробной части используется точка, не запятая:
pi = 3.14159
price = 99.99
negative = -0.001
print(type(pi)) # <class 'float'>
Обратите внимание: 1.0 — это float, а 1 — это int, даже несмотря на то что математически это одно число. Тип определяется наличием точки.
Для очень больших или очень маленьких чисел Python использует научную нотацию:
avogadro = 6.022e23 # 6.022 × 10^23
electron = 9.11e-31 # 9.11 × 10^-31
print(avogadro) # 6.022e+23
Арифметические операторы
Python поддерживает все стандартные арифметические операции. Вот полный список:
| Оператор | Операция | Пример | Результат |
|---|---|---|---|
+ | сложение | 3 + 2 | 5 |
- | вычитание | 10 - 4 | 6 |
* | умножение | 3 * 4 | 12 |
/ | деление | 7 / 2 | 3.5 |
// | целочисленное деление | 7 // 2 | 3 |
% | остаток от деления | 7 % 2 | 1 |
** | возведение в степень | 2 ** 10 | 1024 |
Важный момент: оператор / в Python всегда возвращает float, даже если оба числа целые и результат целый:
print(10 / 2) # 5.0 (не 5!)
print(7 / 2) # 3.5
print(10 // 2) # 5 (int — целочисленное деление)
print(7 // 2) # 3 (дробная часть отбрасывается)
print(7 % 2) # 1 (остаток)
Операторы // и % очень полезны на практике. Например, % позволяет проверить чётность числа: если n % 2 == 0 — число чётное.
Приоритет операций
Python вычисляет выражения по тем же правилам, что и математика: сначала возведение в степень, потом умножение и деление, потом сложение и вычитание. Операции одного приоритета выполняются слева направо.
result = 2 + 3 * 4 # 14, не 20: сначала 3*4=12, потом 2+12
result2 = (2 + 3) * 4 # 20: скобки повышают приоритет
result3 = 2 ** 3 ** 2 # 512: ** правоассоциативен, 3**2=9, 2**9=512
Когда сомневаетесь — ставьте скобки. Это не только убирает неоднозначность, но и делает код понятнее.
Смешивание int и float
Когда в выражении участвуют int и float, результат всегда будет float. Python «продвигает» тип к более общему:
print(3 + 1.5) # 4.5 (float)
print(10 * 2.0) # 20.0 (float)
print(5 - 5.0) # 0.0 (float, несмотря на нулевой результат)
Это называется неявным приведением типов (implicit type coercion). Вы не просите Python переконвертировать — он делает это автоматически, чтобы не потерять дробную часть.
Встроенные функции для чисел
Python предоставляет несколько полезных встроенных функций для работы с числами:
print(abs(-42)) # 42 — модуль числа
print(round(3.7)) # 4 — округление до ближайшего целого
print(round(3.14159, 2)) # 3.14 — округление до N знаков после точки
print(max(1, 5, 3)) # 5 — максимум из аргументов
print(min(1, 5, 3)) # 1 — минимум из аргументов
round() в Python использует «банковское округление»: при точной середине (.5) округление идёт к ближайшему чётному числу. Поэтому round(0.5) = 0, а round(1.5) = 2. Это может удивить, но это соответствует стандарту IEEE 754.
Ограничения float: проблема точности
Дробные числа хранятся в памяти в двоичном виде. Многие десятичные дроби не имеют точного двоичного представления — отсюда небольшие погрешности:
print(0.1 + 0.2) # 0.30000000000000004, не 0.3!
print(0.1 + 0.2 == 0.3) # False
Это не баг Python — это особенность хранения чисел с плавающей точкой во всех языках. На практике для финансовых расчётов используют модуль decimal из стандартной библиотеки (мы познакомимся с импортом модулей позже). Для большинства задач (науки, игры, обработка данных) погрешность несущественна.
Полезные выражения
Рассмотрим несколько типичных задач с числами:
total = 1500
discount = 0.1
final_price = total * (1 - discount) # 1350.0
minutes = 135
hours = minutes // 60 # 2
remaining = minutes % 60 # 15
print(f"Это {hours} ч {remaining} мин")
Проверь себя
Что выведет следующий код?
x = 17
print(x // 5)
print(x % 5)
17 // 5 — это 3 (целочисленное деление, 5 входит в 17 три раза), а 17 % 5 — это 2 (остаток: 17 - 15 = 2).
Итог
int— целые числа без ограничения по размеру;float— числа с дробной частью.- Наличие точки в записи числа определяет тип:
1→int,1.0→float. - Оператор
/всегда возвращаетfloat;//— целочисленное деление;%— остаток. - При смешивании
intиfloatрезультат всегдаfloat. round(),abs(),min(),max()— полезные встроенные функции для чисел.- Дробные числа имеют ограниченную точность:
0.1 + 0.2 ≠ 0.3в точности.
В следующем уроке переходим к строкам — ещё одному ключевому типу данных Python — и познакомимся с удобным способом форматирования текста через f-строки.