Глава 5 · Давайте поиграем с числами!

choice, choices, sample, shuffle

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

Кроме случайных чисел, random умеет случайно выбирать из готового набора значений — списка вариантов, колоды карт, списка имён.

Четыре похожих, но разных инструмента

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

choice() — один случайный элемент

choice.py
import random

varianty = ["камень", "ножницы", "бумага"]
print(random.choice(varianty))

choices() — несколько, с возможными повторами

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

choices.py
import random

prizy = ["🎁", "🎈", "🎉"]
vypavshie = random.choices(prizy, k=5)
print(vypavshie)   # например, ["🎈", "🎈", "🎁", "🎉", "🎈"] — повторы допустимы
У choices() есть необязательные веса
random.choices(prizy, weights=[1, 1, 10], k=5) сделает третий приз в десять раз вероятнее остальных — полезно для «нечестных» кубиков или систем с разной редкостью наград.

sample() — несколько, без повторов

Представим розыгрыш призов среди участников — один и тот же участник не может выиграть дважды в одном розыгрыше:

sample.py
import random

uchastniki = ["Аня", "Борис", "Вера", "Глеб", "Дана"]
pobediteli = random.sample(uchastniki, k=2)
print(pobediteli)   # например, ["Вера", "Аня"] — все разные
k не может быть больше длины набора
random.sample(uchastniki, k=10) при 5 участниках вызовет ValueError — без повторов невозможно выбрать больше элементов, чем есть в наборе. У choices() такого ограничения нет, потому что повторы разрешены.

shuffle() — перемешать всё на месте

В отличие от трёх функций выше, shuffle() не выбирает подмножество — она перемешивает весь список и ничего не возвращает (None), потому что изменяет список прямо «на месте»:

shuffle.py
import random

koloda = [1, 2, 3, 4, 5]
random.shuffle(koloda)
print(koloda)   # например, [3, 1, 5, 2, 4] — тот же список, новый порядок
shuffle() возвращает None — не переприсваивайте результат
koloda = random.shuffle(koloda) — частая ошибка: после неё koloda станет None, хотя перемешивание уже прошло успешно ДО присваивания. Просто вызовите random.shuffle(koloda) отдельной строкой.
Практика: choice, choices, sample, shuffle
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →