Random Python

Основы

Каждый человек ежедневно сталкивается со случайностью. Википедия нам говорит: случайность — это результат маловероятного или непредсказуемого события. Непредсказуемого. Стоит отметить, что, чем сложнее система, тем ниже возможность прогнозировать (предсказывать) её будущие состояния. Мир сложен и именно по-этому случайность встречается столь часто. Можно сказать, что случайностью мы называем все события, которые не можем предугадать. Таким образом, разговор о случайном – это разговор о нехватке информации. Но эту нехватку человек научился использовать себе на пользу. К примеру, случайные величина широко применяются в криптографии.

В языке Python есть удобные инструменты для работы со случайными значениями. Речь о модуле стандартной библиотеки под названием random (и не только о нём). Давайте знакомиться!

Как использовать модуль random в Python

Для начала модуль надо импортировать.


Этот модуль содержит функции для работы со случайным числом.

import random

print(random.random())

# Вывод:  0.22721918183118728


Вот и наше первое случайное число.

Python функции модуля random

Случайное целое число — randint() функция random

Самое частое применение данного модуля — генерация случайных чисел. Самая популярная функция для этого — randint().

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

import random

print('Случайное целое число:', end=' ')
print(random.randint(0, 10))
# Вывод:

Случайное целое число: 10

Генерация случайного целого числа — randrange()

Функция randrange() используется для генерации случайного целого числа в пределах заданного диапазона. Отличие от randint() заключается в том, что здесь есть третий параметр – шаг, по умолчанию равный единице.

import random

print('Случайное целое число:', end=' ')
print(random.randrange(0, 10, 2))   # только чётные числа
# Вывод:

Случайное целое число: 4

Выбор случайного элемента из списка choice()

Вы играли в детстве в «считалочки»? Эники-беники… Вот этим и занимается random.choice(): функция возвращает один случайный элемент последовательности.

import random

print(list('abracadabra'))
print(random.choice(list('abracadabra')))
# Вывод:

['a', 'b', 'r', 'a', 'c', 'a', 'd', 'a', 'b', 'r', 'a']

r

Функция sample()

random.sample() применяется, когда надо выбрать несколько элементов из заданной коллекции. Она возвращает список уникальных элементов, выбранных из исходной последовательности. Количество элементов, которое вернёт функция, задаётся аргументом k.

import random

example = list('abracadabra')
print(example)
print(random.sample(example, 5))
# Вывод:

['a', 'b', 'r', 'a', 'c', 'a', 'd', 'a', 'b', 'r', 'a']

['d', 'r', 'b', 'a', 'c']

Случайные элементы из списка — choices()

random.choices делает то же, что и random.sample(), но элементы, которые она возвращает, могут быть не уникальными.

import random

example = list('abracadabra')
print(example)
print(random.choices(example, k=15))
# Вывод:

['a', 'b', 'r', 'a', 'c', 'a', 'd', 'a', 'b', 'r', 'a']

['d', 'a', 'd', 'a', 'r', 'b', 'r', 'a', 'd', 'b', 'a', 'r', 'd', 'a', 'a']

Генератор псевдослучайных чисел — seed()

Метод seed() используется для инициализации генератора псевдослучайных чисел в Python. Вот что это означает: для генерации псевдослучайных чисел необходимо какое-то исходное число и именно это число можно установить данным методом. Если значение seed не установлено, тогда система будет отталкиваться от текущего времени.

import random

random.seed(5)
print(random.random())
print(random.random())
print(random.random())
random.seed(5)
print(random.random())
print(random.random())
print(random.random())
# Вывод:

0.6229016948897019

0.7417869892607294

0.7951935655656966

0.6229016948897019

0.7417869892607294

0.7951935655656966

Перемешивание данных — shuffle()

Метод random.shuffle() применяется для расстановки элементов последовательности в случайном порядке. Представьте коробку в которой лежат какие-то предметы. Встряхните её 🙂

import random

example = list('abracadabra')
print(example)
random.shuffle(example)
print(example)
# Вывод:

['a', 'b', 'r', 'a', 'c', 'a', 'd', 'a', 'b', 'r', 'a']

['d', 'r', 'b', 'b', 'a', 'r', 'a', 'a', 'a', 'a', 'c']

Генерации числа с плавающей запятой — uniform()

random.uniform() похожа на randint(), но применяется для генерации числа с плавающей запятой в указанном диапазоне.

import random

print(random.uniform(2.57, 3.8))
print(random.uniform(20.57, 30.8))
# Вывод:

3.307398107170489

28.91020719832224

Функция  triangular()

Функция random.triangular() позволяет управлять вероятностью – она возвращает случайное число с плавающей запятой, которое соответствует заданному диапазону, а также уточняющему значению mode. Этот параметр дает возможность взвешивать возможный результат ближе к одному из двух других значений параметров. По умолчанию он находится посередине диапазона.

import random

print(random.triangular(2.57, 3.8, 0.1))
print(random.triangular(2.57, 3.8, 0.000001))
print(random.triangular(2.57, 3.8, 100000))
# Вывод:

2.754036943795768

2.0948646011589727

186.20353644235672

Криптографическая зашита генератора случайных данных

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

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

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

import secrets

secretsGenerator = secrets.SystemRandom()
random_number = secretsGenerator.randint(0, 50)
print(random_number)

random_number2 = secretsGenerator.randrange(4, 40, 4)
print(random_number2)

