Работа с числовыми данными: функции и инструменты Python
Работа с числами: встроенные функции и модуль math
Для преобразования, округления и математических операций с числами в Python применяются как встроенные функции, так и функции модуля math. В этом разделе рассматриваются наиболее эффективные подходы, альтернативные варианты, типичные ошибки и способы их устранения.
Как получить точное округление числа с плавающей точкой?
Рекомендуемое решение: функция round() с указанием количества знаков после запятой.
number = 3.14159
rounded = round(number, 2)
print(rounded) # 3.14Python округление числа (округление числа в python)
Функция round() использует банковское округление (округление до ближайшего чётного). Для большинства финансовых задач это приемлемо, но для строгих требований следует применять decimal.Decimal.
Проблема: Округление чисел вида 2.675 не всегда даёт 2.68 из-за особенностей двоичного представления.
Решение: Использовать Decimal с заданным контекстом округления.
from decimal import Decimal, ROUND_HALF_UP
value = Decimal('2.675')
rounded = value.quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)
print(rounded) # 2.68Python корень числа (вычисление квадратного корня числа в python)
Как преобразовать строку в число и обработать ошибки?
Используются функции int() и float() с обработкой исключений.
user_input = "123.45"
try:
number = float(user_input)
print(number)
except ValueError:
print("Невозможно преобразовать строку в число")Python 3 степень числа (возведение числа в третью степень в python)
Типичная ошибка: Пустая строка или нечисловые символы вызывают ValueError.
Способ решения: Проверять строку через str.isdigit() (только для целых) или регулярные выражения.
Как вычислить модуль числа?
Для целых и вещественных чисел применяется встроенная функция abs().
print(abs(-7)) # 7
print(abs(-3.5)) # 3.5Python sqrt (функция sqrt)
Вариант из модуля math:
import math
print(math.fabs(-3.5)) # 3.5функции чисел python (функции для работы с числами в python)
Разница: abs() возвращает целое число для целых, а math.fabs() всегда возвращает float.
Как получить сумму элементов и произведение?
sum() - встроенная функция для суммирования итерируемых объектов. Для произведения используется math.prod() (Python 3.8+).
numbers = [1, 2, 3, 4]
print(sum(numbers)) # 10
import math
print(math.prod(numbers)) # 24
Без math.prod() можно применить цикл или functools.reduce.
Ошибка: Передача пустого списка в sum() даёт 0, а math.prod() - 1 (нейтральные элементы).
Как проверить, является ли число целым?
Метод float.is_integer() для вещественных чисел.
print((3.0).is_integer()) # True
print((3.5).is_integer()) # False
Для целочисленных объектов проверка не требуется - они всегда целые. Альтернатива: сравнение с округлением math.floor(x) == x.
Как получить целое частное и остаток?
Встроенная функция divmod() возвращает пару (частное, остаток).
q, r = divmod(17, 5)
print(q) # 3
print(r) # 2
Эквивалентно q = a // b и r = a % b. Для вещественных чисел divmod() тоже работает.
Как возвести число в степень или извлечь корень?
Возведение в степень: оператор ** или функция pow(). Для корня часто используют math.sqrt() или возведение в степень 0.5.
import math
print(2 ** 10) # 1024
print(pow(2, 10)) # 1024
print(math.sqrt(25)) # 5.0
print(25 ** 0.5) # 5.0
Трёхаргументный pow(a, b, mod) эффективнее для модульной экспоненты.
Расширенные примеры работы с числами
Округление вверх и вниз (ceil, floor)
import math
number = 3.7
print(math.ceil(number)) # 4
print(math.floor(number)) # 3
print(math.trunc(number)) # 3 (отбрасывание дробной части)
4 3 3
Факториал числа
import math
print(math.factorial(5)) # 120
print(math.factorial(0)) # 1
120 1
Примечание:
math.factorial() работает только для неотрицательных целых чисел. Для больших чисел (n > 170) может возникнуть переполнение памяти.
Наибольший общий делитель (gcd)
import math
print(math.gcd(48, 18)) # 6
print(math.gcd(0, 12)) # 12
print(math.gcd(7, 13)) # 1
6 12 1
Наименьшее и наибольшее число (min, max)
numbers = [5, 3, 9, 1]
print(min(numbers)) # 1
print(max(numbers)) # 9
# С ключом
strings = ['яблоко', 'груша', 'ананас']
print(max(strings, key=len)) # 'яблоко' (длина 6)
1 9 яблоко
Преобразование числа в двоичную, восьмеричную и шестнадцатеричную системы
number = 42
print(bin(number)) # 0b101010
print(oct(number)) # 0o52
print(hex(number)) # 0x2a
# Обратное преобразование
print(int('101010', 2)) # 42
print(int('52', 8)) # 42
print(int('2a', 16)) # 42
0b101010 0o52 0x2a 42 42 42
Логарифмы и экспонента
import math
print(math.log(100, 10)) # 2.0 (логарифм по основанию 10)
print(math.log(100)) # 4.605170185988092 (натуральный логарифм)
print(math.log2(256)) # 8.0
print(math.log10(1000)) # 3.0
print(math.exp(1)) # 2.718281828459045
2.0 4.605170185988092 8.0 3.0 2.718281828459045
Тригонометрические функции
import math
angle = math.pi / 4 # 45 градусов
print(math.sin(angle)) # 0.7071067811865476
print(math.cos(angle)) # 0.7071067811865476
print(math.tan(angle)) # 1.0
# Обратные функции
print(math.asin(0.7071067811865476)) # 0.7853981633974483 (π/4)
# Гиперболические
print(math.sinh(1)) # 1.1752011936438014
0.7071067811865476 0.7071067811865476 1.0 0.7853981633974483 1.1752011936438014
Работа с комплексными числами
c = 3 + 4j
print(abs(c)) # 5.0 (модуль)
print(c.real) # 3.0
print(c.imag) # 4.0
print(c.conjugate()) # (3-4j)
# Модуль cmath для комплексных функций
import cmath
print(cmath.phase(c)) # 0.9272952180016122 (фаза в радианах)
5.0 3.0 4.0 (3-4j) 0.9272952180016122
Случайные числа из модуля random
import random
# Случайное целое от 1 до 10
print(random.randint(1, 10))
# Случайное вещественное от 0 до 1
print(random.random())
# Выбор случайного элемента из списка
items = ['a', 'b', 'c']
print(random.choice(items))
# Перемешивание списка
random.shuffle(items)
print(items)
(пример вывода) 7 0.3745401188473625 b ['c', 'a', 'b']