Академический Документы
Профессиональный Документы
Культура Документы
random
Что такое модуль Random в Python
Возможно самый известный инструмент для генерации случайных данных в Python — это модуль
random, который использует алгоритм PRNG(псевдо-генератор случайных чисел) под названием
Вихрь Мерсенна в качестве корневого генератора. Этот метод быстрый и потокобезопасный, но не
подходит для криптографических целей
По умолчанию, если мы не используем сид генератор, метод random использует текущее системное
время или “источник случайности” операционной системы, если доступно.
ВАЖНО!!!! Генераторы псевдослучайных чисел этого модуля не должны использоваться в целях безопасности.
>>> random.random()
0.6101992345575074
>>> random.seed(444)
>>> random.random()
0.3088946587429545
>>> random.random()
0.01323751590501987
>>> random.random()
0.01323751590501987
Основные методы Random
Случайные целые числа (int)
Перечислим основные функции, которые есть в модуле random для выдачи случайных целых
чисел.
Функция randint(a, b) получает на вход два целых числа и возвращает случайное
значение из диапазона [a, b] (a и b входят в этот диапазон).
import random
print(random_number)
В функцию randrange(start, stop[, step]) передают три целых числа:
start – начало диапазона (входит в последовательность);
stop – конец диапазона (в последовательность не входит);
step – шаг генерации (если на его месте написать 0, получим ошибку "ValueError").
На выходе функция выдает случайное число в заданном диапазоне.
import random
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
print(random_number)
Случайные элементы из последовательности
В модуле random языка Python есть несколько функций, которые можно применять для
работы с последовательностями.
С помощью функции choice(seq) можно выбрать один элемент из набора данных. В качестве
единственного аргумента в функцию передаётся последовательность. Если
последовательность будет пустой (то есть в ней не будет ни одного элемента), получим
ошибку "IndexError".
import random
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]
print(random_elements)
Перемешать элементы набора данных можно с помощью функции shuffle(x[, random]).
х — последовательность;
random (необязательный параметр) — задает метод вероятностных распределений. Этот
параметр не рекомендуется использовать в версии Python 3.9, а в версии 3.11 его
поддержка будет прекращена.
shuffle перемешивает переданную последовательность, и возвращает None.
import random
random.shuffle(seq)
print(seq)
Чтобы выбрать какое-то количество элементов из набора данных можно воспользоваться
функцией sample(х, k).
х — последовательность;
k — количество элементов новой подпоследовательности.
На выходе получаем k уникальных случайных элементов из последовательности.
Если в исходной последовательности есть неуникальные (повторяющиеся) элементы,
то каждый их них может появиться в новом списке.
import random
random_seq = random.sample(seq, 4)
print(random_seq)
import random
import string
pwd_length = 0
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 существуют альтернативные модули, позволяющие получить
случайное значения: