Числа, преобразование типов и математика в Python: полное руководство
Числа, преобразование типов и математика в Python
Узнайте, как Python обрабатывает числовые данные, нюансы преобразования типов и мощные математические утилиты для повседневного программирования.
Числовые типы данных в Python
Python разделяет числа на три основных типа: int для целых чисел, float для вещественных чисел с дробной частью и complex для чисел с реальной и мнимой частями. Наличие десятичной точки отличает int от float (например, 5 — целое, 5.0 — float). Комплексные числа записываются как x + yj, где x — реальная часть, y — мнимая.
Используйте type() для проверки класса значения и isinstance() для проверки принадлежности к типу. Пример:
a = 5
print(type(a))
print(type(5.0))
c = 5 + 3j
print(c + 3)
print(isinstance(c, complex))
Вывод:
<class 'int'> <class 'float'> (8+3j) True
Целые числа в Python имеют неограниченную точность; float сохраняет около 15 значащих цифр. Для работы с двоичной, шестнадцатеричной и восьмеричной системами Python предоставляет удобные префиксы:
| Система счисления | Префикс |
|---|---|
| Двоичная | 0b или 0B |
| Восьмеричная | 0o или 0O |
| Шестнадцатеричная | 0x или 0X |
Примеры:
# Вывод: 107
print(0b1101011)
# Вывод: 253 (251 + 2)
print(0xFB + 0b10)
# Вывод: 13
print(0o15)
Результат:
107 253 13
Преобразование типов (приведение)
Python автоматически повышает целые к float при арифметике с участием float. Например:
>>> 1 + 2.0
3.0
Явные преобразования так же просты с int(), float() и complex(), которые также парсят строки:
>>> int(2.3)
2
>>> int(-2.8)
-2
>>> float(5)
5.0
>>> complex('3+5j')
(3+5j)
При преобразовании float в int Python отбрасывает дробную часть, не округляя.
Модуль decimal для точных вычислений
Арифметика с плавающей точкой может давать неожиданные результаты из-за ограничений двоичного представления. Например:
>>> (1.1 + 2.2) == 3.3
False
Числа вроде 0.1 не могут быть точно представлены в двоичной системе, что приводит к небольшим ошибкам округления. Модуль decimal решает это, предоставляя десятичную арифметику с произвольной точностью:
import decimal
print(0.1)
print(decimal.Decimal(0.1))
Вывод:
0.1 0.1000000000000000055511151231257827021181583404541015625
Использование Decimal сохраняет значащие цифры и точное десятичное представление, что критично для финансовых расчётов:
from decimal import Decimal as D
print(D('1.1') + D('2.2'))
print(D('1.2') * D('2.50'))
Вывод:
3.3 3.000
Так как операции с Decimal медленнее, чем с бинарными float, используйте их только там, где нужна точная точность: денежные значения, настраиваемая точность или контроль значащих цифр.
Когда использовать Decimal вместо float?
- Финансовые приложения, требующие точное десятичное представление.
- Сценарии, где точность должна быть явно контролируемой.
- Приложения, требующие понятие значащих десятичных разрядов.
Модуль fractions для рациональных чисел
Модуль fractions поддерживает рациональные числа, позволяя выполнять точную арифметику с числителем и знаменателем как целыми числами:
import fractions
print(fractions.Fraction(1.5))
print(fractions.Fraction(5))
print(fractions.Fraction(1,3))
Вывод:
3/2 5 1/3
Создание Fraction из float может давать неинтуитивные результаты из-за двоичного округления, поэтому для десятичных чисел лучше использовать строки:
import fractions
# Из float
print(fractions.Fraction(1.1))
# Из строки
print(fractions.Fraction('1.1'))
Вывод:
2476979795053773/2251799813685248 11/10
Дробь поддерживает все арифметические операторы:
from fractions import Fraction as F
print(F(1, 3) + F(1, 3))
print(1 / F(5, 6))
print(F(-3, 10) > 0)
print(F(-3, 10) < 0)
Вывод:
2/3 6/5 False True
Математические модули Python
Модуль math предоставляет функции для тригонометрии, логарифмов, факториалов и др.:
import math
print(math.pi)
print(math.cos(math.pi))
print(math.exp(10))
print(math.log10(1000))
print(math.sinh(1))
print(math.factorial(6))
Вывод:
3.141592653589793 -1.0 22026.465794806718 3.0 1.1752011936438014 720
Для случайности и выборки модуль random предлагает:
import random
print(random.randrange(10, 20))
x = ['a', 'b', 'c', 'd', 'e']
print(random.choice(x))
random.shuffle(x)
print(x)
print(random.random())
Пример вывода (значения варьируются):
18 e ['c', 'e', 'd', 'b', 'a'] 0.5682821194654443
Оба модуля имеют подробную документацию со списком всех функций и атрибутов.
Python
- Освоение преобразования типов в C#: неявное, явное, Parse и Convert
- Ключевые слова и идентификаторы в Python: мастерство зарезервированных слов и соглашений об именовании
- Операторы, отступы и комментарии в Python: понятное руководство
- Переменные, константы и литералы в Python — подробное руководство
- Мастерство преобразования типов в Python: Полное руководство
- Мастерство ввода-вывода и импорта модулей в Python: Практическое руководство
- Глобальные, локальные и nonlocal переменные в Python: понимание и применение
- Управление директориями и файлами в Python: полное руководство
- Ошибки и встроенные исключения в Python: полное руководство
- Получение текущей даты и времени в Python: практическое руководство