Вы находитесь на странице: 1из 15

Модуль

random
Что такое модуль Random в Python
Возможно самый известный инструмент для генерации случайных данных в Python — это модуль
random, который использует алгоритм PRNG(псевдо-генератор случайных чисел) под названием
Вихрь Мерсенна в качестве корневого генератора. Этот метод быстрый и потокобезопасный, но не
подходит для криптографических целей

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

ВАЖНО!!!! Генераторы псевдослучайных чисел этого модуля не должны использоваться в целях безопасности.

Для обеспечения безопасности или криптографии используйте модуль secret


Функция random.random() возвращает случайное десятичное число с интервалом [0.0, 1.0). В результате
всегда будет меньше, чем правая конечная точка (1.0). Это также известно, как полуоткрытый диапазон:
>>> # Пока не вызываем random.seed()
>>> import random
>>> random.random()
0.35553263284394376

>>> random.random()
0.6101992345575074

С random.seed() вы можете сделать результаты воспроизводимыми, и цепочка вызова, после


random.seed(), будет генерировать один и тот же след данных:

>>> random.seed(444)
>>> random.random()
0.3088946587429545
>>> random.random()
0.01323751590501987

>>> random.seed(444) # Re-seed


>>> random.random()
0.3088946587429545

>>> random.random()
0.01323751590501987
Основные методы Random
Случайные целые числа (int)
Перечислим основные функции, которые есть в модуле random для выдачи случайных целых
чисел.
Функция randint(a, b) получает на вход два целых числа и возвращает случайное
значение из диапазона [a, b] (a и b входят в этот диапазон).

import random

random_number = random.randint(0, 125)

print(random_number)
В функцию randrange(start, stop[, step]) передают три целых числа:
start – начало диапазона (входит в последовательность);
stop – конец диапазона (в последовательность не входит);
step – шаг генерации (если на его месте написать 0, получим ошибку "ValueError").
На выходе функция выдает случайное число в заданном диапазоне.

import random

random_number = random.randrange(1, 100, 2)

print(random_number)
Случайные вещественные числа (float)
Перечислим функции, которые выдают вещественные числа.

Функция random() выдает вещественные числа, в диапазоне [0.0, 1.0) (включая 0.0, но не
включая 1.0).

import random

random_number = random.random()

print(random_number)
Сгенерировать число с плавающей точкой можно с помощью функции uniform(a, b). При
этом полученное число будет в диапазоне [a, b) или [a, b] (a входит в диапазон, а
вхождение b зависит от округления).

import random

random_number = random.uniform(7.3, 10.5)

print(random_number)
Случайные элементы из последовательности
В модуле random языка Python есть несколько функций, которые можно применять для
работы с последовательностями.

С помощью функции choice(seq) можно выбрать один элемент из набора данных. В качестве
единственного аргумента в функцию передаётся последовательность. Если
последовательность будет пустой (то есть в ней не будет ни одного элемента), получим
ошибку "IndexError".
import random

seq = [10, 11, 12, 13, 14, 15]

random_element = random.choice(seq)

print(random_element)
С помощью функции choices(seq [, weights, cum_weights, k]) можно выбрать 1 или несколько
элементов из набора данных. weights, cum_weights и k — необязательные параметры.
weights — список относительных весов;
cum_weights — список кумулятивных (совокупных) весов, например weights [10, 5, 30,
5] эквивалентен cum_weights [10, 15, 45, 50].
k — длина возвращаемого списка (она может быть больше длины переданной
последовательности и элементы могут дублироваться).

import random

seq = [1, 2, 3, 4, 5, 6]

random_elements = random.choices(seq, weights=[20, 1.1, 1, 2.1, 10, 1], k=4)

print(random_elements)
Перемешать элементы набора данных можно с помощью функции shuffle(x[, random]).
х — последовательность;
random (необязательный параметр) — задает метод вероятностных распределений. Этот
параметр не рекомендуется использовать в версии Python 3.9, а в версии 3.11 его
поддержка будет прекращена.
shuffle перемешивает переданную последовательность, и возвращает None.

import random

seq = ["Cappuccino", "Latte", "Espresso", "Americano"]

random.shuffle(seq)

print(seq)
Чтобы выбрать какое-то количество элементов из набора данных можно воспользоваться
функцией sample(х, k).
х — последовательность;
k — количество элементов новой подпоследовательности.
На выходе получаем k уникальных случайных элементов из последовательности.
Если в исходной последовательности есть неуникальные (повторяющиеся) элементы,
то каждый их них может появиться в новом списке.

import random

seq = [10, 11, 12, 11, 14, 11]

random_seq = random.sample(seq, 4)

print(random_seq)
import random

import string

pwd_length = 0

while pwd_length < 12:

pwd_length = int(input('Укажите длину пароля (от 12 символов): '))

# набор данных (заглавные и строчные буквы, цифры, символы пунктуации)

UPPERCASE_CHARACTERS = string.ascii_uppercase

LOWERCASE_CHARACTERS = string.ascii_lowercase

DIGITS = string.digits

SYMBOLS = string.punctuation
# весь набор
combined_list = UPPERCASE_CHARACTERS + LOWERCASE_CHARACTERS + DIGITS +
SYMBOLS
# случайный элемент из каждого набора
rand_upper = random.choice(UPPERCASE_CHARACTERS)
rand_lower = random.choice(LOWERCASE_CHARACTERS)
rand_digit = random.choice(DIGITS)
rand_symbol = random.choice(SYMBOLS)
temp_pwd = random.sample(combined_list, pwd_length - 4) + [rand_upper,
rand_lower, rand_digit, rand_symbol]
random.shuffle(temp_pwd)
password = "".join(temp_pwd)

print(password)
Кроме модуля random, в Python существуют альтернативные модули, позволяющие получить
случайное значения:

numpy.random — как random, но для массивов;

os — в состав входит urandom() [криптографически безопасный];

secrets — модуль для генерации безопасных случайных чисел, байтов и строк


[криптографически безопасный];

uuid — содержит нескольких функций для создания 128-битных идентификаторов


[криптографически безопасный].
Использованная литература
1. Рандом (random) в Python — как генерировать случайные числа
https://pythonchik.ru/pro/random-v-python

2. random — Generate pseudo-random numbers


https://docs.python.org/3/library/random.html

3. Модуль random на примерах — Изучение методов генерации случайных данных


https://python-scripts.com/random#how-use-random

4. Python 3: Генерация случайных чисел (модуль random)


https://librerussia.github.io/python-3-generatsiia-sluchainykh-chisel-modul-
random.html

Вам также может понравиться