Скидка до 60% и курс в подарок 2 дня 09 :56 :09 Выбрать курс
Код
#статьи

Модуль math в Python: что это такое и как его использовать

Корни, логарифмы, степени, математические константы и многое другое.

Иллюстрация: Polina Vari для Skillbox Media

При решении математических задач в Python стандартных арифметических операций — сложения, вычитания, умножения, деления и возведения в степень — не всегда достаточно. Для более сложных вычислений используют модуль math. В нём собраны готовые математические функции: вычисление логарифмов, извлечение корня, тригонометрические операции, округление и многие другие.

В этой статье мы разберём, как подключить модуль math, какие функции он содержит и в каких случаях они пригодятся.


Что такое модуль math в Python и зачем он нужен

Модуль math — это стандартный модуль Python, в который входит более 40 математических функций и важные константы: число π, основание натурального логарифма e, бесконечность и так далее. Он реализован на языке C, поэтому работает быстрее, чем аналогичные вычисления, написанные на чистом Python.

С помощью math можно:

  • извлекать квадратные и другие корни;
  • вычислять логарифмы — натуральные, десятичные и по произвольному основанию;
  • возводить числа в степень, в том числе с дробными показателями;
  • округлять числа вверх, вниз или до ближайшего чётного;
  • выполнять тригонометрические и гиперболические вычисления;
  • переводить углы из градусов в радианы и обратно;
  • использовать математические константы, такие как pi, e и tau;
  • выполнять точные вычисления с плавающей запятой и работать с очень большими или очень маленькими числами.

Кроме того, модуль включает функции для целочисленной арифметики: вычисления факториала, наибольшего общего делителя, наименьшего общего кратного, количества перестановок и сочетаний и других математических операций.

Ограничения math

Модуль math предназначен для выполнения базовых математических вычислений. Для большинства повседневных задач его возможностей достаточно, однако для научных расчётов, анализа данных и работы с большими объёмами числовой информации этого набора функций уже не хватает.

С помощью math нельзя:

  • выполнять операции с массивами, векторами и матрицами;
  • рассчитывать статистические показатели, такие как медиана, дисперсия, корреляция и другие;
  • решать задачи оптимизации и поиска минимумов или максимумов;
  • работать с комплексными числами.

Для таких задач используют специализированные библиотеки:

  • NumPy — для работы с многомерными массивами, матричной алгеброй и высокопроизводительными числовыми вычислениями;
  • SciPy — для научных вычислений, включая оптимизацию, интегрирование, статистику, обработку сигналов и другие сложные математические задачи.

Поэтому модуль math обычно используют для стандартных математических вычислений, а при работе с массивами, анализе данных и инженерных расчётах дополняют его библиотеками NumPy и SciPy.

Как подключить модуль math

Модуль math входит в стандартную библиотеку Python, поэтому для его использования не требуется дополнительной установки — достаточно выполнить импорт. Рассмотрим основные способы подключения модуля.

Стандартный способ импорта

Самый простой способ — прямой импорт:

import math

После этого все функции и константы модуля становятся доступными через префикс math. Сделаем несколько простых расчётов:

import math

print(math.sqrt(25))        # 5.0
print(math.pi)              # 3.141592653589793
print(math.factorial(5))    # 120

Другие способы импорта

Импорт конкретных функций. Если вам нужна только одна или несколько функций из модуля, можно импортировать их напрямую, перечислив через запятую:

from math import sqrt, pi

В этом случае функции вызываются без префикса math:

print(sqrt(49))   # 7.0
print(pi)         # 3.141592653589793

Этот способ удобен, когда конкретная функция используется часто и её имя не пересекается с другими объектами в коде. Но если вы случайно создадите переменную с именем sqrt или pi, то она перекроет импортированную функцию, и это приведёт к ошибкам. Например:

from math import sqrt, pi
pi = 15
sqrt = 60

print(pi) # 15
print(sqrt(49))  # TypeError: 'int' object is not callable

В этом примере функция sqrt не работает, так как мы создали переменную с таким именем.

Импорт всего содержимого модуля. Синтаксис from math import * загружает все функции и переменные из модуля. После этого их можно вызывать без префикса math:

from math import *

print(sin(0))       # 0.0
print(log(10))      # 2.302585092994046

Однако использовать конструкцию from math import * не рекомендуется. Такой способ импорта считается плохой практикой, поскольку может привести к конфликтам имён: если в программе есть функции с одинаковыми названиями из разных модулей, станет непонятно, какая из них вызывается.

Математические константы в math

Модуль math содержит набор математических констант с высокой точностью. Их не нужно задавать вручную — достаточно импортировать модуль и использовать готовые значения в вычислениях.

Число π (пи)

Константа math.pi содержит значение числа π — 3,141592653589793. Оно используется в вычислениях, связанных с окружностями, тригонометрическими функциями, геометрией и другими расчётами.

Например, с помощью числа пи можно перевести градусы в радианы:

import math

degrees = 180
radians = degrees * math.pi / 180
print(f"{degrees}° = {radians} рад")         # 180° = 3.141592653589793 рад

Число e (основание натурального логарифма)

Константа math.e — число Эйлера, равное 2,718281828459045. Это фундаментальная константа, которая используется в экспоненциальных и логарифмических функциях, теории вероятностей, финансовой математике и физике.

Например, вычислим для числа экспоненту и натуральный логарифм с помощью math.e:

import math

# Вычисление экспоненты (e^2) через math.e
same_value = math.e ** 2       
print(f"e^2 = {exp_of_2}")      # 7.38905609893065

# Натуральный логарифм: ln(e^3) = 3
print(math.log(math.e ** 3))    # 3.0

Другие полезные константы

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

  • math.tau — равен 2π (≈ 6,283185307179586). Иногда удобнее использовать вместо π, особенно в задачах, связанных с углами в радианах.
  • math.inf — положительная бесконечность, используется для обозначения очень больших значений или отсутствия верхней границы.
  • math.nan — значение «не число» (Not a Number), применяется при некорректных или неопределённых результатах вычислений.
import math

# tau = 2π: один полный оборот в радианах
print(math.tau / 2 == math.pi)   # True

# Здесь мы проверили то, что math.tau ровно в два раза больше math.pi

Функции округления и определения модуля

При обработке числовых данных часто требуется округлить значение до ближайшего целого, отбросить дробную часть или получить модуль числа. В модуле math для этого есть несколько функций. Разберём основные из них.

Округление чисел: ceil(), floor(), trunc()

В модуле math есть три функции для округления:

  • math.ceil(x) — округляет число вверх до ближайшего целого;
  • math.floor(x) — округляет число вниз до ближайшего целого;
  • math.trunc(x) — отбрасывает дробную часть (усекает число к нулю).

Все функции возвращают целое число int. Для отрицательных значений floor и trunc дают разные результаты.

Округлим −4,2 и 4,2 разными способами:

import math

# Положительные числа
print(math.ceil(4,2))   # 5
print(math.floor(4,2))  # 4
print(math.trunc(4,2))  # 4

# Отрицательные числа
print(math.ceil(−4,2))   # -4  (округляем вверх: −4 > −4,2)
print(math.floor(−4,2))  # -5  (округляем вниз: −5 < −4,2)
print(math.trunc(−4,2))  # -4  (просто отбрасываем дробную часть)

Как видно из примера, ceil(−4,2) даёт −4, потому что это наименьшее целое, которое больше или равно −4,2. floor(−4,2) даёт −5 — наибольшее целое, не превосходящее −4,2. А trunc(−4,2) просто удаляет дробную часть и возвращает −4.

Модуль числа: fabs()

Функция math.fabs() возвращает абсолютное значение числа, то есть его модуль. По смыслу она аналогична встроенной функции abs(), которая также используется для получения модуля числа.

Главное отличие в том, что math.fabs() всегда возвращает результат типа float, даже если передать в неё целое число.

Например:

import math

# Целое число
x = -5
print(abs(x))       # 5   (int)
print(math.fabs(x)) # 5.0 (float)

# Число с плавающей точкой
y = -3.14
print(abs(y))       # 3.14 (float)
print(math.fabs(y)) # 3.14 (float)

Функцию math.fabs() используют в случаях, когда важно гарантированно получить результат типа float. Это может быть полезно в цепочках вычислений, где дальнейшие операции рассчитаны именно на вещественные числа.

В большинстве же задач предпочтительнее использовать встроенную функцию abs(). Она универсальнее, работает с разными типами данных и в типичных сценариях полностью закрывает потребность в вычислении модуля числа.

Степени и корни в модуле math

Модуль math содержит удобные функции для работы со степенями и корнями. Рассмотрим основные варианты и их применение.

Возведение в степень: math.pow()

Функция math.pow (x, y) возвращает x в степени y — (x^y). Результат всегда имеет тип float, даже если оба аргумента — целые числа.

import math

print(math.pow(2, 3))   # 8.0
print(math.pow(5, 2))   # 25.0
print(math.pow(4, 0.5)) # 2.0 

Посмотрим на отличия math.pow() от оператора **:

