Модуль random в Python: как получить случайное число и выбрать элемент списка

Модуль random входит в стандартную библиотеку Python: randint(1, 10) даёт целое число от 1 до 10 включительно, choice() выбирает элемент списка, shuffle() перемешивает его.

Разбираем все функции на примерах с выводом, показываем, как повторить результат через seed и почему пароли генерируют модулем secrets.

Статью написал:
Ваня Буявец, продюсер, основатель Checkroi
Ваня Буявец
Основатель Checkroi, продюсер, эксперт в выборе онлайн-курсов
Все 3030 статей автора Подписаться на Телеграм-канал
Одобрено экспертом:
Наташа Буявец, основатель Checkroi, эксперт по онлайн-курсам
Наташа Буявец
Основательница Checkroi, продюсер Youtube-каналов, эксперт по онлайн-курсам
Все 3684 экспертных мнения Подписаться на Телеграм-канал
Обложка: Модуль random в Python: как получить случайное число и выбрать элемент списка

Чтобы получить случайное число в Python, подключите модуль random и вызовите нужную функцию: random.randint(1, 10) вернёт целое от 1 до 10 включительно, random.random() даст дробное от 0 до 1, а random.choice(список) выберет случайный элемент. Модуль входит в стандартную библиотеку, скачивать и устанавливать его не нужно.

Ниже разобраны все функции, которые нужны в обычных задачах: целые и дробные числа, выбор из списка, перемешивание, повторяемый результат через seed(). В конце три маленькие программы и пять ошибок, на которых новички теряют время. Если вы только знакомитесь с языком, сначала пролистайте основные команды Python.

CheckroiCheckroiПодборка курсов по Python568 курсов • 51 школаСравните цены, школы, программу и найдите выгодные предложения по обучениюСравнить→

Как подключить модуль random

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

Модуль подключают одной строкой в начале файла. Дальше функции вызывают через точку:

import random

random.seed(42)
print(random.randint(1, 10))
print(random.random())
print(random.choice(["камень", "ножницы", "бумага"]))
2
0.025010755222666936
ножницы

Строка random.seed(42) здесь нужна только затем, чтобы у вас вывелись те же значения, что в статье. В обычной программе её не пишут, и каждый запуск даёт новые числа.

Вывод в примерах получен на Python 3.14. В других версиях при том же seed числа могут выйти другими: по документации о воспроизводимости большинство алгоритмов модуля может меняться от версии к версии, гарантированно повторяется только последовательность самой random().

Если одна функция нужна часто, её импортируют по имени, и точка уже не нужна:

from random import randint

print(randint(1, 6))

Как устроен сам вызов функции и что такое аргументы, подробно показано в статье о функциях в Python.

Случайное целое и дробное число

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

Функция Что возвращает Правая граница
randint(a, b) целое от a до b входит
randrange(start, stop, step) целое из range(start, stop, step) не входит
random() дробное от 0.0 до 1.0 не входит
uniform(a, b) дробное между a и b может войти из-за округления

Так это выглядит в коде:

import random

random.seed(7)
print(random.randint(1, 6))         # кубик: от 1 до 6 включительно
print(random.randrange(10))         # от 0 до 9, десятка не выпадет
print(random.randrange(0, 101, 5))  # число от 0 до 100, кратное 5
print(random.random())              # дробное от 0.0 до 1.0, единица не выпадет
print(random.uniform(1.5, 2.5))     # дробное между 1.5 и 2.5
3
2
60
0.6509344730398537
1.5724362866675428

randint или randrange

В документации Python randint(a, b) описана как псевдоним для randrange(a, b+1). Поэтому randint(1, 10) и randrange(1, 11) работают одинаково.

Берите randint, когда граница понятна человеку: кубик, оценка от 1 до 5, номер дня месяца. randrange удобнее, когда нужен шаг, например только чётные числа или числа, кратные десяти.

Дробные числа с нужным количеством знаков

uniform() возвращает длинный хвост после запятой. Для цены или веса его округляют встроенной round():

import random

random.seed(3)
price = random.uniform(100, 500)
print(price)
print(round(price, 2))
195.18585083675654
195.19

Если важна точность до копейки, считайте в копейках через randint(10000, 50000), а при выводе делите на 100. Целые числа не дают ошибок округления, о которых подробнее рассказано в разборе операторов Python.

Список случайных чисел

Десяток значений собирают генератором списка:

import random

random.seed(11)
numbers = [random.randint(1, 100) for _ in range(10)]
print(numbers)
[58, 72, 100, 60, 58, 66, 76, 25, 24, 66]

Числа в таком списке могут повторяться: 58 и 66 встретились дважды. Нужны неповторяющиеся, используйте random.sample(range(1, 101), k=10) из следующего раздела.

Канал основателя Checkroi Вани Буявца3 700 человек читают мой Телеграм-канал про нейросетиСобрал промпты для Claude Code и ChatGPT, разборы ИИ-инструментов и лайфхаки по продвижению бизнеса в одном местеПрисоединиться

Случайный элемент списка: choice, choices, sample и shuffle

Карточки с именами, одна вытянута из перемешанной колоды

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

Функция Сколько элементов Повторы Меняет исходный список
choice(seq) один — нет
choices(seq, k=N) N возможны нет
sample(seq, k=N) N нет нет
shuffle(list) все нет да, перемешивает на месте
import random

random.seed(5)
players = ["Аня", "Борис", "Вика", "Гоша", "Дина"]

print(random.choice(players))                # один игрок
print(random.choices(players, k=3))          # трое, повторы возможны
print(random.sample(players, k=3))           # трое разных
random.shuffle(players)                      # перемешать сам список
print(players)
Дина
['Борис', 'Борис', 'Гоша']
['Дина', 'Аня', 'Борис']
['Дина', 'Вика', 'Гоша', 'Аня', 'Борис']

Во второй строке Борис выпал дважды: так choices и работает. Если исходный порядок ещё понадобится, получите перемешанную копию: random.sample(players, k=len(players)). Как потом вернуть элементы по порядку, показано в статье про метод sort().

Выбор с весами

У choices() есть параметр weights: чем больше вес, тем чаще выпадает элемент. Так делают колесо призов или редкие находки в играх:

import random

random.seed(1)
prizes = ["скидка 5 %", "скидка 10 %", "бесплатная доставка"]
weights = [70, 20, 10]

print(random.choices(prizes, weights=weights, k=5))
['скидка 5 %', 'скидка 10 %', 'скидка 10 %', 'скидка 5 %', 'скидка 5 %']

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

seed: как получить одинаковые числа при каждом запуске

Модуль выдаёт псевдослучайные числа: их считает формула (алгоритм Mersenne Twister), а стартовую точку задаёт «зерно». Если зерно не задать, Python возьмёт его из источника случайности операционной системы, а без него из текущего времени, и запуски будут разными. Если задать одно и то же, последовательность повторится:

import random

random.seed(2026)
print([random.randint(1, 6) for _ in range(5)])

random.seed(2026)
print([random.randint(1, 6) for _ in range(5)])
[1, 3, 5, 5, 6]
[1, 3, 5, 5, 6]

Это нужно в тестах, в учебных задачах и в анализе данных, где коллега должен получить ту же выборку, что и вы.

Когда в программе два независимых источника случайности, например кубик и монетка, удобно завести для каждого свой генератор. Тогда seed одного не сдвигает другой:

import random

dice = random.Random(10)
coin = random.Random(20)

print(dice.randint(1, 6), dice.randint(1, 6))
print(coin.choice(["орёл", "решка"]))
5 1
орёл

Когда random не подходит: пароли и токены

В документации модуля прямо сказано, что генераторы random не стоит использовать для задач безопасности. Они рассчитаны на моделирование и симуляции.

Для паролей, кодов подтверждения и токенов есть встроенный модуль secrets. Синтаксис почти тот же:

