Основные способы получения случайных int в Python

Раздел: Основы Python -> Случайные числа

Основные методы генерации случайных целых чисел

В Python для получения случайных целых чисел чаще всего используется модуль random. Он предоставляет несколько функций, подходящих для разных задач. В этом разделе рассмотрим основные подходы.

Как получить случайное целое число из диапазона [a, b]?

Самый распространенный способ - функция random.randint(a, b). Она возвращает случайное целое число N такое, что a <= N <= b. Обе границы включены.

import random

# случайное число от 1 до 10
num = random.randint(1, 10)
print(num)

Python случайное число в диапазоне (генерация случайного числа в заданном диапазоне в python)

Типичная ошибка: забывают импортировать random или путают с randrange (где верхняя граница не включена). Также randint не подходит для криптографических задач.

Как получить случайное число с заданным шагом?

Функция random.randrange(start, stop[, step]) возвращает случайный элемент из range(start, stop, step). Верхняя граница stop не включается.

import random
# четные числа от 0 до 9 (0,2,4,6,8)
num = random.randrange(0, 10, 2)
print(num)

Python список случайных чисел (генерация списка случайных чисел в python)

Распространенная проблема: если step не кратен разнице start и stop, некоторые числа могут быть маловероятны. Например, randrange(1, 10, 2) дает {1,3,5,7,9} - все равновероятны, но программа может ожидать другие.

Как выбрать случайное число из заданного набора?

Функция random.choice(seq) выбирает один случайный элемент из непустой последовательности. Полезна, когда нужны не все числа диапазона, а только некоторые.

import random
# выбор одного из чисел 2,4,6,8
num = random.choice([2, 4, 6, 8])
print(num)

Python random int (генерация случайных целых чисел в python)

Ошибка: передача пустой последовательности вызывает IndexError. Следует проверять, что список не пуст.

Как получить несколько уникальных случайных чисел?

Функция random.sample(population, k) возвращает список из k уникальных элементов из population. Идеально для выбора неповторяющихся чисел из диапазона.

import random
# 5 неповторяющихся чисел от 0 до 49
unique = random.sample(range(50), 5)
print(unique)

Python случайное число (случайное число в python)

Проблема: если k больше длины population, возникает ValueError. Нужно убедиться, что выборка возможна.

Как сгенерировать криптостойкое случайное целое?

Для задач, требующих безопасности (пароли, токены), используйте модуль secrets. Функция secrets.randbelow(n) возвращает случайное целое в диапазоне [0, n).

import secrets
# криптостойкое число от 0 до 999
secure = secrets.randbelow(1000)
print(secure)

Import random python (импорт модуля random в python)

Важно: модуль random не является криптостойким. Использование secrets гарантирует непредсказуемость.

Как сделать последовательность воспроизводимой?

Функция random.seed(a) инициализирует генератор случайных чисел. При одинаковом seed последовательность повторяется. Полезно для тестирования и отладки.

import random
random.seed(42)
print(random.randint(1,100))
random.seed(42)
print(random.randint(1,100))  # то же значение

Random числа python (генерация случайных чисел в python)

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

Как сгенерировать массив случайных целых чисел?

Библиотека NumPy предоставляет функцию numpy.random.randint для создания массивов случайных целых чисел. Удобно для научных расчетов.

import numpy as np
# массив 5 случайных int от 0 до 9
arr = np.random.randint(0, 10, size=5)
print(arr)

Python random number (генерация случайного числа random python)

Замечание: в старых версиях NumPy используется другой API. Рекомендуется обновить библиотеку.

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

Функция random.getrandbits(k) возвращает целое число с k случайными битами. Полезна для генерации больших случайных чисел.

import random
# 64-битное случайное число
big = random.getrandbits(64)
print(big)

Ограничение: getrandbits не является криптостойким. Для безопасных больших чисел используйте secrets.randbits.

Расширенные примеры использования

Бросок двух игральных кубиков

Пример
import random
dice1 = random.randint(1,6)
dice2 = random.randint(1,6)
print(f'Кубик1: {dice1}, Кубик2: {dice2}, Сумма: {dice1+dice2}')
Кубик1: 4, Кубик2: 2, Сумма: 6

Генерация PIN-кода из 4 цифр

Пример
import random
pin = ''.join(str(random.randint(0,9)) for _ in range(4))
print(pin)
3782

Случайное число с исключением некоторых значений

Пример
import random
excluded = {5,7,9}
possible = [x for x in range(1,11) if x not in excluded]
number = random.choice(possible)
print(number)
3

Случайные целые с нормальным распределением

Пример
import random
nums = [int(random.gauss(50,10)) for _ in range(5)]
print(nums)
[48, 53, 42, 51, 47]

Случайное число произвольной битовой длины

Пример
import random
big = random.getrandbits(64)
print(big)
9412345678901234567

Воспроизводимая последовательность с seed от времени

Пример
import random, time
random.seed(int(time.time()))
print(random.randint(1,100))
42

Генерация выборки с весами

Пример
import random
numbers = [1,2,3,4,5]
weights = [0.1,0.2,0.3,0.2,0.2]
result = random.choices(numbers, weights=weights, k=10)
print(result)
[3, 2, 3, 5, 3, 1, 4, 3, 2, 3]

Случайное число, кратное 10

Пример
import random
num = random.randrange(0, 100, 10)
print(num)
70

Криптостойкое случайное число с secrets

Пример
import secrets
secure_num = secrets.randbelow(1000)
print(secure_num)
238

Генерация случайных целых чисел в Python - comments

En
Python random int (python)