Главная » 2018 » Июль » 29 » Python 3: Генерация случайных чисел (модуль random)
17:06
Python 3: Генерация случайных чисел (модуль random)

«Генерация случайных чисел слишком важна, чтобы оставлять её на волю случая»

—  Роберт Кавью

Note

Python порождает случайные числа на основе формулы, так что они не на самом деле случайные, а, как говорят, псевдослучайные [1]. Этот способ удобен для большинства приложений (кроме онлайновых казино) [2].

Модуль random позволяет генерировать случайные числа. Прежде чем использовать модуль, необходимо подключить его с помощью инструкции:

import random

random.random

random.random() — возвращает псевдослучайное число от 0.0 до 1.0

 random.random()
 0.07500815468466127

random.seed

random.seed(<Параметр>) — настраивает генератор случайных чисел на новую последовательность. По умолчанию используется системное время. Если значение параметра будет одиноким, то генерируется одинокое число:

 random.seed(20)
 random.random()
 0.9056396761745207

 random.random()
 0.6862541570267026

 random.seed(20)
 random.random()
 0.9056396761745207

 random.random()
 0.7665092563626442

random.uniform

random.uniform(<Начало>, <Конец>) — возвращает псевдослучайное вещественное число в диапазоне от <Начало> до <Конец>:

 random.uniform(0, 20)
 15.330185127252884
 random.uniform(0, 20)
 18.092324756265473

random.randint

random.randint(<Начало>, <Конец>) — возвращает псевдослучайное целое число в диапазоне от <Начало> до <Конец>:

 random.randint(1,27)
 9
 random.randint(1,27)
 22

random.choince

random.choince(<Последовательность>) — возвращает случайный элемент из любой последовательности (строки, списка, кортежа):

 random.choice('Chewbacca')
 'h'
 random.choice([1,2,'a','b'])
 2
 random.choice([1,2,'a','b'])
 'a'

random.randrange

random.randrange(<Начало>, <Конец>, <Шаг>) — возвращает случайно выбранное число из последовательности.

random.shuffle

random.shuffle(<Список>) — перемешивает последовательность (изменяется сама последовательность). Поэтому функция не работает для неизменяемых объектов.

 List = [1,2,3,4,5,6,7,8,9]
 List
 [1, 2, 3, 4, 5, 6, 7, 8, 9]
 random.shuffle(List)
 List
 [6, 7, 1, 9, 5, 8, 3, 2, 4]



Вероятностные распределения

random.triangular(low, high, mode) — случайное число с плавающей точкой, low ≤ N ≤ high. Mode - распределение.

random.betavariate(alpha, beta) — бета-распределение. alpha>0, beta>0. Возвращает от 0 до 1.

random.expovariate(lambd) — экспоненциальное распределение. lambd равен 1/среднее желаемое. Lambd должен быть отличным от нуля. Возвращаемые значения от 0 до плюс бесконечности, если lambd положительно, и от минус бесконечности до 0, если lambd отрицательный.

random.gammavariate(alpha, beta) — гамма-распределение. Условия на параметры alpha>0 и beta>0.

random.gauss(значение, стандартное отклонение) — распределение Гаусса.

random.lognormvariate(mu, sigma) — логарифм нормального распределения. Если взять натуральный логарифм этого распределения, то вы получите нормальное распределение со средним mu и стандартным отклонением sigma. mu может иметь любое значение, и sigma должна быть больше нуля.

random.normalvariate(mu, sigma) — нормальное распределение. mu - среднее значение, sigma - стандартное отклонение.

random.vonmisesvariate(mu, kappa) — mu - средний угол, выраженный в радианах от 0 до 2π, и kappa - параметр концентрации, который должен быть больше или равен нулю. Если каппа равна нулю, это распределение сводится к случайному углу в диапазоне от 0 до 2π.

random.paretovariate(alpha) — распределение Парето.

random.weibullvariate(alpha, beta) — распределение Вейбулла.

Примеры

Генерация произвольного пароля

Хороший пароль должен быть произвольным и состоять минимум из 6 символов, в нём должны быть цифры, строчные и прописные буквы. Приготовить такой пароль можно по следующему рецепту:

 
import random
 # Щепотка цифр
 str1 = '123456789'
 # Щепотка строчных букв
 str2 = 'qwertyuiopasdfghjklzxcvbnm'
 # Щепотка прописных букв. Готовится преобразованием str2 в верхний регистр.
 str3 = str2.upper()
 print(str3)
 # Выведет: 'QWERTYUIOPASDFGHJKLZXCVBNM'

 # Соединяем все строки в одну
 str4 = str1+str2+str3
 print(str4)
 # Выведет: '123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'

 # Преобразуем получившуюся строку в список
 ls = list(str4)
 # Тщательно перемешиваем список
 random.shuffle(ls)
 # Извлекаем из списка 12 произвольных значений
 psw = ''.join([random.choice(ls) for x in range(12)])
 # Пароль готов
 print(psw)
 # Выведет: '1t9G4YPsQ5L7'

Этот же скрипт можно записать всего в две строки:

import random
 print(''.join([random.choice(list('123456789qwertyuiopasdfghjklzxc
vbnmQWERTYUIOPASDFGHJKLZXCVBNM')) for x in range(12)]))
 Данная команда является краткой записью цикла for, вместо неё можно было написать так:
import random
 psw = '' # предварительно создаем переменную psw
 for x in range(12):
 psw = psw + random.choice(list('123456789qwertyuiopasdfgh
jklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'))

 print(psw)
 # Выведет: Ci7nU6343YGZ

 

Данный цикл повторяется 12 раз и на каждом круге добавляет к строке psw произвольно выбранный элемент из списка.

Ссылки


Сноски

[1] Википедия: Генератор псевдослучайных чисел
[2] Доусон М. Программируем на Python. — СПб.: Питер, 2014. — 416 с.: ил. — 3-е изд

Взято из: https://librerussia.blogspot.com/2015/02/python-random.html

Просмотров: 300 | Добавил: Домовой | Теги: Python, RANDOM, Python 3, случайные числа, распределения | Рейтинг: 0.0/0
Всего комментариев: 0
avatar