Урок 38 math и random

Математические вычисления и генерация случайных чисел

⏱ ~10 мин чтения· 📘 Базовый

Модуль 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
```python import math

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

Итоги

МодульФункцияНазначение
mathsqrt(x)Квадратный корень
mathceil/floor/truncОкругление
mathsin/cos/tanТригонометрия (в радианах)
mathlog/log10/log2Логарифмы
mathpi, e, tauМатематические константы
randomrandint(a, b)Случайное целое [a, b]
randomchoice(seq)Случайный элемент
randomshuffle(list)Перемешивание на месте
randomsample(seq, k)k уникальных элементов
randomseed(n)Фиксация зерна для повторяемости