Математические функции
Помимо базовых арифметических операций, Python предлагает набор встроенных функций, которые помогают работать с числами – это функция abs(), возвращающая модуль числа, функция round() для округления чисел, и функция pow(), эквивалентная оператору возведения в степень.
Абсолютное значение чисел
Функция abs() (от англ. absolute — абсолютный) позволяет получить абсолютное значение числа, то есть его модуль. В математике модуль представляет собой расстояние на числовой прямой от этого числа до 0. И так как расстояние не может быть отрицательным, то можно сказать, что модулем числа является это же число, но без учёта знака.
|
Функция |
|
|
Описание |
Возвращает абсолютное значение числа |
|
Параметры |
|
|
Возвращаемое значение |
Абсолютное значение числа |
Функция abs() очень проста в использовании и в любом случае возвращает положительное значение этого же числа:
print(abs(5))
# Вывод: 5
print(abs(-10))
# Вывод: 10
print(abs(-3.14))
# Вывод: 3.14
Округление чисел
Результат арифметической операции, например, деления, часто нуждается в округлении:
print(10 / 3)
# Вывод: 3.3333333333333333
Для этого в Python предназначена функция round().
|
Функция |
|
|
Описание |
Возвращает число |
|
Параметры |
Необязательные параметры:
|
|
Возвращаемое значение |
Число |
Использование параметра ndigits позволяет округлить результат деления до указанного количества десятичных знаков:
result = 10 / 3
print(round(result, 2))
# Вывод: 3.33
Иначе функция round() округляет число до ближайшего целого:
print(round(3.33))
# Вывод: 3
Для случаев, когда число ровно посередине между двумя ближайшими значениями (например, 3.5 или 2.5), в Python действует банковское округление. То есть значение округляются в сторону ближайшего чётного числа. Поэтому число 2.5 будет округлено до меньшего числа 2:
print(round(2.5))
# Вывод: 2
Но число 3 будет округлено до большего числа 4:
print(round(3.5))
# Вывод: 4
Такой метод округления может показаться странным, ведь в математике мы округляем число в меньшую сторону, если после запятой присутствуют цифры от 1 до 4, а в большую – цифры от 5 до 9. Однако банковское округление позволяет бороться с накоплением ошибки при совершении операций с округлёнными числами:
# Запишем исходное выражение
expression = 1.5 + 2.5 + 3.5 + 4.5
print(expression)
# Вывод: 12
# Используем математическое округление
math_round = 2 + 3 + 4 + 5
print(math_round)
# Вывод: 14
# Используем банковское округление
bank_round = 2 + 2 + 4 + 4
print(bank_round)
# Вывод: 12
Здесь математическое округление дало погрешность 2, в то время как банковское округление вовсе позволило её избежать.
Возведение в степень
Для возведения чисел в степень можно использовать оператор **, как мы делали это ранее. Однако в Python существует специальная встроенная функция pow() (от англ. power — степень), которая выполняет эту же задачу. Несмотря на то, что для возведения в степень оператор ** является более привычным, функция pow() может быть полезна, когда нужно использовать её дополнительные возможности.
|
Функция |
|
|
Описание |
Возвращает число |
|
Параметры |
Необязательные параметры:
|
|
Возвращаемое значение |
Число |
Использование pow() с двумя аргументами аналогично оператору **:
print(pow(2, 3))
# Вывод: 8
print(2 ** 3)
# Вывод: 8
Однако параметр mod позволяет объединить возведение в степень с нахождением остатка от деления:
print(pow(2, 3, 3))
# Вывод: 2
print((2 ** 3) % 3)
# Вывод: 2
Нахождение остатка от деление по-другому называют делением по модулю. Это находит своё применение в математике, например, числа часто сравнивают по модулю, то есть определяют, имеют ли эти числа одинаковый остаток при делении на один и тот же модуль.
Примеры
Пример 1. Расстояние до цели в игре
В игре нужно определить, насколько далеко объект находится от цели:
# Координаты игрока и цели по оси x
player_position = -5
target_position = 3
# Модуль разности расстояний
distance = abs(player_position - target_position)
print(f"Игрок находится на расстоянии {distance} шагов от цели")
Вывод:
Игрок находится на расстоянии 8 шагов от цели
Пример 2. Конвертер валют
Конвертер валют на сайте пункта обмена переводит рубли в доллары по курсу 78.72 рубля за 1 доллар, а также учитывает комиссию в 1.5 %:
rub = 1000 # Рубли для обмена
exchange_rate = 78.72 # Курс
commission = 1.5 # Комиссия в %
# Конвертация с учётом комиссии
usd = (rub / exchange_rate) * (1 - commission / 100)
print("Итого:", round(usd, 2), "долларов") # Округляем до центов
Вывод:
Итого: 12.51 долларов
Пример 3. Создание ключа доступа
Программа создаёт временный и уникальный ключ для доступа к веб-сервису. Ключ создаётся на основе трёх уникальных чисел и общих параметров:
# Три уникальных и важных числа
data_1 = 123
data_2 = 456
data_3 = 789
# Общие параметры для каждого из чисел
prime_base = 31 # Простое число, основание
modulus = 10**9 + 7 # Большой простой модуль
# Вычисление ключа
secret_key = (
data_1 * pow(prime_base, 2, modulus) +
data_2 * pow(prime_base, 1, modulus) +
data_3 * pow(prime_base, 0, modulus)
) % modulus
print(f"Уникальный ключ: {secret_key}")
Вывод:
Уникальный ключ: 133128
Итоги
- Функция
abs()возвращает абсолютное значение (модуль) числа, то есть это же число, но без учёта знака. - Функция
round()округляет число до указанного количества десятичных знаков или до ближайшего целого. - Для чисел, находящихся ровно посередине (например, 2.5, 3.5), Python использует банковское округление – округление к ближайшему чётному числу, чтобы уменьшить накопление ошибок.
- Функция
pow()эквивалентна оператору**и возводит число в степень, но также позволяет сразу же поделить этот результат по модулю с помощью параметраmod.
Задания для самопроверки
1. Что будет выведено на экран в результате выполнения данного кода?
print(abs(-15.5))
print(abs(100))
print(abs(0))
15.5
100
0
2. Используйте функцию round() и округлите числа 0.15865 и 32.23124 до трёх знаков после запятой, а числа -8.87231 и 14.5 – до ближайшего целого числа.
print(round(0.15865, 3))
# Вывод: 0.159
print(round(32.23124, 3))
# Вывод: 32.231
print(round(-8.87231))
# Вывод: -9
print(round(14.5))
# Вывод: 14
3. Каким будет результат каждого вызова функции round() и почему?
value = 3.14159265
print(round(value, 2))
print(round(value, 4))
print(round(value, 0))
3.14
3.1416
3.0
В каждом случае функция round() округляет число до разного количества знаков после запятой.
4. Почему результаты round(2.5) и round(3.5) отличаются от того, что ожидается в традиционной математике?
В Python функция round() использует банковское округление (округление до ближайшего чётного), поэтому round(2.5) округляет число до 2, а round(3.5) – до 4.
5. Попробуйте выполнить все операции в уме и предсказать, какое значение будет выведено в конце:
initial_number = -2.75
# Шаг 1: Найти модуль числа
step1 = abs(initial_number)
# Шаг 2: Округлить результат
step2 = round(step1)
# Шаг 3: Возвести результат в третью степень
final_result = pow(step2, 3)
print(final_result)
step1 = 2.75
step2 = 3
final_result = 27
6. В чём заключается разница между pow(5, 3) и pow(5, 3, 2)?
print(pow(5, 3)) # Эквивалентно 5 ** 3
# Вывод: 125
print(pow(5, 3, 2)) # Эквивалентно 5 ** 3 % 2
# Вывод: 1
Функция pow(5, 3) просто вычисляет степень, а pow(5, 3, 2) дополнительно берёт остаток от деления.
0 комментариев