Характеристикаmath.pow(x, y)x ** y
Тип результатаВсегда floatint, float или complex, в зависимости от входных данных
Работа с целыми числамиРезультат приводится к floatМожет сохранять int при целочисленном возведении
Работа с комплексными числамиНе поддерживает (TypeError)Поддерживает
Отрицательное основание и дробная степень у числаОшибка (ValueError)Возвращает комплексное число
ПроизводительностьЧуть медленнее, так как требуется вызов функции и преобразованияБыстрее, так как это оператор на уровне языка
Поведение с типамиВсегда приводит вход к floatСохраняет исходные типы, где возможно

Например:

import math

# Пример с целыми числами
a = 3 ** 2      # 9 (int)
b = math.pow(3, 2)  # 9.0 (float)

# Отрицательное основание и дробный показатель
try:
    result = math.pow(-2, 0.5)
except ValueError as e:
    print(f"Ошибка: {e}")  # math domain error

# А оператор ** даст комплексное число
complex_result = (-2) ** 0.5
print(complex_result)      # (8.659560562354934e-17+1.4142135623730951j)

Используйте math.pow(), когда важно получить результат строго типа float или требуется предсказуемое поведение вычислений, включая явную обработку ошибок.

Квадратный корень: math.sqrt()

Функция math.sqrt(x) возвращает квадратный корень из x. Аргумент не может быть отрицательным. Результат вычисления всегда float.

Проверим функцию на примерах:

import math

print(math.sqrt(25))   # 5.0
print(math.sqrt(2))    # 1.4142135623730951
print(math.sqrt(0))    # 0.0

Используем math.sqrt(x) для решения квадратного уравнения через определение дискриминанта:

import math

def solve_quadratic(a, b, c):
    d = b**2 - 4*a*c
    if d < 0:
        return None  # Нет действительных корней
    sqrt_d = math.sqrt(d)
    x1 = (-b + sqrt_d) / (2*a)
    x2 = (-b - sqrt_d) / (2*a)
    return x1, x2

print(solve_quadratic(1, -3, 2))  # (2.0, 1.0)

Корни произвольной степени

Прямой функции для корня n-й степени в math нет, но её можно получить через возведение в дробную степень: math.pow(x, 1/n):

import math

# Кубический корень из 27
cube_root = math.pow(27, 1/3)   # 3.0
# Корень 4-й степени из 16
fourth_root = 16 ** 0.25        # 2.0

print(cube_root, fourth_root)

Для отрицательных x и целых нечётных n используйте **:

def nth_root(x, n):
    if x < 0 and n % 2 == 1:
        return -abs(x) ** (1/n)
    else:
        return x ** (1/n)

Логарифмы и экспоненты в модуле math

В модуле math есть функции для работы с логарифмами и степенью числа e. Они применяются в научных расчётах, статистике, моделировании процессов и других областях.

Логарифмические функции

Все логарифмические функции определены только для положительных аргументов. Если аргумент равен или меньше нуля, функция вернёт ValueError.

Чаще всего на практике используют две логарифмические функции:

  • math.log(x) — натуральный логарифм числа x (основание e). Вторым аргументом можно указать основание: math.log(x, base).
  • math.log10(x) — десятичный логарифм. Эквивалентен math.log(x, 10).
import math

# Натуральный и десятичный логарифмы
print(math.log(5))          # ln(5) ≈ 1.60944
print(math.log10(5))        # log10(5) ≈ 0.69897
print(math.log(25, 5))      # log5(25) = 2.0

Экспонента и число e

Экспоненты в math всегда возвращают положительное число. Основная функция — math.exp(x), которая вычисляет экспоненту e^x, где e — основание натурального логарифма. Посмотрим на примере:

import math

print(math.exp(2))          # e^2 ≈ 7.38906
print(math.e)               # 2.718281828459045
print(math.exp(1) == math.e) # True

Кроме этого, можно использовать math.expm1(x), которая вычисляет e^x − 1 с повышенной точностью при малых значениях x. Поэтому её можно использовать в случаях, когда результат близок к нулю.

import math

x = 1e-8
print(math.log1p(x))        # ln(1+1e-8) ≈ 9.99999995e-9
print(math.expm1(x))        # e^1e-8 - 1 ≈ 1.000000005e-8

Тригонометрические функции в модуле math

Модуль math предоставляет стандартный набор тригонометрических и обратных тригонометрических функций.

Все углы во входных аргументах и возвращаемых результатах задаются в радианах, а не в градусах.

Основные функции: sin(), cos(), tan()

Модуль math поддерживает стандартные вычисления:

  • math.sin(x) — синус угла x (в радианах);
  • math.cos(x) — косинус угла x;
  • math.tan(x) — тангенс угла x.

Посмотрим на пример использования:

import math

