Все разделы
Выбрать школу

Школа. Увлечения. Большое будущее.

PROSCHOOLS · ОБРАЗОВАНИЕ РЯДОМ

Ваш город

Выберите город, чтобы находить образование и возможности рядом.

Как учитываем городКаталог и кнопки «Выбрать школу» покажут школы выбранного города.Онлайн-курсы, учебник, ГДЗ и задания к экзаменам доступны по всей России.

Популярные города

Будет выбран: Вся Россия

Учебные материалы останутся прежними.

Поиск по сайту

По всему сайтуШколы выбранного города — выше в результатах

С чего начнём?

↑ ↓ — выбрать результат · Enter — открыть · Esc — закрыть

Математические функции: модуль math для школьных задач

💻 Информатика · 9 класс

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

Клавиатура в компьютерном классе
Иллюстрация к предмету «Информатика»Hmartil · Wikimedia Commons · CC BY-SA 4.0

Что такое модуль 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 должны быть целыми числами. Ошибка типа и ошибка значения — разные ситуации.

Мини-справочник

  1. math.sqrt(x) — квадратный корень; для отрицательного x — ValueError.
  2. math.ceil(x), math.floor(x) — округление вверх и вниз до целого.
  3. math.hypot(a, b) — гипотенуза; math.pi, math.e — константы.
  4. math.gcd(a, b) — наибольший общий делитель (в Python 3.9+ принимает много аргументов).
  5. math.factorial(n) — факториал только для целых n >= 0.
  6. math.comb(n, k) — число сочетаний (появилась в Python 3.8), math.isqrt(n) — целочисленный корень (с Python 3.8).

Проверь себя

  1. Что выведет math.ceil(2.1) и math.floor(-2.1)? Ответ: 3 и -3 — ceil всегда вверх, floor всегда вниз.
  2. Как вычислить расстояние от (0, 0) до точки (x, y)? Ответ: math.hypot(x, y).
  3. Что произойдёт при math.sqrt(-4)? Ответ: ValueError — вещественный корень из отрицательного числа не определён.
  4. math.gcd(12, 18)? Ответ: 6 — наибольший общий делитель.

Кратко о главном

Модуль math помогает решать задачи: корни, округления, гипотенузы, константы, НОД и факториал. Помните: ceil и floor работают по направлению, а не «обрезают» дробь, а sqrt отклоняет отрицательное вещественное значение через ValueError; factorial требует неотрицательный целый аргумент. Не рассчитывайте, что любая ошибка типа тоже будет ValueError.

Связанные материалы

Источники и материалы