number_list = [6, 12, 18, 24, 30, 36, 42, 48, 54, 60]
secure_choice = secretsGenerator.choice(number_list)
print(secure_choice)

secure_sample = secretsGenerator.sample(number_list, 3)
print(secure_sample)

secure_float = secretsGenerator.uniform(2.5, 25.5)
print(secure_float)
# Вывод:

3

4

48

[48, 42, 24]

16.43293639196964

Numpy.random — Генератор псевдослучайных чисел

Самый простой способ задать массив со случайными элементами — использовать функцию sample (или random, или random_sample, или ranf — это всё одна и та же функция).

Без аргументов возвращает просто число в промежутке [0, 1), с одним целым числом — одномерный массив, с кортежем — массив с размерами, указанными в кортеже (все числа — из промежутка [0, 1)).

Генерация случайного n-мерного массива вещественных чисел

numpy.random.rand()применяется для генерации массива случайных вещественных чисел в пределах заданного диапазона.

Также можно генерировать числа согласно различным распределениям (Гаусса, Парето и другие). Чаще всего нужно равномерное распределение, которое можно получить с помощь функции uniform.

Для начала необходимо установить Numpy.


import numpy

random_float_array = numpy.random.rand(2, 2)
print("2 X 2 массив случайных вещественных чисел в [0.0, 1.0] \n", random_float_array, "\n")

random_float_array = numpy.random.uniform(25.5, 99.5, size=(3, 2))
print("3 X 2 массив случайных вещественных чисел в [25.5, 99.5] \n", random_float_array, "\n")

# Вывод:

2 X 2 массив случайных вещественных чисел в [0.0, 1.0]

[[0.65381466 0.94942677]

[0.48291731 0.1857905 ]]
 

3 X 2 массив случайных вещественных чисел в [25.5, 99.5]

[[28.61664036 69.09697835]

[62.59002522 73.23196535]

[85.79502493 47.36728352]]

Генерация случайного n-мерного массива целых чисел

С помощью функции randint или random_integers можно создать массив из целых чисел. Аргументы: low, high, size: от какого, до какого числа (randint не включает в себя это число, а random_integers включает), и size — размеры массива.

import numpy
 

random_integer_array = numpy.random.random_integers(1, 10, 5)

print("1-мерный массив случайных целых чисел \n", random_integer_array,"\n")
 

random_integer_array = numpy.random.random_integers(1, 10, size=(3, 2))

print("2-мерный массив случайных целых чисел \n", random_integer_array)

# Вывод:

1-мерный массив случайных целых чисел

[ 4 10  1 10  5]

 

2-мерный массив случайных целых чисел

[[ 7  4]

[ 9  7]

[ 6 10]]


Но здесь мы получим предупреждение о том, что функция устарела:

DeprecationWarning: This function is deprecated. Please call randint(1, 10 + 1) instead

random_integer_array = numpy.random.random_integers(1, 10, 5)

Выбор случайного элемента из массива чисел или последовательности

Функция NumPy random.choice() используется для получения случайных выборок одномерного массива, который возвращается как случайные выборки массива NumPy. Эта функция генерирует случайные выборки, которые обычно используются в статистике данных, анализе данных, полях, связанных с данными, а также может использоваться в машинном обучении, байесовской статистике и т. д.

import numpy

array =[10, 20, 30, 40, 50, 20, 40]

single_random_choice = numpy.random.choice(array, size=1)

print("один случайный выбор из массива 1-D", single_random_choice)

 
multiple_random_choice = numpy.random.choice(array, size=3, replace=False)

print("несколько случайных выборов из массива 1-D без замены", multiple_random_choice)
 

multiple_random_choice = numpy.random.choice(array, size=3, replace=True)

print("несколько случайных выборов из массива 1-D с заменой", multiple_random_choice)

# Вывод:

один случайный выбор из массива 1-D [10]

несколько случайных выборов из массива 1-D без замены [40 20 40]

несколько случайных выборов из массива 1-D с заменой [30 20 20]

Генерация случайных универсальных уникальных ID

Универсальные уникальные идентификаторы, также известные как UUID, — это 128-битные числа, используемые для однозначной идентификации информации в компьютерных системах. UUID могут использоваться для обозначения широкого спектра элементов, включая документы, объекты, сеансы, токены, сущности и т. Д. Их также можно использовать в качестве ключей базы данных.

Эта библиотека генерирует уникальные идентификаторы на основе системного времени и сетевого адреса компьютера. Объект UUID неизменяем и содержит некоторые функции для создания различных уникальных идентификаторов.

UUID состоит из пяти компонентов, каждый из которых имеет фиксированную длину. Символ дефиса разделяет каждый компонент. Мы можем представить UUID в формате «8-4-4-4-12», где каждая из цифр представляет длину в шестнадцатеричном формате.

UUID Python, сгенерированный с помощью  функции uuid4(), создается с использованием истинно случайного или псевдослучайного генератора. Поэтому вероятность повторения двух гуидов невелика. Когда UUID необходимо сгенерировать на отдельных машинах или мы хотим сгенерировать безопасные UUID, используйте UUID4 (). Он также используется для генерации криптографически безопасных случайных чисел.

import uuid

# получить уникальный UUID
safeId = uuid.uuid4()
print("безопасный уникальный id ", safeId)

# Вывод:

безопасный уникальный id  61f2682f-4cbf-4c1d-a571-d2094052f371

Оцените статью
О Python на русском языке
Добавить комментарий

Adblock
detector