Давайте добавим случайность в результаты работы нашего кода.
Делиться

Введение в рандомизацию
В повседневной жизни мы сталкиваемся с различными совершенно случайными явлениями. Погода тоже случайна: конечно, мы можем её предсказывать и предсказывать, но лишь до определённой степени. Радиоактивный распад — тоже интересный случайный процесс, лишённый закономерностей и предсказуемости. В отличие от компьютеров, которые детерминированы и работают так, как запрограммированы, природе не требуется никакого программирования, условных операторов или циклов. Всё происходит совершенно случайным и непредсказуемым образом, и именно такая непредсказуемость иногда требуется нам в наших компьютерах и приложениях, например, в играх.
Нам нужны случайность и непредсказуемость в играх, в которые мы играем, чтобы нам не наскучили предопределённые сценарии и предсказуемые задачи. Нам также необходим элемент случайности при моделировании реальных ситуаций, тестировании алгоритмов или создании выборочных наборов данных.

В языках программирования рандомизация означает внесение непредсказуемости и изменчивости в выходные данные компьютера. Случайность генерируется в программе посредством случайных чисел.
Существует несколько методов генерации псевдослучайных чисел. В Python для генерации случайных чисел в модуле random используется вихрь Мерсенна. Несмотря на широкое применение в качестве генератора псевдослучайных чисел (ГПСЧ), вихрь Мерсенна обладает детерминированными свойствами, что делает его небезопасным для некоторых задач, требующих безопасности в первую очередь. В программировании генерация полностью случайных чисел довольно сложна, поэтому мы используем концепцию генерации псевдослучайных чисел, хотя они и воспроизводимы при задании начального значения, как будет показано далее.
В этой статье мы рассмотрим концепцию рандомизации, используя модуль Python random для генерации случайности в выходных данных нашего кода.
Случайный модуль Python
Теперь давайте подробнее рассмотрим модуль случайных чисел. Во-первых, мы знаем, что случайность в этом модуле генерируется с помощью вихря Мерсенна, использующего простые числа Мерсенна. Этот встроенный модуль Python позволяет генерировать случайные числа в нашем коде различными способами и обеспечивает гибкость при работе с различными типами данных. Давайте разберёмся с его функциями на примерах. Официальную документацию по этому модулю можно получить по следующей ссылке:
случайный — генерация псевдослучайных чисел
Чтобы использовать модуль random, нам нужно сначала импортировать его в наш код:
импорт случайных данных
Случайное число с плавающей точкой от 0 до 1
Первая задача, которую мы освоим, — это генерация случайного числа в диапазоне от 0 до 1, где 0 — невключительно, а 1 — включительно. Это можно сделать с помощью функции random().
случайное_значение = случайное.случайное() распечатать(случайное_значение)
Приведенный выше код сгенерирует случайное число с плавающей точкой в диапазоне от 0 до 1. Если вы запустите приведенный выше код несколько раз, каждый раз значение будет разным.
Случайное число с плавающей точкой в указанном диапазоне
Мы можем использовать функцию uniform() модуля random для генерации случайного числа в определенном диапазоне.
случайное_значение = случайное.равномерное(1,10) печать(случайное_значение)
При выполнении приведенного выше кода несколько раз будут выведены числа в диапазоне, указанном в скобках.
Случайное целое значение в определенном диапазоне
Предположим, нам нужно получить случайное значение при броске кубика, как это требуется во многих играх. Мы можем включить эту функцию в наш код с помощью функции randint(). Эта функция выводит случайное целое число, в отличие от функций выше, которые выводят число с плавающей точкой.
случайное_значение = случайное_значение.randint(1,6) print(случайное_значение)
Обратите внимание, что при запуске приведенного выше фрагмента кода числа 1 и 6 будут включены в сгенерированные случайные значения.

Случайное значение из списка значений
Далее мы рассмотрим, как сгенерировать случайное значение из списка значений. Для этого сначала нужно определить список элементов в Python, а затем использовать функцию choice() случайного значения для вывода случайного элемента из этого списка.
Для этого сначала создадим список, а затем воспользуемся функцией choice() модуля random, чтобы случайным образом выбрать один из объектов из списка. Предположим, у нас есть список наших кошек, и нам нужно выбрать одну, чтобы угостить её чем-то особенным. Вот как это можно сделать:
my_cats = [«Джерри», «Том», «Фигаро», «Белла», «Симба»] cat_chosen = random.choice(my_cats) print(cat_chosen)
Обратите внимание, что код выше является случайным, то есть не обязательно, что будут выбраны все кошки (хотя вероятность этого весьма высока, поскольку мы запускаем код), так что да, это несправедливый способ выбора того, кому дать особое угощение!
Более того, мы также можем создать список случайных вариантов с помощью функции choices(). Эта функция также позволяет нам определять вес каждого элемента списка, то есть мы можем увеличить вероятность случайного выбора любого элемента в списке:
mylist = [«яблоко», «банан», «вишня», «клубника»] print(random.choices(mylist, Weights = [2, 1, 1, 1,],], k = 8))

В приведенном выше коде мы передали mylist в качестве входной последовательности для функции choice(), а также веса каждого элемента списка и желаемую длину выходного списка со случайно выбранными элементами. Обратите внимание на количество встречающихся фруктов «яблоко» из-за увеличения его веса.
Случайное перемешивание списка элементов
Далее мы научимся случайным образом перемешивать элементы списка. Для этого можно использовать функцию shuffle() в модуле random.
колода = список(диапазон(1,53)) печать(колода) случайный.перетасовка(колода) печать(колода)


Случайная и уникальная выборка из списка
Предположим, мы хотим получить по 5 случайных карт для каждого из 4 игроков. Мы не можем использовать функцию choice(), поскольку нам нужны уникальные карты из колоды, без повторений. Для этого воспользуемся функцией sample():
колода = список(диапазон(1,53)) карты = случайная выборка(колода, 5) печать(карты)

Случайное целое число из определенного диапазона с шагом
Функцию randrange() можно использовать для случайного выбора числа из определенного диапазона, в котором определены начальное и конечное значения, а также шаги.
случайное_число = случайное.randrange(0,10,2) печать(случайное_число)
Приведенный выше блок выдаст числа от 0 до 8, поскольку 10 не является включительным, а мы определили 2 как размер шага.
Начальная стоимость
Интересной особенностью модуля random в Python является функция seed(). Это начальное значение используется в качестве отправной точки для генерации случайных чисел и является важной функцией для отслеживания воспроизводимости и закономерности. Всякий раз, когда мы используем случайное значение для генерации случайного числа, оно фактически генерируется из случайного начального значения, но мы можем определить начальное значение самостоятельно с помощью функции seed().
случайное.seed(22) случайное_число = случайное.randrange(0,10,2) печать(случайное_число)
Приведённый выше код всегда будет генерировать случайное число «2», поскольку задано начальное значение «22». Если задать начальное значение «55», он будет снова и снова возвращать «0».
Применение случайного модуля
Хотя в модуле random больше функций и реализаций, перечисленные выше функции — одни из самых распространённых. Модуль random в Python можно использовать по-разному, в основном в играх и симуляциях реального мира. Мы можем использовать модуль random в играх, связанных с бросанием кубиков, как было рассмотрено выше, в игре с подбрасыванием монеты и даже в качестве генератора случайных паролей. С помощью модуля random можно также симулировать игру «Камень, ножницы, бумага» с помощью нескольких условных операторов и циклов!

Источник: towardsdatascience.com



