import secrets
import string

alphabet = string.ascii_letters + string.digits
password = "".join(secrets.choice(alphabet) for _ in range(12))
print(len(password))
print(len(secrets.token_hex(16)))
12
32

Сами пароли здесь не печатаются: у вас они будут другими при каждом запуске. Повторить их через seed не выйдет: secrets берёт случайность у операционной системы. token_hex(16) берёт 16 случайных байт и записывает каждый двумя шестнадцатеричными цифрами, отсюда 32 символа.

Правило: для игр, симуляций и тестовых данных берите random. Для всего, что защищает доступ, берите secrets.

Три программы на random

Рой радуется: игра угадала число с четвёртой попытки

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

Игра «Угадай число»

Программа загадывает число от 1 до 100 и подсказывает «больше» или «меньше». Здесь пригодятся цикл while и ввод числа через int(input()):

import random

secret = random.randint(1, 100)
attempts = 0

while True:
    guess = int(input("Ваше число: "))
    attempts += 1
    if guess < secret:
        print("Больше")
    elif guess > secret:
        print("Меньше")
    else:
        print(f"Угадали с {attempts}-й попытки")
        break

Один из запусков, где загадано 31, а игрок ввёл 50, 25, 37 и 31:

Ваше число: 50
Меньше
Ваше число: 25
Больше
Ваше число: 37
Меньше
Ваше число: 31
Угадали с 4-й попытки

Рандомайзер: победители розыгрыша

sample() возвращает участников в порядке выбора, поэтому первого можно назначить главным призёром:

import random

random.seed(8)
participants = ["Аня", "Борис", "Вика", "Гоша", "Дина", "Егор", "Женя"]
winners = random.sample(participants, k=3)

print("Главный приз:", winners[0])
print("Утешительные:", winners[1:])
Главный приз: Борис
Утешительные: ['Вика', 'Гоша']

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

10 000 бросков двух кубиков

Симуляция показывает, почему в настольных играх семёрка выпадает чаще остальных сумм:

import random
from collections import Counter

random.seed(100)
rolls = [random.randint(1, 6) + random.randint(1, 6) for _ in range(10_000)]
counts = Counter(rolls)

for total in range(2, 13):
    print(total, counts[total])
2 251
3 565
4 822
5 1119
6 1407
7 1655
8 1364
9 1137
10 818
11 574
12 288

Семёрка набралась 1655 раз, то есть в 16,55 % бросков. Теория даёт 6 комбинаций из 36, около 16,7 %, и симуляция легла почти точно.

Ваня БуявецКанал основателя Checkroi Вани БуявцаЗабирайте промпты и обучение по нейросетям в моём Телеграм-каналеБольше 3 700 человек уже применяют Claude Code, ChatGPT и другие нейросети в работе, учёбе, бизнесе и жизниПерейти в канал

Частые ошибки

Пять ситуаций, которые чаще всего ломают код с random.

Свой файл назван как модуль

Симптом: файл со скриптом называется random.py, а при запуске выходит AttributeError: module 'random' has no attribute 'randint'.

Причина: Python сначала ищет модуль в папке скрипта и импортирует ваш файл вместо стандартного. Python 3.14 прямо пишет в ошибке «consider renaming», то есть советует переименовать файл.

Решение: назовите файл иначе, например game.py, и удалите рядом папку __pycache__, если она появилась.

shuffle вернул None

cards = ["A", "K", "Q", "J"]
result = random.shuffle(cards)
print(result)   # None

shuffle ничего не возвращает, он меняет сам список. Печатайте сам список cards.

IndexError на пустом списке

random.choice([]) падает с IndexError: Cannot choose from an empty sequence. Перед выбором проверьте, что в списке что-то есть: if items: random.choice(items).

sample от множества или с k больше списка

  • random.sample({"a", "b", "c"}, 2) с Python 3.11 даёт TypeError: Population must be a sequence. Превратите множество в список: sorted(my_set).
  • random.sample([1, 2, 3], 5) даёт ValueError: Sample larger than population or is negative. Без повторов из трёх элементов пять не выбрать, нужен choices.