angle_rad = math.radians(30)   # Преобразуем 30° в радианы
sin30 = math.sin(angle_rad)    # 0.5
cos30 = math.cos(angle_rad)    # ≈ 0.8660
tan30 = math.tan(angle_rad)    # ≈ 0.57735

Обратные тригонометрические функции: asin(), acos() и atan()

Эти функции возвращают угол в радианах. Всего их три:

  • math.asin(x) — арксинус, возвращает угол, синус которого равен x. Область определения −1 ≤ x ≤ 1;
  • math.acos(x) — арккосинус. Область определения −1 ≤ x ≤ 1;
  • math.atan(x) — арктангенс возвращает значение в диапазоне от −π/2 до π/2.

Если передать в функции asin и acos |x| > 1, то получим ValueError.

Посчитаем угол в градусах:

x = 0.5
angle_rad = math.asin(x)       # ≈ 0.5236 рад
angle_deg = math.degrees(angle_rad)  # 30.0°

Преобразование между радианами и градусами

Преобразования выполняется с помощью двух функций:

  • math.radians(deg) — переводит угол из градусов в радианы;
  • math.degrees(rad) — переводит угол из радианов в градусы.

Преобразуем значения градусов и радианов:

# Перевод градусов в радианы
rad = math.radians(180)        # π

# Перевод радианов в градусы
deg = math.degrees(math.pi)    # 180.0

Закрепим теорию, решим задачу с прямоугольным треугольником:

import math

# Дано: катеты a = 3, b = 4
a, b = 3, 4
hyp = math.hypot(a, b)         # Гипотенуза = 5.0

# Острый угол напротив катета a (в радианах)
angle_a_rad = math.asin(a / hyp)   # ≈ 0.6435 рад
angle_a_deg = math.degrees(angle_a_rad)  # ≈ 36.87°

Дополнительные функции модуля math

Помимо базовых функций, в math есть полезные инструменты для работы с числами, расстояниями и вычислениями с плавающей точкой.

Функции теории чисел

math.factorial(n) — факториал числа. Возвращает произведение всех чисел от 1 до n:

math.factorial(5)  # 120

Функция работает только с целыми числами n ≥ 0. При отрицательных значениях или дробных числах возникает ошибка ValueError.

math.gcd(a, b) — наибольший общий делитель (НОД). Работает с целыми числами, возвращает целое значение. Например:

math.gcd(48, 18)  # 6

math.lcm() используется для определения наименьшего общего кратного двух или более чисел. Доступна с Python 3.9+.

import math

math.lcm(12, 18)  # 36

Работа с расстояниями

math.hypot(x, y) — длина вектора или расстояние до точки:

math.hypot(3, 4)  # 5.0

Для расчёта длины многомерного вектора, необходимо передать все аргументы.

Прочие вычисления

math.isclose(a, b) используется для проверки «приблизительного равенства» чисел с плавающей точкой. Это полезно, так как операции с float часто дают небольшие погрешности. Проверим на практике:

math.isclose(0.1 + 0.2, 0.3)  # True

math.fsum() — Вычисляет сумму с минимальной накопленной ошибкой округления. Точнее, чем встроенный sum() для чисел с плавающей точкой.

math.fsum([0.1] * 10)  # 1.0

math.prod() — Возвращает произведение всех чисел в последовательности:

math.prod([2, 3, 4])  # 24

math.modf(x) — разделяет число на две части: дробную и целую. Проверим:

math.modf(3.14)  # (0.14, 3.0)

math.copysign(x, y) — возвращает число x с тем же знаком, что и у y.

import math 
math.copysign(3, -1) # -3.0 
math.copysign(-5, 2) # 5.0

Что дальше

Теперь вы знаете, что умеет модуль math и как использовать его возможности на практике. Это хорошая основа, но не предел: у модуля есть и другие функции, которые пригодятся в конкретных задачах. Изучайте их по официальной документации Python — там подробно описаны все функции с примерами и особенностями поведения.

И не забывайте про практику. Это лучший способ закрепить материал: решайте с помощью math практические задачи — от простых расчётов до тригонометрии и работы с логарифмами. Чем чаще вы будете обращаться к его функциям, тем быстрее запомните их и начнёте уверенно применять.

Когда встроенных возможностей math станет недостаточно, переходите к специализированным библиотекам для Python — например, NumPy и SciPy.

Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!

Освойте Python с нуля за 10 месяцев
Вы выучите язык на практике, соберёте 6 проектов и получите обратную связь от экспертов. Сможете попасть на стажировку в VK.
Узнать о курсе
Практический курс по Python
Освойте Python и работайте с ИИ, большими данными или проектируйте сложные ИТ-системы.
Узнать о курсе

Курс с трудоустройством: «Профессия Python-разработчик + ИИ» Узнать о курсе
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована