Глиф Учебники

Случайное число в Python

Справочник · Python · 1 минута чтения

Python
import random

n = random.randint(1, 10)
print(n)

Программа выводит случайное целое число от 1 до 10 — при каждом запуске своё. У randint оба конца включены: может выпасть и 1, и 10.

Основные функции модуля random

ФункцияЧто даёт
random.randint(a, b)целое от a до b, оба включены
random.randrange(a, b)целое от a до b - 1, как в range
random.random()дробное от 0 до 1, 1 не включается
random.uniform(a, b)дробное от a до b
random.choice(seq)случайный элемент списка или строки
random.shuffle(lst)перемешивает список на месте
random.sample(seq, k)k разных элементов
Python
import random

colors = ["красный", "зелёный", "синий"]
print(random.choice(colors))
cards = [1, 2, 3, 4, 5]
random.shuffle(cards)
print(cards)
print(random.sample(range(1, 50), 6))

Каждый запуск — свой результат: случайный цвет, перемешанный список, шесть разных чисел от 1 до 49.

Проверить, что числа всегда в нужных границах, можно так — этот вывод от случая не зависит:

Python
import random

rolls = [random.randint(1, 6) for _ in range(1000)]
print(min(rolls) >= 1, max(rolls) <= 6)
print(len(rolls))
Вывод
True True
1000

Пример: игра «Угадай число»

Python
import random

secret = random.randint(1, 100)
tries = 0
while True:
    guess = int(input("Ваше число: "))
    tries += 1
    if guess < secret:
        print("Больше")
    elif guess > secret:
        print("Меньше")
    else:
        print("Угадано! Попыток:", tries)
        break

shuffle ничего не возвращает

random.shuffle меняет сам список и возвращает None. Запись cards = random.shuffle(cards) потеряет список: в cards окажется None. Пишите просто random.shuffle(cards). Если исходный список нужно сохранить, берите random.sample(cards, len(cards)) — он вернёт перемешанную копию.

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

Иногда нужно, чтобы «случайные» числа повторялись — например, чтобы проверить программу. Для этого задают начальное значение генератора random.seed:

Python
import random

random.seed(2026)
first = [random.randint(1, 100) for _ in range(5)]
random.seed(2026)
second = [random.randint(1, 100) for _ in range(5)]
print(first == second)
Вывод
True

После одного и того же seed последовательность чисел одна и та же. Без seed Python берёт начальное значение от системы, и числа каждый раз новые.

Пароли и коды — через secrets

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

Python
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

secrets.choice выбирает символ надёжно, secrets.token_hex(16) даёт 16 случайных байтов в виде 32 шестнадцатеричных знаков.

Подводные камни