Модуль random
Генератор случайных чисел
Модуль random выдаёт псевдослучайные числа и выбирает элементы последовательностей. В текущей прошивке он не предоставляет криптографических гарантий и не позволяет задавать seed из Python.
Целые числа
getrandbits
random.getrandbits(n) возвращает число с n случайными битами: 0 ≤ результат < 2ⁿ. Допустимы целые n от 0 до 32 включительно. При n=0 возвращается 0; вне диапазона возникает ValueError.
import random
print(random.getrandbits(5)) # 0…31
print(random.getrandbits(32)) # 0…4294967295
randint
random.randint(a, b) возвращает целое число включая обе границы. Требуется a <= b; одинаковые границы допустимы. При a > b возникает ValueError.
Аргументы должны помещаться в signed int32: −2147483648…2147483647. Полный диапазон поддерживается:
import random
print(random.randint(1, 10))
print(random.randint(-2147483648, 2147483647))
assert random.randint(7, 7) == 7
randrange
random.randrange(stop)
random.randrange(start, stop)
random.randrange(start, stop, step)
Возвращает один из элементов соответствующего range; граница stop не включается. По умолчанию start=0, step=1. Отрицательный шаг поддерживается. Пустой диапазон и нулевой шаг вызывают ValueError. Все аргументы должны помещаться в signed int32.
import random
print(random.randrange(10)) # 0…9
print(random.randrange(1, 10, 2)) # 1, 3, 5, 7, 9
print(random.randrange(10, 0, -2)) # 10, 8, 6, 4, 2
Числа с плавающей точкой
random
random.random() возвращает float в диапазоне 0.0 ≤ x < 1.0.
uniform
random.uniform(a, b) вычисляет a + (b - a) * random.random(). Границы могут идти в любом порядке. При вычислениях с float результат округляется, поэтому не следует полагаться на строгое исключение второй границы.
import random
print(random.random())
print(random.uniform(1.5, 3.5))
Выбор элемента
choice
random.choice(sequence) возвращает один элемент непустой индексируемой последовательности: списка, кортежа, строки и т. п. Пустая последовательность вызывает IndexError.
import random
print(random.choice(['вентиляция', 'нагрев']))
Функции seed, shuffle, sample и распределения из CPython в этом модуле не экспортированы. Повторяемость последовательности после перезапуска не гарантируется.