Модуль math — математика в Python
Модуль math предоставляет доступ к основным математическим функциям и константам. Это стандартный модуль — устанавливать ничего не нужно.
import math
Константы
import math
print(math.pi) # 3.141592653589793 — число π
print(math.e) # 2.718281828459045 — число Эйлера (e)
print(math.tau) # 6.283185307179586 — τ = 2π
print(math.inf) # бесконечность
print(math.nan) # не число (Not a Number)
Округление
| Функция | Описание | Пример |
|---|---|---|
ceil(x) | Округление вверх | math.ceil(3.1) → 4 |
floor(x) | Округление вниз | math.floor(3.9) → 3 |
trunc(x) | Отбрасывание дробной части | math.trunc(-3.9) → -3 |
print(math.ceil(3.1)) # 4 print(math.floor(3.9)) # 3 print(math.trunc(-3.9)) # -3
## Корни, степени, логарифмы
```python
import math
# Квадратный корень
print(math.sqrt(25)) # 5.0
# Возведение в степень (аналог **), но возвращает float
print(math.pow(2, 10)) # 1024.0
# Натуральный логарифм (по основанию e)
print(math.log(math.e)) # 1.0
# Логарифм по основанию 10
print(math.log10(100)) # 2.0
# Логарифм по основанию 2
print(math.log2(8)) # 3.0
# Экспонента: e^x
print(math.exp(2)) # 7.38905609893065
Тригонометрия
Важно: все тригонометрические функции работают с радианами, а не с градусами!
import math
# sin, cos, tan принимают угол в радианах
print(math.sin(math.pi / 2)) # 1.0 — синус 90°
print(math.cos(math.pi)) # -1.0 — косинус 180°
print(math.tan(0)) # 0.0 — тангенс 0°
# Конвертация градусы ↔ радианы
print(math.radians(180)) # 3.14159... — 180° в радианах
print(math.degrees(math.pi)) # 180.0 — π радиан в градусах
# Обратные тригонометрические функции
print(math.asin(1)) # 1.57079... — arcsin(1) = π/2
print(math.atan2(1, 1)) # 0.78539... — угол вектора (1, 1) в радианах
# Гипотенуза: sqrt(x² + y²)
print(math.hypot(3, 4)) # 5.0
Модуль random — случайные числа
Модуль random генерирует псевдослучайные числа. Отлично подходит для игр, симуляций, случайного выбора.
import random
⚠️ Важно: для криптографических целей используйте модуль
secrets, а неrandom.randomне обеспечивает криптографическую стойкость.
random.randint() и random.randrange()
import random
# Случайное целое от a до b ВКЛЮЧИТЕЛЬНО
print(random.randint(1, 10)) # например, 7
# Случайное целое из range(start, stop, step)
print(random.randrange(0, 100, 5)) # например, 45 (одно из 0, 5, 10, ..., 95)
# Случайное число от 0.0 до 1.0 (не включая 1.0)
print(random.random()) # например, 0.723459...
random.choice() и random.choices()
import random
fruits = ['яблоко', 'банан', 'апельсин', 'груша']
# Случайный элемент из последовательности
print(random.choice(fruits)) # например, апельсин
# Несколько случайных элементов с возвращением (могут повторяться)
print(random.choices(fruits, k=3)) # ['яблоко', 'яблоко', 'груша']
# Несколько случайных элементов БЕЗ возвращения (без повторов)
print(random.sample(fruits, k=2)) # ['банан', 'груша']
random.shuffle() — перемешивание
shuffle перемешивает список на месте (изменяет исходный список).
import random
cards = ['A', 'K', 'Q', 'J', '10', '9']
random.shuffle(cards)
print(cards) # ['Q', 'A', '9', 'K', '10', 'J'] — случайный порядок
random.seed() — воспроизводимость
Для отладки или повторяемых экспериментов можно зафиксировать «зерно» генератора:
import random
random.seed(42)
print(random.randint(1, 100)) # всегда 82
random.seed(42)
print(random.randint(1, 100)) # снова 82 — последовательность повторяется
Практический пример: генератор паролей
import random
import string
def generate_password(length=12):
"""Генерирует случайный пароль заданной длины."""
chars = string.ascii_letters + string.digits + "!@#$%&*"
password = ''.join(random.choices(chars, k=length))
return password
print(generate_password(16))
# Пример вывода: aB3#xK9!mN2&qW5p
Итоги
| Модуль | Функция | Назначение |
|---|---|---|
| math | sqrt(x) | Квадратный корень |
| math | ceil/floor/trunc | Округление |
| math | sin/cos/tan | Тригонометрия (в радианах) |
| math | log/log10/log2 | Логарифмы |
| math | pi, e, tau | Математические константы |
| random | randint(a, b) | Случайное целое [a, b] |
| random | choice(seq) | Случайный элемент |
| random | shuffle(list) | Перемешивание на месте |
| random | sample(seq, k) | k уникальных элементов |
| random | seed(n) | Фиксация зерна для повторяемости |