Чтобы получить случайное число в Python, подключите модуль random и вызовите нужную функцию: random.randint(1, 10) вернёт целое от 1 до 10 включительно, random.random() даст дробное от 0 до 1, а random.choice(список) выберет случайный элемент. Модуль входит в стандартную библиотеку, скачивать и устанавливать его не нужно.
Ниже разобраны все функции, которые нужны в обычных задачах: целые и дробные числа, выбор из списка, перемешивание, повторяемый результат через seed(). В конце три маленькие программы и пять ошибок, на которых новички теряют время. Если вы только знакомитесь с языком, сначала пролистайте основные команды Python.
Как подключить модуль 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) из следующего раздела.
Случайный элемент списка: 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 %, и симуляция легла почти точно.
Частые ошибки
Пять ситуаций, которые чаще всего ломают код с 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-разработчик» Перейти на сайт курса | 157 335 ₽ | 5987 ₽/мес. | 10 месяцев | Обзор курса | |
| Fullstack-разработчик на Python Перейти на сайт курса | 137 000 ₽ | 7125 ₽/мес. | 21 месяц | Обзор курса | |
| ДО Профессия Python-разработчик Перейти на сайт курса | 149 001 ₽ | 3167 ₽/мес. | 10 месяцев | Обзор курса | |
| Автоматизированное тестирование на Python Перейти на сайт курса | 122 226 ₽ | 4108 ₽/мес. | 9 месяцев | Обзор курса | |
| Программирование на Python ПРО Перейти на сайт курса | 119 600 ₽ | - | 17 месяцев | Обзор курса |
Больше программ — в полном каталоге курсов по Python




