- Python 3: Генерация случайных чисел (модуль random)
- random.random
- random.seed
- random.uniform
- random.randint
- random.choince
- random.randrange
- random.shuffle
- Вероятностные распределения
- Примеры
- Генерация произвольного пароля
- Ссылки
- Модуль random: генерация псевдослучайных чисел в Python
- Следующие функции предназначены для генерации случайных целых чисел:
- Следующие функции работают со случайными числами с плавающей запятой:
- Следующие функции работают c последовательностями, а именно — со строками, списками или кортежами:
Python 3: Генерация случайных чисел (модуль random)
Python порождает случайные числа на основе формулы, так что они не на самом деле случайные, а, как говорят, псевдослучайные [1]. Этот способ удобен для большинства приложений (кроме онлайновых казино) [2].
Модуль 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 произвольно выбранный элемент из списка.
Ссылки
Модуль random: генерация псевдослучайных чисел в Python
Многим компьютерным приложениям необходимо генерировать случайные числа. Однако ни одно из них не генерирует действительно случайное число. Python, как и многие другие языки программирования, использует генератор псевдослучайных чисел. Генерация случайных чисел в Python основана на алгоритме Вихрь Мерсенна. Этот метод быстрый и потокобезопасный, но не подходит для криптографических целей.
Стандартная библиотека Python содержит модуль random , в котором есть различные функции для работы со случайными числами.
random.seed([initializer]) – этот метод инициализирует генератор случайных чисел. Когда модуль random импортируется, генератор инициализируется с помощью системного времени. Чтобы повторно запустить генератор, используйте любой объект int , str , byte или bytearray . При помощи этого метода можно воспроизводить одну и ту же последовательность чисел любое количество раз. В примере ниже генератор случайных чисел инициализируется с помощью числа 2 и при каждом запуске программы мы будем получать одну и ту же последовательность чисел.
import random random.seed(2) random_number_1 = random.randint(1, 10) random_number_2 = random.randint(1, 10) print(random_number_1, random_number_2) # 1 2
random.getstate() — эта функция вместе с функцией setstate() помогает воспроизводить одни и те же случайные данные снова и снова. Функция getstate() возвращает внутреннее состояние генератора случайных чисел. Больше информации вы можете найти по ссылке.
random.setstate(state) — эта функция восстанавливает внутреннее состояние генератора.
Следующие функции предназначены для генерации случайных целых чисел:
random.randrange() − эта функция генерирует случайное целое число в пределах заданного диапазона чисел. Может принимать три параметра.
random.randrange([start], stop[, step])
Параметры start и step являются необязательными. Их значения по умолчанию равны 0 и 1 соответственно. Шаг ( step ) определяет интервал между последовательными числами.
>>> random.randrange(10) 5 >>> random.randrange(10, 20) 17 >>> random.randrange(100, 200, 2) 188
Примечание: помните, что выходные данные примеров в этой статье могут не совпадать, так как они генерируются случайным образом.
random.randint(start, stop) — эта функция генерирует случайное целое число x , такое что start ≤ x ≤ stop . Это похоже на функцию randrange() без параметра step .
>>> random.randint(1,10) 6 >>> random.randint(100, 200) 134
Следующие функции работают со случайными числами с плавающей запятой:
random.random() — эта функция генерирует случайное число с плавающей запятой в диапазоне от 0.0 до 1.0.
>>> random.random() 0.668544544081956
random.uniform(start, stop) — эта функция возвращает случайное число x с плавающей запятой, такое что start ≤ x ≤ stop для start ≤ stop и stop ≤ x ≤ start для stop < start .
>>> random.uniform(0.5,1.5) 1.2760281470664903 >>> random.uniform(1,10) 7.336985794193224 >>> random.uniform(10,5) 7.817794757786727
Следующие функции работают c последовательностями, а именно — со строками, списками или кортежами:
random.choice() − эта функция выбирает случайный элемент из последовательности. Если последовательность пуста, то возникает ошибка IndexError .
>>> random.choice("Pythonist") 'o' >>> random.choice(range(10)) 2 >>> random.choice([15,31,6,29,55, 5]) 55 >>> random.choice((15,31,6,29,25, 55)) 15
random.choices() − эта функция случайным образом выбирает несколько элементов из списка. Первый параметр этой функции — последовательность, а второй — количество элементов, которые нужно вернуть. Возвращает список, в котором может повторяться несколько раз один и тот же элемент.
>>> name = "Pythonist" >>> random.choices(name, k = 2) ['s', 'n']
random.shuffle() — эта функция переупорядочивает (перемешивает) элементы в изменяемой (mutable) последовательности и размещает их случайным образом.
>>> num = [10,20,30,40,50] >>> random.shuffle(num) >>> num [50, 20, 40, 30, 10]
random.sample(sequence, n) — эта функция возвращает список случайно выбранных элементов из последовательности. Результирующий список содержит только уникальные элементы.
>>> name = "Pythonist" >>> nm = random.sample(name, k = 5) >>> name, nm (Pythonist, ['n', 'P', 'y', 't', 'h'])
Более подробную информацию о функциях модуля random вы можете найти в документации.