Математические функции: модуль math для школьных задач
💻 Информатика · 9 класс
Гипотенуза, направленное округление, площадь круга, НОД и факториал: проверяем аргументы и выбираем подходящие математические функции.

Что такое модуль math
math — модуль стандартной библиотеки: import math, затем вызовы вида math.sqrt(16). Примеры рассчитаны на Python 3.9 и новее; отдельные функции появились позже первых выпусков Python 3. Полный список функций большой, но ученику нужен короткий набор, который мы и разберём на задачах.
Пример 1. Гипотенуза
По теореме Пифагора c = корень(a² + b²). Функция math.hypot(a, b) вычисляет евклидову длину и помогает избежать некоторых проблем промежуточного возведения в квадрат. Это по-прежнему вычисление с конечной точностью, а не символическое доказательство.
import math
def hypotenuse(a, b):
return math.hypot(a, b)
print(hypotenuse(3, 4)) # 5.0
print(hypotenuse(5, 12)) # 13.0Проверка классическими тройками 3-4-5 и 5-12-13: функция возвращает вещественное число, поэтому сравнивайте через == 5.0 или math.isclose для дробных значений.
Пример 2. Сколько автобусов заказать
Округление «вверх» нужно, когда недовезённые люди не годятся: 100 человек, 40 мест — автобусов нужно 3, а не 2. За это отвечает math.ceil. Её противоположность — math.floor (вниз): math.floor(3.7) == 3. Внимание: floor(-3.2) == -4, потому что «вниз» — это к меньшему числу, а не обрезание дробной части.
import math
def buses_needed(people, seats):
if people < 0:
raise ValueError('количество людей не может быть отрицательным')
if seats <= 0:
raise ValueError('в автобусе должно быть место хотя бы для одного человека')
return (people + seats - 1) // seats
print(buses_needed(100, 40)) # 3
print(buses_needed(80, 40)) # 2Функция предполагает целые people и seats. Для обычных небольших значений math.ceil(people / seats) показывает нужное округление. В коде используется равносильная целочисленная формула: она точна даже для очень больших счётчиков, когда деление через float уже может потерять единицу. Проверки отклоняют отрицательное количество людей и неположительную вместимость. Пограничный случай buses_needed(0, 40) == 0 — автобусы никому не нужны.
Пример 3. Площадь круга и призовые места
import math
def circle_area(radius):
if radius < 0:
raise ValueError('радиус не может быть отрицательным')
return math.pi * radius ** 2
def prize_places(n):
if n < 0:
raise ValueError('число участников не может быть отрицательным')
# золото и серебро: n вариантов первого места, n-1 второго
return n * (n - 1)Константа math.pi хранит число π с двойной точностью; circle_area(1) совпадёт с math.pi. Для целого неотрицательного n считаем два разных места без ничьих: золотого и серебряного призёров выбирают по порядку. Достаточно умножения n · (n − 1); при n меньше двух вариантов нет, но для очередей из n человек используют факториал: math.factorial(5) == 120. Факториал определён для n >= 0, при отрицательном аргументе функция выбросит ValueError — аргументы factorial должны быть целыми числами. Ошибка типа и ошибка значения — разные ситуации.
Мини-справочник
- math.sqrt(x) — квадратный корень; для отрицательного x — ValueError.
- math.ceil(x), math.floor(x) — округление вверх и вниз до целого.
- math.hypot(a, b) — гипотенуза; math.pi, math.e — константы.
- math.gcd(a, b) — наибольший общий делитель (в Python 3.9+ принимает много аргументов).
- math.factorial(n) — факториал только для целых n >= 0.
- math.comb(n, k) — число сочетаний (появилась в Python 3.8), math.isqrt(n) — целочисленный корень (с Python 3.8).
Проверь себя
- Что выведет math.ceil(2.1) и math.floor(-2.1)? Ответ: 3 и -3 — ceil всегда вверх, floor всегда вниз.
- Как вычислить расстояние от (0, 0) до точки (x, y)? Ответ: math.hypot(x, y).
- Что произойдёт при math.sqrt(-4)? Ответ: ValueError — вещественный корень из отрицательного числа не определён.
- math.gcd(12, 18)? Ответ: 6 — наибольший общий делитель.
Кратко о главном
Модуль math помогает решать задачи: корни, округления, гипотенузы, константы, НОД и факториал. Помните: ceil и floor работают по направлению, а не «обрезают» дробь, а sqrt отклоняет отрицательное вещественное значение через ValueError; factorial требует неотрицательный целый аргумент. Не рассчитывайте, что любая ошибка типа тоже будет ValueError.