Курс по стандартной библиотеке: https://stepik.org/a/259466?utm_source=proproprogs
Продолжаем
рассматривать функции модуля math. Следующий блок посвящен функциям:
|
Функция
|
Описание
|
|
comb(n,
k)
|
возвращает
число перестановок из n по k без учета
повторений и порядка следования
|
|
perm(n,
k)
|
возвращает
число перестановок из n по k без учета повторений,
но с учетом порядка следования
|
|
factorial(n)
|
вычисление
факториала числа n
|
|
gcd(*integers)
|
возвращает
наибольший общий делитель для указанных целых чисел
|
|
lcm(*integers)
|
возвращает
наименьший общий множитель для указанных целых чисел
|
|
isqrt(n)
|
возвращает
целое значение квадратного корня от целого неотрицательного числа n
|
Первая функция comb(n,
k) определяет число сочетаний согласно формуле:
Если k больше n, то функция
возвращает 0. Например:
k, n = 2, 7
c = math.comb(n, k) # 21
math.comb(k, n) # 0
Вторая
аналогичная функция perm(n, k) определяет число сочетаний согласно формуле:
Если k больше n, то функция
возвращает 0. Например:
p = math.perm(n, k) # 42
math.perm(k, n) # 0
Следующая функция
factorial(n) позволяет вычислять факториал неотрицательного целого числа n согласно
формуле:
Факториал числа
0 равен 1. Например:
math.factorial(3) # 6
math.factorial(0) # 1
math.factorial(-5) # ValueError
Следующая функция
gcd(*integers) находит наибольший общий делитель для переданных целых чисел.
Например:
vals = (5, 7, 15, 3, 14)
vals_2 = (30, 5, 15, 25)
math.gcd(*vals) # 1
math.gcd(*vals_2) # 5
При передаче
всех нулевых значений, возвращается 0:
Вызов функции
без аргументов также дает значение 0:
Следующая
аналогичная функция lcm(*integers) определяет наименьший общий множитель для
переданных целых чисел. Например:
math.lcm(*vals) # 210 = 5 * 7 * 3 * 2
По сути – это
произведение всех уникальных простых множителей переданных целых чисел.
Если среди чисел
присутствует хотя бы один ноль:
то результат
будет 0. Функция без аргументов возвращает 1:
Последняя
функция этого блока isqrt(n) позволяет выполнять целочисленное извлечение
квадратного корня из целого неотрицательного числа:
math.isqrt(0) # 0
math.isqrt(1) # 1
math.isqrt(3) # 1
math.isqrt(5) # 2
math.isqrt(-1) # ValueError
Эта функция
оптимизирована для целочисленных вычислений и работает быстрее обычной функции sqrt() с последующим
отбрасыванием дробной части числа.
Степенные, экспоненциальные и логарифмические функции
Следующий блок
образует набор из степенных, экспоненциальных и логарифмических функций:
|
Функция
|
Описание
|
|
pow(x,
y)
|
возведение
в степень x ** y
|
|
cbrt(x)
|
кубический
корень числа x
|
|
sqrt(x)
|
квадратный
корень числа x
|
|
exp(x)
|
вычисление
экспоненты в степени x
|
|
exp2(x)
|
вычисление
2 ** x
|
|
expm1(x)
|
вычисление
e
** x - 1
|
|
log(x,
base)
|
логарифм
числа x по основанию base (по умолчанию
base равен e – натуральный
логарифм)
|
|
log2(x)
|
логарифм
числа x по основанию 2
|
|
log10(x)
|
логарифм
числа x по основанию
10
|
|
log1p(x)
|
натуральный
логарифм от 1+x
|
Пользоваться
этими функция достаточно просто и очевидно. Первая pow(x, y) возводит число
x в степень y. Причем, числа x, y могут быть
вещественными. Например:
math.pow(2, 3) # 8 = 2 ** 3
math.pow(2, -1) # 0.5
math.pow(-2, 2) # 4
math.pow(4, 0.5) # 2 – аналог квадратного корня
math.pow(4, 1/3) # 1.5874010519681994 – аналог кубического корня
Так как
квадратные и кубические корни приходится вычислять довольно часто, то для них
отведены свои специальные функции:
math.sqrt(4) # 2
math.sqrt(-3) # ValueError
math.cbrt(8) # 2
math.cbrt(-8) # -2
Следующий набор
функций позволяет вычислять различные степени экспонент:
math.exp(1) # 2.718281828459045 – число e
math.exp(-2) # 0.1353352832366127
math.exp(0.5) # 1.6487212707001282
math.exp2(16) # 65536.0
math.exp2(2.5) # 5.656854249492381
math.expm1(1) # 1.718281828459045 = e-1
math.expm1(1.5) # 3.4816890703380645
По идее все эти
значения можно было бы вычислить с помощью функции pow(x, y), например:
math.pow(math.e, 0.5) # 1.6487212707001282 = math.exp(0.5)
Но, во-первых,
записать функцию через exp() проще и понятнее, а, во-вторых,
функции с exp оптимизированы
для вычисления различных видов экспонент и не редко дают более высокую
точность, чем прямое вычисление по функции pow().
Последняя группа
функций этого блока позволяет вычислять различные логарифмы:
math.log(math.e) # 1.0 – натуральный логарифм
math.log(1.5) # 0.4054651081081644 – натуральный логарифм
math.log(8, 2) # 3.0 – логарифм по основанию 2
math.log(100, 10) # 2.0 – логарифм по основанию 10
Несмотря на то,
что все виды логарифмов можно вычислить с помощью функции log(), в модуле math отдельно
присутствуют функции для логарифма по основанию 2:
для логарифма по
основанию 10:
math.log10(9.5) # 0.9777236052888477
и для
натурального логарифма от 1+x:
math.log1p(1.7) # 0.9932517730102833
Все эти функции
также позволяют создавать более наглядный программный код и оптимизируют
соответствующие вычисления. Поэтому использование специализированных функций
предпочтительнее использованию общей функции log().
Курс по стандартной библиотеке: https://stepik.org/a/259466?utm_source=proproprogs