Найти в Дзене
Герман Геншин

7 невероятных трюков с random в Python — ты не представляешь, что он умеет!

Хочешь добавить в свой скрипт немного случайности? Модуль random — это мощный инструмент для генерации случайных чисел, перемешивания списков и имитации реальных процессов. Эта библиотека настолько универсальна, что её используют почти все, кто пишет на Python. Давай покажу, как легко начать! random уже входит в стандартную библиотеку Python — ничего устанавливать не надо, просто импортируй его одной строкой. Готово! Теперь тебе доступны все функции для создания случайностей. Если тебе нужны только отдельные функции, советую писать from random import и список нужных — так код легче читать. Теперь можно вызывать, например, randint() и choice() без префикса random. Очень удобно, если используешь сразу несколько функций модуля. Главная задача random — выдавать случайные числа. Проще говоря, как будто у тебя электронные кости: любое значение из заданного диапазона. Для целых чисел подойдут randint() или randrange(). random.randint() — отличный выбор, если нужно целое число между двумя зна
Оглавление

Быстрые переходы

Хочешь добавить в свой скрипт немного случайности? Модуль random — это мощный инструмент для генерации случайных чисел, перемешивания списков и имитации реальных процессов. Эта библиотека настолько универсальна, что её используют почти все, кто пишет на Python. Давай покажу, как легко начать!

Импортируем модуль random

random уже входит в стандартную библиотеку Python — ничего устанавливать не надо, просто импортируй его одной строкой.

Готово! Теперь тебе доступны все функции для создания случайностей.

Если тебе нужны только отдельные функции, советую писать from random import и список нужных — так код легче читать.

Теперь можно вызывать, например, randint() и choice() без префикса random. Очень удобно, если используешь сразу несколько функций модуля.

Случайные числа и диапазоны

Главная задача random — выдавать случайные числа. Проще говоря, как будто у тебя электронные кости: любое значение из заданного диапазона. Для целых чисел подойдут randint() или randrange().

random.randint() — отличный выбор, если нужно целое число между двумя значениями, включая и начало, и конец диапазона. Например:

-2

Так ты получаешь имитацию броска кубика — числа от 1 до 6, оба варианта возможны.

А если нужна случайная выборка только из нечётных чисел от 1 до 10, выручит random.randrange(). Эта функция похожа на range(), только возвращает случайный элемент из нужного интервала. Например:

-3

Так можно на лету получить любое нечётное число из заданного промежутка.

Для вещественных чисел (float) есть два замечательных варианта. random.random() возвращает число от 0.0 до 1.0 (верхняя граница не входит):

В итоге получаешь дробное значение от 0 до 1 — отлично подходит для имитации вероятностей и долей.

Если нужен другой диапазон, используй random.uniform():

Например, «Случайная температура: 23.45°C» — удобно для погодных симуляций или тестирования.

Как случайно выбрать элементы из списка

Когда работаешь с данными — списками вариантов, имён или цветов — обычно нужно выбрать наугад один или несколько элементов. Для одного значения есть random.choice(seq).

Вот пример, как выбрать случайный цвет из списка:

-4

Эта функция работает с любыми последовательностями: списками, строками, кортежами или range. Если нужно выбрать сразу несколько значений, подойдут random.choices(seq, k=n) или random.sample(seq, k=n).
random.choices() возвращает список — элементы могут повторяться:

Например, так результат может быть ['красный', 'красный', 'синий'] — цвета встречаются несколько раз. Если же повторяться ничего не должно, используй random.sample():

Здесь элементы не будут повторяться, но помни: количество выбираемых (k) не должно превышать длину исходного списка.

Перемешиваем список в случайном порядке

Иногда хочется просто перетасовать элементы списка. Тут пригодится random.shuffle(). Важно: он меняет сам список — копию не делает!

-5

В этом примере порядок элементов полностью меняется. Если попробовать присвоить результат переменной, получишь None — функция возвращает именно это.

Чтобы исходный список остался нетронутым, предварительно скопируй его:

-6

В этом случае перемешивается только копия — основной список остаётся прежним.

Если работаешь с неизменяемой последовательностью (например, кортежем), используй sample() для «перемешивания»:

В результате получишь новый список, где элементы кортежа будут идти в случайном порядке.

Генерируем надёжные пароли и случайные строки

Если объединить random и модуль string, легко создать сложный пароль. Просто собери все нужные символы (буквы, цифры, спецзнаки), а random.choices() выберет из них нужное количество случайных знаков.

Вот простой генератор паролей:

-7

Здесь символы из всех групп собираются в одну строку, и из неё выбирается нужное количество знаков. Для простых случаев, например PIN или кода подтверждения, можно оставить только цифры:

Этот короткий скрипт выдаёт случайный шестизначный PIN — отлично подходит для авторизации или тестов.

Случайный выбор с разными шансами выпадения (весами)

Часто нужно, чтобы одни варианты выпадали чаще других. Например, в игре — редкая награда встречается реже обычной. В таком случае выручит параметр weights в random.choices(). Ты сам задаёшь, как часто должен выпадать каждый результат.

Показываю: выбираем награду, где золото встречается чаще всего, а бронза — совсем редко:

В этом примере шансы такие: золото — 60%, серебро — 30%, бронза — 10%. Отличный способ реализовать редкие призы.

Можно использовать «накопительные» веса: у каждого элемента шанс — это сумма всех предыдущих. Такой вариант быстрее отрабатывает на длинных списках.

В целом, шансы остаются такими же, но вычисления идут быстрее. Обычные веса задают вероятность отдельно каждому элементу, а кумулятивные — нарастающим итогом.

Как «зафиксировать» случайность: seed для повторяемости

Случайность — это круто, но иногда важна предсказуемость. Например, для тестирования, отладки или научных экспериментов нужен одинаковый результат при каждом запуске.

Компьютер генерирует не настоящую случайность, а вычисляет её по формуле, где начальное число называется seed. Если указать один и тот же seed — последовательность случайных чисел всегда будет одинаковой.

Вот как зафиксировать seed с помощью random.seed():

При повторном запуске этого кода с тем же числом на входе ты получишь тот же результат.

Так легко тестировать и ловить редкие баги. Если seed не задать, будет использоваться текущее время или другие внешние данные, и итог всегда разный.

Генерация случайных дат и времени

Сам по себе random не выдаёт ни даты, ни время. Но если использовать его вместе с datetime, можно делать реалистичные тестовые данные буквально в пару строк.

Всё просто: выбираешь начальную и конечную дату, считаешь разницу в днях — и случайным образом выбираешь внутри этого промежутка.

Этот код рассчитывает, сколько дней между двумя датами, случайно выбирает число дней и прибавляет их к стартовой дате. Если хочешь работать с часами, минутами и секундами — оперируй количеством секунд.

-8

С помощью такого подхода можно быстро создавать подборки реалистичных данных — например, логин-попытки пользователей, погоду или историю событий. Вместе random и datetime наполняют проекты жизнью и делают данные похожими на настоящие.

В Python собрано немало полезных инструментов, которые экономят время и решают любые задачи — от автоматизации работы с файлами до анализа больших баз данных. На все случаи жизни найдётся свой модуль.

Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!

Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь

Также подписывайтесь на нас в: