Случайное число в 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 разных элементов |
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.
Проверить, что числа всегда в нужных границах, можно так — этот вывод от случая не зависит:
import random
rolls = [random.randint(1, 6) for _ in range(1000)]
print(min(rolls) >= 1, max(rolls) <= 6)
print(len(rolls))True True
1000Пример: игра «Угадай число»
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)
breakshuffle ничего не возвращает
random.shuffle меняет сам список и возвращает None. Запись cards = random.shuffle(cards) потеряет список: в cards окажется None. Пишите просто random.shuffle(cards). Если исходный список нужно сохранить, берите random.sample(cards, len(cards)) — он вернёт перемешанную копию.
Одинаковые числа при каждом запуске: seed
Иногда нужно, чтобы «случайные» числа повторялись — например, чтобы проверить программу. Для этого задают начальное значение генератора random.seed:
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:
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
32secrets.choice выбирает символ надёжно, secrets.token_hex(16) даёт 16 случайных байтов в виде 32 шестнадцатеричных знаков.
Подводные камни
- Не называйте свой файл
random.py: тогдаimport randomзагрузит его вместо настоящего модуля, и появится ошибкаAttributeError: module 'random' has no attribute 'randint'. random.randint(1, 10)включает 10, аrandom.randrange(1, 10)— нет.random.choice([])для пустого списка даёт ошибкуIndexError.