Работа с числами в языке Python
Основные числовые типы в Python
Как представить целое или дробное число в Python?
Для целых чисел используется тип int, для чисел с плавающей точкой float. Они встроены в язык и поддерживают все арифметические операции.
x = 42
y = 3.14
print(type(x)) #
print(type(y)) #
Set str python (множество из строки в python)
Особенности: int неограничен по размеру, float имеет ограниченную точность (обычно 53 бита мантиссы). При выполнении операции, если один операнд float, результат float.
Типичная ошибка: ожидание точного результата для дробей в float. Например, 0.1 + 0.2 не равно 0.3.
print(0.1 + 0.2) # 0.30000000000000004Python переменная время (переменные для времени в python)
Решение: использовать модуль decimal или округление с помощью round().
Цели: базовые вычисления, где допустима небольшая погрешность.
Как работать с комплексными числами?
Тип complex представляет комплексные числа (действительная + мнимая части).
z = 3 + 4j
print(z.real, z.imag) # 3.0 4.0
print(z * z) # (7+24j)
Python типы данных время (типы данных для времени в python)
Ошибка: забыть суффикс j для мнимой части. Python воспримет 4j как число, а 4i вызовет ошибку.
Случаи: математические и инженерные расчёты, обработка сигналов.
Как получить точные десятичные дроби?
Модуль decimal.Decimal даёт десятичную арифметику с задаваемой точностью.
from decimal import Decimal, getcontext
getcontext().prec = 6
a = Decimal('0.1')
b = Decimal('0.2')
print(a + b) # 0.3
Python объект тип (тип объекта в python)
Ошибка: передача float в Decimal (например, Decimal(0.1)) приведёт к погрешности. Всегда используйте строку.
Цели: финансовые расчёты, где точность критична.
Как работать с рациональными дробями?
Модуль fractions.Fraction хранит числитель и знаменатель.
from fractions import Fraction
f = Fraction(3, 4)
print(f + Fraction(1, 2)) # 5/4
вещественные значения python (вещественные значения в python)
Ошибка: при создании Fraction из float может быть потеря точности, лучше использовать строку.
Случаи: точные дробные вычисления, например, в алгоритмах.
Как округлять числа и преобразовывать типы?
Функции int(), float(), round(), math.floor/ceil.
import math
print(int(3.99)) # 3 (отбрасывание дробной части)
print(round(3.14159, 2)) # 3.14
print(math.floor(3.99)) # 3
print(math.ceil(3.01)) # 4
вывести тип данных python (вывод типа данных в python)
Ошибка: round использует банковское округление (к чётному) для .5. Например, round(2.5)=2, round(3.5)=4.
print(round(2.5)) # 2 (неожиданно)Python двоичные данные (работа с двоичными данными в python)
Решение: использовать Decimal с округлением ROUND_HALF_UP.
Цели: приведение к нужному типу, форматирование вывода.
Как проверять тип числа и сравнивать float?
Функции isinstance, type, math.isclose.
print(isinstance(42, (int, float))) # True
print(math.isclose(0.1+0.2, 0.3)) # True с допуском
переменная int python какая переменная (переменная int в python - что это?)
Ошибка: сравнение float через == без допуска.
Цели: безопасное сравнение, полиморфизм.
Как использовать битовые операции с целыми?
int поддерживает побитовые операции &, |, ^, <<, >>.
x = 0b1100 # 12
y = 0b1010 # 10
print(x & y) # 8 (1000)
print(x << 1) # 24 (11000)
Ошибка: применение битовых операций к float вызывает TypeError.
Цели: флаги, работа с двоичными данными.
Продвинутые примеры работы с числами
Характеристики float через sys.float_info.
import sys
print(sys.float_info)
sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)
Бесконечность и NaN.
inf = float('inf')
nan = float('nan')
print(inf > 1000) # True
print(nan == nan) # False
True False
Модуль math: nextafter, copysign.
import math
x = 1.0
next_up = math.nextafter(x, float('inf'))
next_down = math.nextafter(x, float('-inf'))
print(next_up, next_down)
1.0000000000000002 0.9999999999999999
Использование Fraction с большими числами.
from fractions import Fraction
f1 = Fraction(2**100, 3**50)
f2 = Fraction(5, 9)
print(f1 * f2)
5070602400912917605986812821504/717897987691852588770249
Decimal с разной точностью и округлением.
from decimal import Decimal, getcontext, ROUND_HALF_UP
getcontext().prec = 10
d = Decimal('2.675')
print(d.quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)) # 2.68 (а не 2.67)
2.68
Преобразование строки в число с обработкой ошибок.
def parse_number(s):
try:
return int(s)
except ValueError:
try:
return float(s)
except ValueError:
raise ValueError('Не число')
print(parse_number('3.14'))
3.14
Битовые маски и флаги.
READ = 0b001
WRITE = 0b010
EXECUTE = 0b100
perm = READ | WRITE # 3
print(perm & READ) # 1 (True)
1
Использование math.fsum для точной суммы float.
import math
data = [0.1]*10
print(sum(data)) # 0.9999999999999999
print(math.fsum(data)) # 1.0
0.9999999999999999 1.0
Работа с комплексными числами: полярные координаты.
import cmath
z = 3 + 4j
r, phi = cmath.polar(z)
print(r, phi)
z1 = cmath.rect(r, phi)
print(z1)
5.0 0.9272952180016122 (3+4j)