На этом шаге мы рассмотрим основные функции модуля random.
Вы хотите выбрать случайные элементы из последовательности или сгенерировать случайные числа.
Модуль random содержит разнообразные функции для генерации случайных чисел и выбора случайных элементов. Например, чтобы выбрать случайный элемент последовательности, используйте random.choice():
>>> import random >>> values = [1, 2, 3, 4, 5, 6] >>> random.choice(values) 4 >>> random.choice(values) 3 >>> random.choice(values) 2 >>> random.choice(values) 5 >>>
Чтобы получить выборку из N элементов, используйте random.sample(). Каждый элемент выбирается один раз, так что если значения в полученной выборке повторяются, то это разные элементы оригинальной последовательности, имеющие одинаковое значение:
>>> random.sample(values, 2) [3, 5] >>> random.sample(values, 2) [3, 1] >>> random.sample(values, 3) [6, 4, 1] >>> random.sample(values, 3) [1, 3, 5] >>>
Если вы хотите перемешать элементы в последовательности, используйте random.shuffle():
>>> random.shuffle(values) >>> values [1, 6, 3, 2, 5, 4] >>> random.shuffle(values) >>> values [4, 3, 6, 5, 1, 2] >>>
Чтобы сгенерировать случайные целые числа, используйте random.randint():
>>> random.randint(0,10) 2 >>> random.randint(0,10) 5 >>> random.randint(0,10) 0 >>> random.randint(0,10) 7 >>> random.randint(0,10) 10 >>> random.randint(0,10) 3 >>>
>>> random.random() 0.9406677561675867 >>> random.random() 0.133129581343897 >>> random.random() 0.4144991136919316 >>>
Чтобы получить целое число из N случайных битов, используйте random.getrandbits():
>>> random.getrandbits(200)
1463781176887547047839333117275857110729979584424578184128600
>>>
Модуль random вычисляет случайные числа, используя алгоритм "вихрь Мерсенна" (Mersenne twister, MT). Это детерминированный алгоритм, но вы можете изменить начальную инциализацию с помощью функции random.seed():
random.seed() # Инициализация на базе системного времени или os.urandom() random.seed(12345) # Инициализация на базе заданного целого числа random.seed(b'bytedata') # Инициализация на базе байтовых данных
Вдобавок к уже продемонстрированной функциональности random включает функции для равномерного, гауссова и других распределений вероятности. Например, random.uniform() вычисляет равномерно распределенные числа, а random.gauss() - нормально распределенные. За описанием других поддерживаемых распределений обратитесь к документации.
Функции в random не должны быть использованы в криптографических программах. Если вам нужна такая функциональность, обратитесь к функциям из модуля ssl. Например, ssl.RAND_bytes() может быть использована для генерации криптографически безопасных последовательностей случайных байтов.
На следующем шаге мы рассмотрим базовые методы конвертации времени.