Типы данных чисел в языке Python

Раздел: Типы данных -> Числовые типы данных

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

В Python для представления чисел используются три основных встроенных типа: int (целые числа), float (числа с плавающей точкой) и complex (комплексные числа). Каждый из них поддерживает стандартные арифметические операции и имеет свои особенности, связанные с точностью и диапазоном значений. Ниже рассмотрены различные варианты создания и работы с этими типами, а также типичные ошибки.

Как создать целое число (int) в Python?

Самый простой способ - присвоить переменной целое число без десятичной точки:

a = 42
b = -7
c = 0

Python типы переменных числа (типы переменных для чисел в python)

Переменные a, b и c автоматически получат тип int. В Python 3 целые числа имеют неограниченный диапазон (ограничен только памятью).

Другой вариант - использовать функцию int() для преобразования из строки или числа другого типа:

x = int('123')        # из строки
print(x)              # 123
print(type(x))        # <class 'int'>

y = int(3.14)         # отбрасывает дробную часть
print(y)              # 3

Если строка не является корректным представлением целого числа, возникает ошибка ValueError. Например, int('abc') вызовет исключение. Для безопасного преобразования рекомендуется использовать блок try-except.

Как создать число с плавающей запятой (float)?

Числа с плавающей точкой записываются с десятичной точкой или в экспоненциальной записи:

f1 = 3.14
f2 = 0.001
f3 = 1.5e-10     # 1.5 * 10^(-10)

Функция float() позволяет преобразовать строку или целое число в float:

g = float('2.718')
print(g)              # 2.718
h = float(5)
print(h)              # 5.0

Из-за двоичного представления некоторые десятичные дроби не могут быть точно сохранены. Например, 0.1 + 0.2 даёт 0.30000000000000004. Это не ошибка, а особенность типа float. Для критичных к точности вычислений используйте модуль decimal.

Как работать с комплексными числами (complex)?

Комплексное число записывается как X+Yj, где j - мнимая единица:

z1 = 2 + 3j
z2 = -1j

Можно использовать конструктор complex(real, imag) или преобразовать строку:

z3 = complex(4, -5)       # 4-5j
z4 = complex('1+2j')
print(z4)                 # (1+2j)

В Python мнимая единица обозначается буквой j, а не i как в математике. Строка для complex() не должна содержать пробелов вокруг знака +/-, иначе возникнет ValueError.

Как преобразовать строку в число и определить её тип?

Для преобразования используются функции int(), float(), complex(). Проверить тип можно с помощью type() или isinstance():

value = '42'
# прямое преобразование
num = int(value)
print(type(num))          # <class 'int'>
# проверка isinstance
print(isinstance(num, int))  # True

Для безопасного преобразования, особенно при вводе от пользователя, используют конструкцию try-except:

s = '123.45'
try:
    n = float(s)
    print('Успешно:', n)
except ValueError:
    print('Неверный формат числа')

Если передать пустую строку или строку с лишними символами, возникнет ValueError. Также int() не принимает строки с десятичной точкой - для этого сначала нужно преобразовать в float.

Как избежать ошибок точности при вычислениях с дробями?

Модуль decimal предоставляет тип Decimal для точных десятичных вычислений. Необходимо задать точность через контекст или передать число строкой:

from decimal import Decimal, getcontext
getcontext().prec = 28   # точность 28 знаков
d1 = Decimal('0.1')
d2 = Decimal('0.2')
print(d1 + d2)           # 0.3 (точно)

Модуль fractions позволяет работать с рациональными числами в виде дробей:

from fractions import Fraction
f = Fraction(1, 3)
print(f)                 # 1/3
print(float(f))          # 0.3333333333333333

Использование Decimal медленнее, чем встроенный float, и требует импорта. Fraction подходит только для рациональных чисел.

Как задать число в двоичной, восьмеричной или шестнадцатеричной системе?

Python поддерживает целочисленные литералы с префиксами: 0b (binary), 0o (octal), 0x (hex):

binary = 0b1010          # 10 в десятичной
octal = 0o12             # 10
hexa = 0x1A              # 26

Функция int() с указанием основания (от 2 до 36) позволяет преобразовать строку в число:

num = int('1010', 2)     # 10
num = int('0x1A', 16)    # 26 (префикс можно опустить)

Недопустимые символы (например, '2' в двоичной системе) вызывают ValueError. При использовании строки с префиксом основание должно соответствовать префиксу, иначе результат может быть неверным.

Расширенные примеры работы с числовыми типами

В этом разделе приведены более сложные и неочевидные примеры, демонстрирующие возможности числовых типов Python.

1. Целые числа произвольной длины

Python 3 поддерживает целые числа неограниченного размера. Это позволяет выполнять операции с числами, значительно превышающими стандартные 64 бита.

Пример
big_int = 123456789012345678901234567890
print(big_int * 2)  # умножение без переполнения
246913578024691357802469135780

2. Арифметика комплексных чисел

Комплексные числа поддерживают все стандартные операции и имеют атрибуты .real и .imag для получения действительной и мнимой частей.

Пример
a = 3 + 4j
b = 1 - 2j
print('Сумма:', a + b)
print('Произведение:', a * b)
print('Модуль:', abs(a))
print('Сопряжённое:', a.conjugate())
Сумма: (4+2j)
Произведение: (11-2j)
Модуль: 5.0
Сопряжённое: (3-4j)

3. Проверка равенства float с помощью math.isclose

Из-за погрешностей напрямую сравнивать float через == не рекомендуется. Вместо этого используют math.isclose:

Пример
import math
a = 0.1 + 0.2
b = 0.3
print(a == b)           # False
print(math.isclose(a, b, rel_tol=1e-9))  # True
False
True

4. Точные вычисления с Decimal

Модуль decimal позволяет контролировать точность и округление. Например, вычисление ежемесячного платежа по кредиту:

Пример
from decimal import Decimal, getcontext
getcontext().prec = 50
principal = Decimal('100000.00')
rate = Decimal('0.05') / Decimal('12')
payment = principal * rate / (Decimal('1') - (Decimal('1') + rate) ** (-12))
print('Ежемесячный платёж:', payment)
Ежемесячный платёж: 8560.7475...

5. Преобразование чисел в разные системы счисления

Для обратного преобразования числа в строку в заданной системе используются встроенные функции bin(), oct(), hex().

Пример
num = 255
print('Двоичная:', bin(num))
print('Восьмеричная:', oct(num))
print('Шестнадцатеричная:', hex(num))
Двоичная: 0b11111111
Восьмеричная: 0o377
Шестнадцатеричная: 0xff

6. Точные рациональные дроби с fractions.Fraction

Использование Fraction для точного представления дробей без округлений:

Пример
from fractions import Fraction
f1 = Fraction(2, 3)
f2 = Fraction(5, 7)
print('Сумма:', f1 + f2)
print('Произведение:', f1 * f2)
print('Деление:', f1 / f2)
Сумма: 29/21
Произведение: 10/21
Деление: 14/15

Типы переменных для чисел в Python - comments

En
Python типы переменных числа (python)