Функции в Python занимают ключевую роль. Без них невозможно выполнение ни одной сложной программы или же для ее создания придется писать каждый раз огромные куски повторяющегося кода. Точно так же невозможно представить программирование без вычислений. Чтобы выполнять математические операции, существуют специальные функции. Все они находятся в модуле math.
Определение модуля. 3 типа модулей в Python
Для начала разберемся в том, что такое модуль в Python. Под этим словом подразумеваются специальные файлы, в которых содержатся переменные классов, функции и другие компоненты работы программы, которые могут использоваться в самых разных приложениях. Они, точно так же, как и функции, лишают необходимости изобретать велосипед или писать огромное количество одних и тех же строк в разных программах.
В это же время функции объявляются в программе, а модуль может использоваться в самых разных приложениях. Достаточно объявить их один раз, и далее ее можно использовать в нескольких программах, написанных разными людьми. Более того, они могут друг друга не знать, а просто установить модуль для языка программирования и использовать их на разных уголках света.
Все модули в Python разделяются на три вида:
Написанные на самом Python. Имеют расширение .py.
Написанные на C и загружаемые динамически. Такие модули могут иметь разные расширения, начиная привычным .dll и заканчивая менее распространенными .pyd, .so, .sl.
Модули, написанные на C, но имеющие связь с Python.
Для того, чтобы получить список последних, необходимо написать следующие строки кода.
import sys
print(sys.builtin_module_names)
Функции представления чисел
Эти функции выполняют такие действия, как отображение целой части числа, получение факториала, абсолютного значения, остатка от деления и так далее. Рассмотрим функции представления чисел.
ceil() и floor() — целая часть числа
С помощью этих функций можно или округлить число до целого или убрать десятичные знаки, оставив часть до запятой неизменной. Обе функции используют в качестве аргумента десятичное число и возвращают целое. Но различается принцип их работы.
С помощью функции ceil() число округляется в большую сторону. А функция floor() по сути также выполняет округление, но в меньшую сторону.
Приведем примеры кода для наглядности.
# С помощью этой строки мы импортируем библиотеку
import math
# Задаем переменную с числом, имеющим дробное значение
number=8.10
# Используем функцию ceil() для округления в большую сторону. В выводе будет 9.
print(math.ceil(number))
# Используем функцию floor(), чтобы убрать знаки после запятой. В выводе будет 8.
print(math.floor(number))
fabs() — абсолютное значение
Эта функция используется для получения модуля числа. То есть, если оно отрицательное, то будет сконвертировано в положительное. Если оно положительное, то так и останется положительным. Функция не округляет число, поэтому если оно окажется дробным, то ничего не изменится.
В качестве аргумента функция принимает то число, которое необходимо конвертировать в положительное значение. Приведем пример кода для примера.
number = -8.10
# вывод модуля числа
print(math.fabs(number))
Не забываем импортировать модуль math перед выполнением всех функций, описанных в этой статье.
factorial() — функция факториала
В качестве аргумента этой функции используется целое положительное число, а возвращаемое значение – его факториал. Это такая функция, которая определяется на множестве неотрицательных целых чисел. Математически вычисляется следующим образом.
Допустим, у нас есть число 5. Чтобы получить его факториал, необходимо построить последовательность натуральных чисел вплоть до 5 (включая это значение), а потом перемножить все эти числа между собой.
То есть, в данном случае, если перемножить каждое число, входящее в последовательность 1,2,3,4,5, то получится 120.
Если же извлекается факториал из нуля, то считается, что это единица.
Теперь приведем пример использования этой функции в программировании.
print(«факториала числа», math.factorial(number))
Если в качестве значения переменной number использовать число 5, то в выводе будет отображаться фраза: «факториала числа 120».
Факториал используется в целом спектре разделов математики, включая комбинаторику, математический анализ, теория чисел и так далее. Используется он и в теории вероятностей, поэтому данная функция обрела широкое распространение для различных приложений, прогнозирующих финансовые рынки, ставки в азартных играх и так далее.
Внимание! Нельзя использовать в качестве значения этой переменной отрицательное число. В этом случае будет выдана ошибка ValueError, поскольку в саму функцию факториала не входят отрицательные числа.
Интересный факт: факториал является одной из наиболее быстро растущих функций. Если факториал числа 1 – это 1, то факториал числа 6 – 720, а числа 10 – 3 628 800. А если попробовать получить факториал числа 20, то получится число, почти равняющегося 2 с половиной квинтиллионов. Сумасшедшие значения.
fmod() — остаток от деления
Скорее всего, вы уже знакомы с оператором деления по модулю. Он выглядит, как знак процента (%), который стоит между первым и вторым операндами. Недостаток оператора деления по модулю в том, что он может работать только с целыми числами. Поэтому в ситуациях, когда необходимо получить остаток от деления дробных чисел, используется функция fmod().
Ее синтаксис такой же простой, как и у описанных выше функций. В качестве аргументов она принимает те числа, которые необходимо разделить и получить остаток. Сами числа прописываются через запятую.
И точно так же, чтобы использовать эту функцию, ее необходимо прописать в качестве метода объекта math.
Задача: напишите строку кода, которая получает остаток от деления чисел -5.2 и 2. Ответ:
print(math.fmod(-5.2,2))
Видим, что здесь мы использовали как натуральные числа, так и отрицательные дробные. В этом плане функция очень гибкая.
frexp()
Эта функция позволяет решить такое уравнение, как x = m * 2^n. Она возвращает мантиссу и и показатель степени в виде пары (m, n). Предположим, у нас x равен нулю. В таком случае функция вернет значения 0.0, 0. Иначе возвращается значение 0.5 <= abs(m) <1.
Функция принимает только один аргумент – число, для которого нам необходимо найти мантиссу и показатель степени. Использоваться может как положительное, так и отрицательное значение.
Если использовать в качестве аргумента строку, будет возвращена ошибка TypeError.
Для примера приведем фрагмента кода.
# С помощью первой строчки осуществляем импорт модуля math в Python
import math
#Эта строка принимает функцию frexp числа 24.8 в качестве аргумента и возвращает мантиссу и показатель степени на экран.
print(math.frexp(24.8))
fsum() — точная сумма float
Эта функция принимает в качестве аргумента последовательность чисел с плавающей точкой и в качестве результата возвращает их сумму. В качестве аргумента можно использовать итерируемый объект, такой как список или диапазон данных. То есть, любой объект, который может возвращать элементы по одному, может использоваться для того, чтобы просуммировать входящие его значения.
Очевидно, что нельзя использовать строчные данные, если они не были предварительно переведены в числовой формат.
Допустим, у нас есть строка ‘5.505’, и нам требуется перевести ее в число с плавающей точкой. Для этого используется функция float(5.505). И в таком уже виде эта функция может использоваться в качестве аргумента функции float.
Но это уже тонкости. Давайте для начала упростим задачу. Предположим, нам надо просуммировать все числа, входящие в список numbers. Чтобы это сделать, необходимо написать такой код.
numbers=[.1,.2,.3,.4,.5,.6,.7,.8,8.9]
print(«сумма «, numbers, «:», math.fsum(numbers))
Этот код будет выводить сумму списка, который принимается в качестве аргумента функции fsum.
Функции возведения в степень и логарифма
Иногда может потребоваться операция возведения в степень или получение логарифма (такие ситуации случаются гораздо реже по сравнению с более простыми функциями). Возведение в степень, вообще, довольно популярная функция. Даже для довольно нетривиальных задач она может пригодиться. Ведь это значительно удобнее, чем умножать несколько одинаковых чисел несколько раз, правильно.
Давайте более подробно рассмотрим особенности использования функций возведения в степень и логарифма в языке Python.
exp()
Если вы когда-то пытались перемножить на калькуляторе очень большие числа между собой, то сталкивались с экспонентой. Вообще, значений у этого слова несколько. Например, когда говорят «растет по экспоненте», то это означает, что в каждую следующую единицу времени значение переменное увеличивается больше, чем в предыдущую единицу.
Типичный пример экспоненциального роста – геометрическая прогрессия, когда каждое следующее число больше предыдущего в определенное количество раз, но если брать разницу между двумя предыдущими значениями, то она всегда больше ближе к правой части числового ряда.
Но экспонента – это число, которое соответствует числу Эйлера (e) в определенной степени. Используется для представления очень больших чисел, которые невозможно правильно прочитать в своем привычном виде.
Функция exp() принимает целое число или число с плавающей точкой, а возвращает e в соответствующей степени.
Пример:
print(«e в степени 5 «, math.exp(5))
print(«e в степени 2.5», math.exp(2.5))
В первом случае будет возвращено значение 148.4132, а во втором – 12.1825
expm1()
В определенной степени, эта функция противоположная предыдущей в том смысле, что она возвращает экспоненту числа с отрицательной степенью. Для наглядности приведем следующий код.
print(math.exp(5)-1)
print(math.expm1(5))
Несмотря на то, что эти две функции по своей природе разные, возвращают они одно и то же значение. Все потому, что первая функция находит экспоненту отрицательного числа, а вторая – числа, противоположного положительному. В остальных аспектах, эти функции работают одинаково.
Вопрос: зачем вообще была придумана эта функция, если ту же задачу можно выполнить и с помощью предыдущей? Дело в том, что очень часто выражение exp()-1 используется в естественном виде в большом количестве математических формул. И это попросту удобно.
Есть еще одна причина: точность результатов. Если значение x меньше 10, то эта функция дает лучше результат по сравнению с exp()-1.
log() — логарифм числа
Логарифмы используются в целом спектре видов человеческой деятельности. Так, они широко применяются для создания технических устройств и разработки приложений, которые помогают это делать.
В физике логарифмы используются для измерения интенсивности звука. Так, на каждые следующие 8 децибел интенсивность звука увеличивается вдвое.
В астрономии логарифмы используются для вычисления абсолютной звездной величины, а в химии и медицине – для вычисления pH.
А вот где никто не ожидал увидеть логарифмы – так это в музыке. При этом, каждая следующая нота соответствует другой звуковой частоте. И чтобы построить музыкальную гамму, очень удобно использовать логарифмы этих частот.
Что же такое логарифм? Это степень, в которую надо возвести основание, чтобы получить аргумент, т.е. функция от двух переменных.
Вот, чтобы получить его, используется функция log(x, [base]). Логарифм – это функция, включающая 2 переменные. Первая – это число, по которому осуществляется определение логарифма. Второй аргумент – это база. Этот параметр может не указываться. В этом случае будет осуществляться расчет логарифма числа без базы.
log1p()
В целом, эта функция работает так же, как и предыдущая. Ее принцип такой же самый. Единственное исключение – она добавляет к x единицу.
Для использования этой функции, так же, как и во всех предыдущих примерах, необходимо сначала импортировать модуль math, а потом использовать в качестве аргумента число и базу.
import math
print(math.log1p(2))
log10()
Если необходимо вычислить логарифм по основанию 10, то это можно сделать с помощью этой функции. Это значительно удобнее, чем задавать основание отдельно. Соответственно, в качестве аргумента используется число, логарифм которого следует найти.
print(math.log10(1000))
Эта функция, как и все остальные, используется, как метод модуля math. Соответственно, его нужно вызывать с этим объектом, как положено, через точку.
pow() – степень числа
Операция возведения в степень в Python, как вы могли уже знать, выполняется с помощью оператора **. Нередко начинающие разработчики на этом языке, ошибочно считают, что возведение числа в степень реализуется с помощью оператора ^. Но это не так, хотя и выглядит логично на первый взгляд. Ведь в математике именно этот символ означает данную операцию.
Но на деле применение этого символа совсем другое – он выполняет побитовую операцию xor.
В Python же возведение в степень реализуется именно с помощью двух звездочек.
Напомним синтаксис этого оператора, потому что те же аргументы используются в функции pow(), которую мы рассмотрим в этом разделе.
Первый операнд – это то число, которое нужно возводить в степень. Допустим, это 5. После него ставится знак возведения в степень, после чего ставится второй операнд, который обозначает, в какую степень осуществляется возведение.
Таким образом, эта программа сначала возводит 5 в степень 6, а потом выводит получившееся значение в консоль.
print(5**6)
Этот оператор можно использовать и с другими видами значений: с отрицательными, числами меньше нуля, с отрицательными степенями.
Функция pow() работает аналогичным образом. Сначала в качестве первого аргумента в нее записывается основание – то число, которое нужно возводить в степень. А в качестве второго аргумента используется число, обозначающее степень, в которую следует возвести число.
print(pow(2, 1.5))
Заметьте, здесь мы не использовали объект math. Почему? Дело в том, что среди встроенных функций Python такая функция также есть. Работает она абсолютно так же, как и в модуле Math, но есть одно существенное отличие. Если мы рассматриваем функцию из библиотеки, то возвращаться будут числа с плавающей точкой, независимо от того, передаются ей целочисленные значения или нет.
Зная эту особенность, можно гибко регулировать
Недостаток функции math.pow() в том, что если значение степени очень большое, будет выдаваться ошибка OverflowError.
sqrt() — квадратный корень числа
Math.sqrt() – это не единственная функция с помощью которой можно произвести операцию возведения в степень. Чтобы более глубоко понять принципы ее работы, надо сравнить также с другими способами получения квадратного корня из числа.
Первый вариант – использовать оператор возведения в степень. Если использовать степень 0,5, программа извлекает квадратный корень. Это очень удобный способ, которым можно пользоваться.
С помощью math.sqrt() можно получить квадратный корень из нуля и положительных чисел. Для этого необходимо в качестве аргумента использовать число, для которого нужно получить квадратный корень.
Недостаток этого метода в том, что он не поддерживает извлечение квадратного корня из отрицательных чисел. Чтобы такая возможность появилась, необходимо подключить другую библиотеку – cmath() и использовать метод cmath.sqrt() с числом в качестве аргумента.
import cmath
num = -25
sqrt = cmath.sqrt(num)
print(«Квадратный корень из числа » + str(num) + » это » + str(sqrt))
Особенность этой библиотеки в том, что она проводит математические вычисления с комплексными числами, которое и получается в результате получения квадратного корня из отрицательного значения.
Таким образом, функция math.sqrt() – далеко не самая мощная, и для продвинутого функционала требуется совсем другая библиотека. Правда, такая необходимость появляется не так часто. Далеко не всегда надо работать с комплексными числами.
Тригонометрические функции
Одно из характерных преимуществ модуля math() заключается в том, что он поддерживает тригонометрические функции. Поддерживаются все существующие на данный момент – синус, косинус, тангенс, арксинус, арктангенс и так далее.
Рассмотрим самые распространенные тригонометрические функции.
Все они принимают только один аргумент – угол, для которого необходимо найти синус, косинус и так далее.
Получение синуса радиана. Для этого используется функция sin(). Принимает один аргумент – радиан.
Получение косинуса. Чтобы добиться этой цели, применяется функция cos(). В качестве аргумента используется радиан.
Получение тангенса. Используется функция tan.
Приведем таблицу с подробным перечислением тригонометрических функций в Python и тем, как они используются.
Функция преобразования углов
У внимательного читателя мог на предыдущем этапе появиться вопрос: а что, если я не знаю, сколько радиан в угле? Я знаю только количество градусов. Ничего страшного, ведь библиотека math поддерживает возможность конвертации радиан в градусы и наоборот.
Чтобы выполнить первую задачу, существует функция degrees(), которая принимает радиан в качестве аргумента и выводит количество градусов.
Для того, чтобы получить количество радиан, зная количество градусов, следует воспользоваться функцией radians(), которая принимает величину угла в качестве аргумента.
Запомнить очень просто. То, что мы хотим получить, так и называется функция.
Математические константы
Есть две основные математические константы. Об одной из них мы уже сегодня говорили. Это число Эйлера. Оно обозначается буквой e. Чтобы его получить, необходимо использовать функцию math.e (без аргументов).
Для получения числа Пи, которое является второй известной константой, используется функция math.pi, которая также используется без аргументов.
# вывод значения PI
print(«значение PI», math.pi)
# вывод значения e
print(«значение e», math.e)