Типы чисел в языке Python
Числовые объекты в Python
Python предоставляет три основных встроенных числовых типа: int (целые числа), float (числа с плавающей точкой) и complex (комплексные числа). Все они являются неизменяемыми объектами, поэтому любая операция создает новый объект. Ниже рассмотрены базовые принципы, различные варианты использования и типичные ошибки.
Базовые принципы работы с числами
Числа создаются простым присваиванием. Тип определяется динамически на основе литерала. Основные арифметические операторы: +, -, *, /, // (целочисленное деление), % (остаток), ** (возведение в степень).
a = 42 # int
b = 3.14 # float
c = 1 + 2j # complex
sum_val = a + b # float (автоматическое приведение)
quotient = a // 5 # целочисленное деление
remainder = a % 5 # остаток
power = b ** 2 # возведение в степень
Set str python (множество из строки в python)
sum_val: 45.14 (тип float) quotient: 8 remainder: 2 power: 9.8596 (тип float)
Python переменная время (переменные для времени в python)
Для явного преобразования между типами используются функции int(), float() и complex(). Важно помнить, что числа неизменяемы: операция a = a + 1 создает новый объект, а не изменяет старый.
Как преобразовать строку в число?
Используйте функции int() и float(). При неверном формате возникает ValueError.
s1 = "123"
s2 = "45.67"
s3 = "abc"
num1 = int(s1)
num2 = float(s2)
# num3 = int(s3) # ValueError
Python типы данных время (типы данных для времени в python)
num1: 123 (int) num2: 45.67 (float) Ошибка при попытке преобразовать "abc"
Python объект тип (тип объекта в python)
Для безопасного преобразования используйте try/except.
def safe_int(s):
try:
return int(s)
except ValueError:
return None
вещественные значения python (вещественные значения в python)
Как выполнить арифметические операции с разными типами?
Python автоматически приводит операнды к более общему типу: int + float -> float, int + complex -> complex, float + complex -> complex. Целочисленное деление // всегда возвращает int, а % дает остаток.
print(10 + 2.5) # 12.5
print(3 * (1 + 2j)) # (3+6j)
print(10 // 3) # 3
print(10 % 3) # 1
вывести тип данных python (вывод типа данных в python)
Как округлить число?
Встроенная функция round() округляет до заданного числа знаков (по умолчанию до целого). При округлении чисел с плавающей точкой может применяться банковское округление (округление до ближайшего четного). Для точных денежных расчетов лучше использовать модуль decimal.
print(round(3.14159, 2)) # 3.14
print(round(2.675, 2)) # 2.67 (не 2.68! из-за представления float)
Python двоичные данные (работа с двоичными данными в python)
3.14 2.67
переменная int python какая переменная (переменная int в python - что это?)
Для математического округления вверх/вниз используйте math.floor() и math.ceil().
Как проверить тип числа?
Используйте isinstance() или type(). isinstance() предпочтительнее, так как учитывает наследование.
x = 10
print(isinstance(x, int)) # True
print(isinstance(x, float)) # False
print(type(x) == int) # True
комплексные числа в python (комплексные числа в python)
Как работать с комплексными числами?
Комплексное число создается литералом вида a + bj (мнимая часть обозначается j). Доступны атрибуты real и imag, а также метод conjugate().
z = 3 + 4j
print(z.real) # 3.0
print(z.imag) # 4.0
print(z.conjugate()) # (3-4j)
логические значения python (логические значения в python)
Как представить число в двоичном, восьмеричном или шестнадцатеричном виде?
Функции bin(), oct(), hex() возвращают строку с соответствующим префиксом. Обратное преобразование – int() с указанием основания.
print(bin(10)) # 0b1010
print(oct(10)) # 0o12
print(hex(255)) # 0xff
print(int('0xff', 16)) # 255
длина переменной python (длина числа и переменной в python)
Типичные ошибки и их решения
ValueError при преобразовании строки
Строка содержит символы, недопустимые для числового формата. Решение: использовать try/except или предварительно проверять строку.
TypeError: unsupported operand type(s)
Попытка выполнить операцию между числом и строкой или другим несовместимым типом. Пример: "a" + 1. Решение: явно преобразуйте операнды.
Потеря точности float при сравнении
Из-за двоичного представления числа с плавающей точкой могут быть неточными. Сравнение 0.1 + 0.2 == 0.3 даст False. Решение: использовать math.isclose() или модуль decimal.
import math
print(math.isclose(0.1 + 0.2, 0.3)) # True
определение объекта python (определение типа объекта в python)
ZeroDivisionError при делении на ноль
Деление целого или float на ноль вызывает ошибку. Решение: проверять делитель перед операцией.
def safe_divide(a, b):
if b == 0:
return float('inf') # или None, или вернуть 0
return a / b
определение типа данных python (определение типов данных в python)
Некорректное округление с round()
Из-за особенностей представления float round(2.675, 2) возвращает 2.67 вместо 2.68. Решение: использовать decimal.Decimal с точностью или округление через quantize().
from decimal import Decimal, ROUND_HALF_UP
print(Decimal('2.675').quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)) # 2.68
Расширенные примеры работы с числовыми объектами
Пример 1: Работа с большими целыми числами (длинная арифметика)
В Python тип int не имеет ограничения по разрядности, что позволяет выполнять точные вычисления с большими числами.
a = 2 ** 1000
print(a)
10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
Длинная арифметика полезна в криптографии, научных расчетах и алгоритмах с большими числами.
Пример 2: Методы float
Тип float содержит полезные методы: as_integer_ratio() возвращает кортеж из двух целых (числитель и знаменатель), is_integer() проверяет, является ли число целым, hex() и fromhex() для работы с шестнадцатеричным представлением IEEE 754.
x = 0.75
print(x.as_integer_ratio()) # (3, 4)
print(x.is_integer()) # False
print(x.hex()) # 0x1.8000000000000p-1
(3, 4) False 0x1.8000000000000p-1
Метод fromhex() создает float из строки шестнадцатеричного представления.
print(float.fromhex('0x1.8p-1')) # 0.75
Пример 3: Комплексные числа в полярной форме
Модуль cmath предоставляет функции для работы с полярными координатами: polar() (модуль и фаза) и rect() (прямоугольная форма).
import cmath
z = 1 + 1j
r, phi = cmath.polar(z)
print(f"Модуль: {r}, фаза: {phi}") # Модуль: 1.4142135623730951, фаза: 0.7853981633974483
# Обратное преобразование
z2 = cmath.rect(r, phi)
print(z2) # (1.0000000000000002+1j)
Пример 4: Точные вычисления с модулем decimal
Модуль decimal позволяет работать с числами с плавающей точкой с заданной точностью, избегая ошибок представления binary float.
from decimal import Decimal, getcontext
getcontext().prec = 28 # установка точности
a = Decimal('0.1')
b = Decimal('0.2')
print(a + b) # 0.3 (точно)
print(Decimal(1) / Decimal(3)) # 0.3333333333333333333333333333
0.3 0.3333333333333333333333333333
Decimal особенно полезен для финансовых расчетов, где требуется строгое округление.
Пример 5: Рациональные числа с модулем fractions
Модуль fractions реализует рациональные числа (дроби) с точными арифметическими операциями.
from fractions import Fraction
frac1 = Fraction(1, 3)
frac2 = Fraction(2, 5)
sum_frac = frac1 + frac2
print(sum_frac) # 11/15
print(float(sum_frac)) # 0.7333333333333333
Рациональные числа полезны при решении задач, требующих точного представления дробей (комбинаторика, математический анализ).
Пример 6: Битовые операции над целыми числами
Целые числа поддерживают битовые операторы: & (И), | (ИЛИ), ^ (исключающее ИЛИ), << (сдвиг влево), >> (сдвиг вправо), ~ (инверсия).
a = 0b1100 # 12
b = 0b1010 # 10
print(bin(a & b)) # 0b1000 (8)
print(bin(a | b)) # 0b1110 (14)
print(bin(a ^ b)) # 0b0110 (6)
print(bin(a << 2)) # 0b110000 (48)
print(bin(a >> 2)) # 0b0011 (3)
0b1000 0b1110 0b110 0b110000 0b11
Битовые операции часто используются в системном программировании, работе с флагами и шифровании.
Пример 7: Округление с Decimal и контекстом
Метод quantize() модуля Decimal позволяет гибко настраивать округление. Ниже приведен пример с ROUND_HALF_UP (математическое округление).
from decimal import Decimal, ROUND_HALF_UP, ROUND_DOWN
val = Decimal('2.675')
print(val.quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)) # 2.68
print(val.quantize(Decimal('0.01'), rounding=ROUND_DOWN)) # 2.67
2.68 2.67
Это решает проблему неожиданного округления, присущую round() для float.
Пример 8: Преобразование чисел в разные системы счисления и обратно
Функции bin(), oct(), hex() возвращают строки с префиксами. int() со вторым аргументом выполняет обратное преобразование из любой системы счисления.
num = 255
print(bin(num)) # 0b11111111
print(oct(num)) # 0o377
print(hex(num)) # 0xff
# Обратно
print(int('0b11111111', 2)) # 255
print(int('0o377', 8)) # 255
print(int('0xff', 16)) # 255
Также можно использовать пользовательские системы, например, основание 5:
print(int('11111', 5)) # 1*5^4 + 1*5^3 + ... = 781
781