Дробные границы в randrange

random.randrange(10.0) с Python 3.12 падает с TypeError. В старых версиях дробь с нулём после точки, вроде 10.0, приводилась к целому автоматически. Если граница пришла из деления, оберните её в int() или используйте целочисленное деление //.

Случайное число без программы: python -m random

С Python 3.13 модуль запускается прямо из терминала. Это удобно, когда нужно быстро бросить кубик или выбрать, кто пойдёт за кофе:

python3 -m random 6
python3 -m random --choice чай кофе какао
python3 -m random -f 1.5
2
кофе
0.9611977017718187

Целое число даёт результат от 1 до N включительно, дробное даёт число от 0 до N, несколько слов дают случайное из них. На Windows вместо python3 обычно пишут py или python, подробнее в инструкции как запустить скрипт через командную строку.

Где освоить Python системно

Модуль random закрывает игры и тестовые данные, но это небольшая часть стандартной библиотеки. На курсах его проходят рядом с циклами и списками, а потом переходят к файлам, классам и сторонним библиотекам.

Ниже курсы из каталога по Python с ценами и отзывами. Если хотите сменить работу, посмотрите программы по профессии Python-разработчик.

КурсШколаСтоимость со скидкойВ рассрочкуДлитель­ностьОбзор курса от Checkroi
Профессия «Python-разработчик»
Перейти на сайт курса
SkillboxSkillbox157 335 ₽5987 ₽/мес.10 месяцевОбзор курса
Fullstack-разработчик на Python
Перейти на сайт курса
НетологияНетология137 000 ₽7125 ₽/мес.21 месяцОбзор курса
ДО Профессия Python-разработчик
Перейти на сайт курса
GeekBrainsGeekBrains149 001 ₽3167 ₽/мес.10 месяцевОбзор курса
Автоматизированное тестирование на Python
Перейти на сайт курса
SkillboxSkillbox122 226 ₽4108 ₽/мес.9 месяцевОбзор курса
Программирование на Python ПРО
Перейти на сайт курса
SkillboxSkillbox119 600 ₽ - 17 месяцевОбзор курса

Больше программ — в полном каталоге курсов по Python

Часто задаваемые вопросы

Что такое рандом в Python?

Так в обиходе называют случайный выбор. В Python за него отвечает встроенный модуль random: он выдаёт случайные целые и дробные числа, выбирает элементы из списка и перемешивает их. Числа там псевдослучайные, их считает алгоритм Mersenne Twister.

Нужно ли скачивать или устанавливать модуль random?

Нет. Модуль входит в стандартную библиотеку Python, ставить его через pip не нужно. Достаточно написать в начале файла import random.

Как получить случайное число от 1 до 10 в питоне?

Вызовите random.randint(1, 10): обе границы входят в результат, поэтому может выпасть и 1, и 10. Для дробного числа в том же диапазоне подойдёт random.uniform(1, 10).

Чем randint отличается от randrange?

randint(a, b) включает правую границу, randrange(start, stop) её не включает и умеет шаг. По документации Python randint(a, b) работает как randrange(a, b+1).

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

Один элемент даёт random.choice(список). Несколько разных элементов даёт random.sample(список, k=3), а несколько с возможными повторами даёт random.choices(список, k=3).

Можно ли генерировать пароли через random?

Нет, в документации Python сказано, что генераторы random не стоит использовать для задач безопасности. Для паролей и токенов есть встроенный модуль secrets с функциями secrets.choice() и secrets.token_hex().

Читайте Checkroi первым в Google
Добавьте Checkroi в избранные источники — и наши разборы курсов и обзоры школ будут показываться выше в вашей выдаче Google.
Оставить комментарий
0 комментариев
Форма комментария

Оставьте комментарий

Напишите, что думаете. Нам важно ваше мнение!