Рандом в питоне: Примеры кода модуля random в Python
Содержание
Примеры кода модуля random в Python
В данной статье мы рассмотрим процесс генерации случайных данных и чисел в Python. Для этого будет использован модуль random и некоторые другие доступные модули. В Python модуль random реализует генератор псевдослучайных чисел для различных распределений, включая целые и вещественные числа с плавающей запятой.
Содержание
Список методов модуля random в Python:
Метод | Описание |
---|---|
seed() | Инициализация генератора случайных чисел |
getstate() | Возвращает текущее внутренне состояние (state) генератора случайных чисел |
setstate() | Восстанавливает внутреннее состояние (state) генератора случайных чисел |
getrandbits() | Возвращает число, которое представляет собой случайные биты |
randrange() | Возвращает случайное число в пределах заданного промежутка |
randint() | Возвращает случайное число в пределах заданного промежутка |
choice() | Возвращает случайный элемент заданной последовательности |
choices() | Возвращает список со случайной выборкой из заданной последовательности |
shuffle() | Берет последовательность и возвращает ее в перемешанном состоянии |
sample() | Возвращает заданную выборку последовательности |
random() | Возвращает случайное вещественное число в промежутке от 0 до 1 |
uniform() | Возвращает случайное вещественное число в указанном промежутке |
triangular() | Возвращает случайное вещественное число в промежутке между двумя заданными параметрами. Также можно использовать параметр mode для уточнения середины между указанными параметрами |
betavariate() | Возвращает случайное вещественное число в промежутке между 0 и 1, основываясь на Бета-распределении, которое используется в статистике |
expovariate() | Возвращает случайное вещественное число в промежутке между 0 и 1, или же между 0 и -1 , когда параметр отрицательный. За основу берется Экспоненциальное распределение, которое используется в статистике |
gammavariate() | Возвращает случайное вещественное число в промежутке между 0 и 1, основываясь на Гамма-распределении, которое используется в статистике |
gauss() | Возвращает случайное вещественное число в промежутке между 0 и 1, основываясь на Гауссовом распределении, которое используется в теории вероятности |
lognormvariate() | Возвращает случайное вещественное число в промежутке между 0 и 1, основываясь на Логнормальном распределении, которое используется в теории вероятности |
normalvariate() | Возвращает случайное вещественное число в промежутке между 0 и 1, основываясь на Нормальном распределении, которое используется в теории вероятности |
vonmisesvariate() | Возвращает случайное вещественное число в промежутке между 0 и 1, основываясь на распределении фон Мизеса, которое используется в направленной статистике |
paretovariate() | Возвращает случайное вещественное число в промежутке между 0 и 1, основываясь на распределении Парето, которое используется в теории вероятности |
weibullvariate() | Возвращает случайное вещественное число в промежутке между 0 и 1, основываясь на распределении Вейбулла, которое используется в статистике |
Цели данной статьи
Далее представлен список основных операций, которые будут описаны в руководстве:
- Генерация случайных чисел для различных распределений, которые включают целые и вещественные числа с плавающей запятой;
- Случайная выборка нескольких элементов последовательности
population
; - Функции модуля random;
- Перемешивание элементов последовательности. Seed в генераторе случайных данных;
- Генерация случайных строки и паролей;
- Криптографическое обеспечение безопасности генератора случайных данных при помощи использования модуля secrets. Обеспечение безопасности токенов, ключей безопасности и URL;
- Способ настройки работы генератора случайных данных;
- Использование
numpy.random
для генерации случайных массивов; - Использование модуля
UUID
для генерации уникальных ID.
В статье также даются ссылки на некоторые другие тексты сайта, связанные с рассматриваемой темой.
Как использовать модуль random в Python
Для достижения перечисленных выше задач модуль random будет использовать разнообразные функции. Способы использования данных функций будут описаны в следующих разделах статьи.
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Telegram Чат & Канал
Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!
Паблик VK
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
В самом начале работы необходимо импортировать модуль random в программу. Только после этого его можно будет полноценно использовать. Оператор для импорта модуля random выглядит следующим образом:
Теперь рассмотрим использование самого модуля random на простом примере:
import random
print(«Вывод случайного числа при помощи использования random.random()»)
print(random.random())
import random
print(«Вывод случайного числа при помощи использования random.random()») print(random.random()) |
Вывод:
Вывод случайного числа при помощи использования random.random()
0.9461613475266107
Вывод случайного числа при помощи использования random.random() 0.9461613475266107 |
Как видите, в результате мы получили 0.9461613475266107
. У вас, конечно, выйдет другое случайно число.
random()
является базовой функцией модуляrandom
;- Почти все функции модуля
random
зависят от базовой функцииrandom()
; random()
возвращает следующее случайное число с плавающей запятой в промежутке[0.0, 1.0]
.
Перед разбором функций модуля random давайте рассмотрим основные сферы их применения.
Генерация случайных чисел в Python
Давайте рассмотрим самый популярный случай использования модуля random
— генерацию случайного числа. Для получения случайного целого числа в Python используется функция randint()
.
Для генерации случайных целых чисел можно использовать следующие две функции:
В следующем примере показано, как получить случайно сгенерированное число в промежутке между 0 и 9.
from random import randint
print(«Вывод случайного целого числа «, randint(0, 9))
print(«Вывод случайного целого числа «, randrange(0, 10, 2))
from random import randint
print(«Вывод случайного целого числа «, randint(0, 9)) print(«Вывод случайного целого числа «, randrange(0, 10, 2)) |
Вывод:
Вывод случайного целого числа 5
Вывод случайного целого числа 2
Вывод случайного целого числа 5 Вывод случайного целого числа 2 |
В следующих разделах статьи будут рассмотрены некоторые другие способы генерации случайного числа в Python.
Выбор случайного элемента из списка Python
Предположим, вам дан python список городов, и вы хотите вывести на экран случайно выбранный элемент из списка городов. Посмотрим, как это можно сделать:
import random
city_list = [‘New York’, ‘Los Angeles’, ‘Chicago’, ‘Houston’, ‘Philadelphia’]
print(«Выбор случайного города из списка — «, random.choice(city_list))
import random
city_list = [‘New York’, ‘Los Angeles’, ‘Chicago’, ‘Houston’, ‘Philadelphia’] print(«Выбор случайного города из списка — «, random.choice(city_list)) |
Вывод:
Выбор случайного города из списка — Houston
Выбор случайного города из списка — Houston |
Python функции модуля random
Рассмотрим разнообразные функции, доступные в модуле random.
Случайное целое число — randint(a, b) модуль random
- Возвращает случайное целое число
Number
, такое чтоa <= Number <= b
; randint(a,b)
работает только с целыми числами;- Функция
randint(a,b)
принимает только два параметра, оба обязательны; - Полученное в результате случайно число больше или равно
a
, а также меньше или равноb
.
Пример использования random.randint()
в Python:
import random
print(«Использование random.randint() для генерации случайного целого числа»)
print(random.randint(0, 5))
print(random.randint(0, 5))
import random
print(«Использование random.randint() для генерации случайного целого числа») print(random.randint(0, 5)) print(random.randint(0, 5)) |
Вывод:
Использование random.randint() для генерации случайного целого числа
4
2
Использование random.randint() для генерации случайного целого числа 4 2 |
Генерация случайного целого числа — randrange() модуль random
Метод random.randrange()
используется для генерации случайного целого числа в пределах заданного промежутка. Скажем, для получения любого числа в диапазоне между 10 и 50.
Шаг показывает разницу между каждым числом заданной последовательности. Шаг по умолчанию равен 1, однако его значение можно изменить.
Пример использования random.randrange()
в Python:
import random
print(«Генерация случайного числа в пределах заданного промежутка»)
print(random.randrange(10, 50, 5))
print(random.randrange(10, 50, 5))
import random
print(«Генерация случайного числа в пределах заданного промежутка») print(random.randrange(10, 50, 5)) print(random.randrange(10, 50, 5)) |
Вывод:
Генерация случайного числа в пределах заданного промежутка
10
15
Генерация случайного числа в пределах заданного промежутка 10 15 |
Выбор случайного элемента из списка choice() модуль random
Метод random.choice()
используется для выбора случайного элемента из списка. Набор может быть представлен в виде списка или python строки. Метод возвращает один случайный элемент последовательности.
Пример использования random.choice()
в Python:
import random
list = [55, 66, 77, 88, 99]
print(«random.choice используется для выбора случайного элемента из списка — «, random.choice(list))
import random
list = [55, 66, 77, 88, 99] print(«random.choice используется для выбора случайного элемента из списка — «, random.choice(list)) |
Вывод:
random.choice используется для выбора случайного элемента из списка — 55
random.choice используется для выбора случайного элемента из списка — 55 |
Метод sample(population, k) из модуля random
Метод random.sample()
используется, когда требуется выбрать несколько элементов из заданной последовательности population
.
- Метод
sample()
возвращает список уникальных элементов, которые были выбраны из последовательностиpopulation
. Итоговое количество элементов зависит от значенияk
; - Значение в
population
может быть представлено в виде списка или любой другой последовательности.
Пример использования random.sample()
в Python:
import random
list = [2, 5, 8, 9, 12]
print («random.sample() «, random.sample(list,3))
import random
list = [2, 5, 8, 9, 12] print («random.sample() «, random.sample(list,3)) |
Вывод:
random.sample() [5, 12, 2]
random.sample() [5, 12, 2] |
Случайные элементы из списка — choices() модуль random
random.choices(population, weights=None, *, cum_weights=None, k=1)
- Метод
random.choices()
используется, когда требуется выбрать несколько случайных элементов из заданной последовательности. - Метод
choices()
был введен в версии Python 3.6. Он также позволяет повторять несколько раз один и тот же элемент.
Пример использования random.choices()
в Python:
import random
# Выборка с заменой
list = [20, 30, 40, 50 ,60, 70, 80, 90]
sampling = random.choices(list, k=5)
print(«Выборка с методом choices «, sampling)
import random
# Выборка с заменой list = [20, 30, 40, 50 ,60, 70, 80, 90] sampling = random.choices(list, k=5)
print(«Выборка с методом choices «, sampling) |
Вывод:
Выборка с методом choices [30, 20, 40, 50, 40]
Выборка с методом choices [30, 20, 40, 50, 40] |
Генератор псевдослучайных чисел — seed() модуль random
- Метод
seed()
используется для инициализации генератора псевдослучайных чисел в Python; - Модуль
random
использует значение изseed
, или отправной точки как основу для генерации случайного числа. Если значенияseed
нет в наличии, тогда система будет отталкиваться от текущего времени.
Пример использования random.seed()
в Python:
import random
random.seed(6)
print(«Случайное число с семенем «,random.random())
print(«Случайное число с семенем «,random.random())
import random
random.seed(6) print(«Случайное число с семенем «,random.random())
print(«Случайное число с семенем «,random.random()) |
Вывод:
Random number with seed 0.793340083761663
Random number with seed 0.793340083761663
Random number with seed 0.793340083761663 Random number with seed 0.793340083761663 |
Перемешивание данных — shuffle() из модуля random
Метод random.shuffle()
используется для перемешивания данных списка или другой последовательности. Метод shuffle()
смешивает элементы списка на месте. Самый показательный пример использования — тасование карт.
Пример использования random.shuffle()
в Python:
list = [2, 5, 8, 9, 12]
random.shuffle(list)
print («Вывод перемешанного списка «, list)
list = [2, 5, 8, 9, 12]
random.shuffle(list) print («Вывод перемешанного списка «, list) |
Вывод:
Вывод перемешанного списка [8, 9, 2, 12, 5]
Вывод перемешанного списка [8, 9, 2, 12, 5] |
Генерации числа с плавающей запятой — uniform() модуль random
random.uniform()
используется для генерации числа с плавающей запятой в пределах заданного промежутка- Значение конечной точки может включаться в диапазон, но это не обязательно. Все зависит от округления значения числа с плавающей запятой;
- Метод может, например, сгенерировать случайно вещественное число в промежутке между 10.5 и 25.5.
Пример использования random.uniform()
в Python:
import random
print(«Число с плавающей точкой в пределах заданного промежутка»)
print(random.uniform(10.5, 25.5))
import random
print(«Число с плавающей точкой в пределах заданного промежутка») print(random.uniform(10.5, 25.5)) |
Вывод:
Число с плавающей точкой в пределах заданного промежутка
22.095283175159786
Число с плавающей точкой в пределах заданного промежутка 22.095283175159786 |
triangular(low, high, mode) из модуля random
Функция random.triangular()
возвращает случайное вещественное число N
с плавающей запятой, которое соответствует условию lower <= N <= upper
, а также уточняющему значению mode
.
Значение нижнего предела по умолчанию равно нулю, в верхнего — единице. Кроме того, пик аргумента по умолчанию установлен на середине границ, что обеспечивает симметричное распределение.
Функция random.triangular()
используется в генерации случайных чисел для треугольного распределения с целью использования полученных значений в симуляции. Это значит, что в при генерации значения применяется треугольное распределение вероятности.
Пример использования random.triangular()
в Python:
import random
print(«Число с плавающей точкой через triangular»)
print(random.triangular(10.5, 25.5, 5.5))
import random
print(«Число с плавающей точкой через triangular») print(random.triangular(10.5, 25.5, 5.5)) |
Вывод:
Число с плавающей точкой через triangular
16.7421565549115
Число с плавающей точкой через triangular 16.7421565549115 |
Генератор случайной строки в Python
В данном разделе будет подробно расписано, как сгенерировать случайную строку фиксированной длины в Python.
Основные аспекты раздела:
- Генерация случайной строки фиксированной длины;
- Получение случайной алфавитно-цифровой строки, среди элементов которой будут как буквы, так и числа;
- Генерация случайного пароля, который будет содержать буквы, цифры и специальный символы.
Криптографическая зашита генератора случайных данных в Python
Случайно сгенерированные числа и данные, полученные при помощи модуля random в Python, лишены криптографической защиты. Следовательно, возникает вопрос — как добиться надежной генерации случайных чисел?
Криптографически надежный генератор псевдослучайных чисел представляет собой генератор чисел, который обладает особенностями, что делают его подходящим для использования в криптографических приложениях, где безопасность данных имеет первостепенное значение.
- Все функции криптографически надежного генератора возвращают полученные случайным образом байты;
- Значение случайных байтов, полученных в результате использования функции, зависит от источников ОС.
- Качество генерации также зависит от случайных источников ОС.
Для обеспечения криптографической надежности генерации случайных чисел можно использовать следующие подходы:
- Применение модуля secrets для защиты случайных данных;
- Использование из модуля os
os.urandom()
; - Использование класса
random.SystemRandom
.
Пример криптографически надежной генерации данных в Python:
import random
import secrets
number = random.SystemRandom().random()
print(«Надежное число «, number)
print(«Надежный токен байтов», secrets.token_bytes(16))
import random import secrets
number = random.SystemRandom().random() print(«Надежное число «, number)
print(«Надежный токен байтов», secrets.token_bytes(16)) |
Вывод:
Надежное число 0.11139538267693572
Надежный токен байтов b’\xae\xa0\x91*.\xb6\xa1\x05=\xf7+>\r;Y\xc3′
Надежное число 0.11139538267693572
Надежный токен байтов b’\xae\xa0\x91*.\xb6\xa1\x05=\xf7+>\r;Y\xc3′ |
getstate() и setstate() в генераторе случайных данных Python
Функции getstate()
и setstate()
модуля random позволяют зафиксировать текущее внутреннее состояние генератора.
Используя данные функции, можно сгенерировать одинаковое количество чисел или последовательностей данных.
Состояние генератора getstate() модуль random
Функция getstate()
возвращает определенный объект, зафиксировав текущее внутреннее состояние генератора случайных данных. Данное состояние передается методу setstate()
для восстановления полученного состояния в качестве текущего.
На заметку: Изменив значение текущего состояния на значение предыдущего, мы можем получить случайные данные вновь. Например, если вы хотите получить аналогичную выборку вновь, можно использовать данные функции.
Восстанавливает внутреннее состояние генератора — setstate() модуль random
Функция setstate()
восстанавливает внутреннее состояние генератора и передает его состоянию объекта. Это значит, что вновь будет использован тот же параметр состояния state
. Объект state
может быть получен при помощи вызова функции getstate()
.
Зачем нужны функции getstate() и setstate() ?
Если вы получили предыдущее состояние и восстановили его, тогда вы сможете оперировать одними и теми же случайными данными раз за разом. Помните, что использовать другую функцию random в данном случае нельзя. Также нельзя изменить значения заданных параметров. Сделав это, вы измените значение состояния state
.
Для закрепления понимания принципов работы getstate()
и setstate()
в генераторе случайных данных Python рассмотрим следующий пример:
import random
number_list = [3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
print(«Первая выборка «, random.sample(number_list,k=5))
# хранит текущее состояние в объекте state
state = random.getstate()
print(«Вторая выборка «, random.sample(number_list,k=5))
# Восстанавливает состояние state, используя setstate
random.setstate(state)
#Теперь будет выведен тот же список второй выборки
print(«Третья выборка «, random.sample(number_list,k=5))
# Восстанавливает текущее состояние state
random.setstate(state)
# Вновь будет выведен тот же список второй выборки
print(«Четвертая выборка «, random.sample(number_list,k=5))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import random
number_list = [3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
print(«Первая выборка «, random.sample(number_list,k=5))
# хранит текущее состояние в объекте state state = random.getstate()
print(«Вторая выборка «, random.sample(number_list,k=5))
# Восстанавливает состояние state, используя setstate random.setstate(state)
#Теперь будет выведен тот же список второй выборки print(«Третья выборка «, random.sample(number_list,k=5))
# Восстанавливает текущее состояние state random.setstate(state)
# Вновь будет выведен тот же список второй выборки print(«Четвертая выборка «, random.sample(number_list,k=5)) |
Вывод:
Первая выборка [18, 15, 30, 9, 6]
Вторая выборка [27, 15, 12, 9, 6]
Третья выборка [27, 15, 12, 9, 6]
Четвертая выборка [27, 15, 12, 9, 6]
Первая выборка [18, 15, 30, 9, 6] Вторая выборка [27, 15, 12, 9, 6] Третья выборка [27, 15, 12, 9, 6] Четвертая выборка [27, 15, 12, 9, 6] |
Как можно заметить в результате вывода — мы получили одинаковые наборы данных. Это произошло из-за сброса генератора случайных данных.
Numpy.random — Генератор псевдослучайных чисел
PRNG является англоязычным акронимом, который расшифровывается как «pseudorandom number generator» — генератор псевдослучайных чисел. Известно, что в Python модуль random можно использовать для генерации случайных скалярных числовых значений и данных.
- Для генерации массива случайных чисел необходимо использовать
numpy.random()
; - В модуле numpy есть пакет
numpy.random
, который содержит обширный набор функций для генерации случайных n-мерных массивов для различных распределений.
Рассмотрим несколько примеров использования numpy.random
в Python.
Генерация случайного n-мерного массива вещественных чисел
- Использование
numpy.random.rand()
для генерации n-мерного массива случайных вещественных чисел в пределах[0.0, 1.0)
- Использование
numpy.random.uniform()
для генерации n-мерного массива случайных вещественных чисел в пределах[low, high)
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»)
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.08938593 0.89085866]
[0.47307169 0.41401363]]
3 X 2 массив случайных вещественных чисел в [25.5, 99.5]
[[55.4057854 65.60206715]
[91.62185404 84.16144062]
[44.348252 27.28381058]]
2 X 2 массив случайных вещественных чисел в [0.0, 1.0] [[0.08938593 0.89085866] [0.47307169 0.41401363]]
3 X 2 массив случайных вещественных чисел в [25.5, 99.5] [[55.4057854 65.60206715] [91.62185404 84.16144062] [44.348252 27.28381058]] |
Генерация случайного n-мерного массива целых чисел
Для генерации случайного n-мерного массива целых чисел используется numpy.random.random_integers()
:
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)
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-мерный массив случайных целых чисел
[10 1 4 2 1]
2-мерный массив случайных целых чисел
[[ 2 6]
[ 9 10]
[ 3 6]]
1-мерный массив случайных целых чисел [10 1 4 2 1]
2-мерный массив случайных целых чисел [[ 2 6] [ 9 10] [ 3 6]] |
Выбор случайного элемента из массива чисел или последовательности
- Использование
numpy.random.choice()
для генерации случайной выборки; - Использование данного метода для получения одного или нескольких случайных чисел из n-мерного массива с заменой или без нее.
Рассмотрим следующий пример:
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)
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 [40]
несколько случайных выборов из массива 1-D без замены [10 40 50]
несколько случайных выборов из массива 1-D с заменой [20 20 10]
один случайный выбор из массива 1-D [40] несколько случайных выборов из массива 1-D без замены [10 40 50] несколько случайных выборов из массива 1-D с заменой [20 20 10] |
В будущих статьях будут описаны другие функции пакета random
из nympy
и способы их использования.
Генерация случайных универсально уникальных ID
Модуль Python UUID предоставляет неизменяемые UUID объекты. UUID является универсально уникальным идентификатором.
У модуля есть функции для генерации всех версий UUID. Используя функцию uuid.uuid4()
, можно получить случайно сгенерированное уникальное ID длиной в 128 битов, которое к тому же является криптографически надежным.
Полученные уникальные ID используются для идентификации документов, пользователей, ресурсов и любой другой информации на компьютерных системах.
Пример использования uuid.uuid4()
в Python:
import uuid
# получить уникальный UUID
safeId = uuid.uuid4()
print(«безопасный уникальный id «, safeId)
import uuid
# получить уникальный UUID safeId = uuid.uuid4() print(«безопасный уникальный id «, safeId) |
Вывод:
безопасный уникальный id fb62463a-cd93-4f54-91ab-72a2e2697aff
безопасный уникальный id fb62463a-cd93-4f54-91ab-72a2e2697aff |
Игра в кости с использованием модуля random в Python
Далее представлен код простой игры в кости, которая поможет понять принцип работы функций модуля random. В игре два участника и два кубика.
- Участники по очереди бросают кубики, предварительно встряхнув их;
- Алгоритм высчитывает сумму значений кубиков каждого участника и добавляет полученный результат на доску с результатами;
- Участник, у которого в результате большее количество очков, выигрывает.
Код программы для игры в кости Python:
import random
PlayerOne = «Анна»
PlayerTwo = «Алекс»
AnnaScore = 0
AlexScore = 0
# У каждого кубика шесть возможных значений
diceOne = [1, 2, 3, 4, 5, 6]
diceTwo = [1, 2, 3, 4, 5, 6]
def playDiceGame():
«»»Оба участника, Анна и Алекс, бросают кубик, используя метод shuffle»»»
for i in range(5):
#оба кубика встряхиваются 5 раз
random.shuffle(diceOne)
random.shuffle(diceTwo)
firstNumber = random.choice(diceOne) # использование метода choice для выбора случайного значения
SecondNumber = random.choice(diceTwo)
return firstNumber + SecondNumber
print(«Игра в кости использует модуль random\n»)
#Давайте сыграем в кости три раза
for i in range(3):
# определим, кто будет бросать кости первым
AlexTossNumber = random.randint(1, 100) # генерация случайного числа от 1 до 100, включая 100
AnnaTossNumber = random.randrange(1, 101, 1) # генерация случайного числа от 1 до 100, не включая 101
if( AlexTossNumber > AnnaTossNumber):
print(«Алекс выиграл жеребьевку.»)
AlexScore = playDiceGame()
AnnaScore = playDiceGame()
else:
print(«Анна выиграла жеребьевку.»)
AnnaScore = playDiceGame()
AlexScore = playDiceGame()
if(AlexScore > AnnaScore):
print («Алекс выиграл игру в кости. Финальный счет Алекса:», AlexScore, «Финальный счет Анны:», AnnaScore, «\n»)
else:
print(«Анна выиграла игру в кости. Финальный счет Анны:», AnnaScore, «Финальный счет Алекса:», AlexScore, «\n»)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | import random
PlayerOne = «Анна» PlayerTwo = «Алекс»
AnnaScore = 0 AlexScore = 0
# У каждого кубика шесть возможных значений diceOne = [1, 2, 3, 4, 5, 6] diceTwo = [1, 2, 3, 4, 5, 6]
def playDiceGame(): «»»Оба участника, Анна и Алекс, бросают кубик, используя метод shuffle»»»
for i in range(5): #оба кубика встряхиваются 5 раз random.shuffle(diceOne) random.shuffle(diceTwo) firstNumber = random.choice(diceOne) # использование метода choice для выбора случайного значения SecondNumber = random.choice(diceTwo) return firstNumber + SecondNumber
print(«Игра в кости использует модуль random\n»)
#Давайте сыграем в кости три раза for i in range(3): # определим, кто будет бросать кости первым AlexTossNumber = random.randint(1, 100) # генерация случайного числа от 1 до 100, включая 100 AnnaTossNumber = random.randrange(1, 101, 1) # генерация случайного числа от 1 до 100, не включая 101
if( AlexTossNumber > AnnaTossNumber): print(«Алекс выиграл жеребьевку.») AlexScore = playDiceGame() AnnaScore = playDiceGame() else: print(«Анна выиграла жеребьевку.») AnnaScore = playDiceGame() AlexScore = playDiceGame()
if(AlexScore > AnnaScore): print («Алекс выиграл игру в кости. Финальный счет Алекса:», AlexScore, «Финальный счет Анны:», AnnaScore, «\n») else: print(«Анна выиграла игру в кости. Финальный счет Анны:», AnnaScore, «Финальный счет Алекса:», AlexScore, «\n») |
Вывод:
Игра в кости использует модуль random
Анна выиграла жеребьевку.
Анна выиграла игру в кости. Финальный счет Анны: 5 Финальный счет Алекса: 2
Анна выиграла жеребьевку.
Анна выиграла игру в кости. Финальный счет Анны: 10 Финальный счет Алекса: 2
Алекс выиграл жеребьевку.
Анна выиграла игру в кости. Финальный счет Анны: 10 Финальный счет Алекса: 8
Игра в кости использует модуль random
Анна выиграла жеребьевку. Анна выиграла игру в кости. Финальный счет Анны: 5 Финальный счет Алекса: 2
Анна выиграла жеребьевку. Анна выиграла игру в кости. Финальный счет Анны: 10 Финальный счет Алекса: 2
Алекс выиграл жеребьевку. Анна выиграла игру в кости. Финальный счет Анны: 10 Финальный счет Алекса: 8 |
Вот и все. Оставить комментарии можете в секции ниже.
Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.
E-mail: [email protected]
Образование
Universitatea Tehnică a Moldovei (utm.md)
- 2014 — 2018 Технический Университет Молдовы, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Технический Университет Молдовы, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»
Python | Модуль random
Последнее обновление: 02.05.2017
Python предоставляет ряд встроенных модулей, которые мы можем использовать в своих программах. Рассмотрим основные из них.
Модуль random
Модуль random управляет генерацией случайных чисел. Его основные функции:
random(): генерирует случайное число от 0.0 до 1.0
randint(): возвращает случайное число из определенного диапазона
randrange(): возвращает случайное число из определенного набора чисел
shuffle(): перемешивает список
choice(): возвращает случайный элемент списка
Функция random() возвращает случайное число с плавающей точкой в промежутке от 0.0 до 1.0. Если же нам необходимо число из большего диапазона,
скажем от 0 до 100, то мы можем соответственно умножить результат функции random на 100.
import random number = random.random() # значение от 0.0 до 1.0 print(number) number = random.random() * 100 # значение от 0.0 до 100.0 print(number)
Функция randint(min, max) возвращает случайное целое число в промежутке между двумя значениями min и max.
import random number = random.randint(20, 35) # значение от 20 до 35 print(number)
Функция randrange() возвращает случайное целое число из определенного набора чисел. Она имеет три формы:
randrange(stop)
: в качестве набора чисел, из которых происходит извлечение случайного значения, будет использоваться диапазон от 0 до числа stoprandrange(start, stop)
: набор чисел представляет диапазон от числа start до числа stoprandrange(start, stop, step)
: набор чисел представляет диапазон от числа start до числа stop, при этом каждое число в диапазоне отличается от предыдущего на шаг step
import random number = random.randrange(10) # значение от 0 до 10 print(number) number = random.randrange(2, 10) # значение в диапазоне 2, 3, 4, 5, 6, 7, 8, 9, 10 print(number) number = random.randrange(2, 10, 2) # значение в диапазоне 2, 4, 6, 8, 10 print(number)
Работа со списком
Для работы со списками в модуле random определены две функции: функция shuffle() перемешивает список случайным образом, а
функция choice() возвращает один случайный элемент из списка:
numbers = [1, 2, 3, 4, 5, 6, 7, 8] random.shuffle(numbers) print(numbers) random_number = random.choice(numbers) print(random_number)
Python: Как использовать метод random.seed()
Функция random() в Python используется для генерации псевдослучайных чисел. Он генерирует числа для некоторых значений, называемых seed значением.
Как работает функция seed?
Функция начального числа используется для хранения случайного метода генерации одних и тех же случайных чисел при многократном выполнении кода на одной или разных машинах.
Начальное значение имеет важное значение для компьютерной безопасности, поскольку оно псевдослучайно создает безопасный секретный ключ шифрования. Таким образом, используя настраиваемое начальное значение, вы можете инициализировать безопасный генератор псевдослучайных чисел в нужном вам месте.
Python random seed
Функция random.seed() в Python используется для инициализации случайных чисел. По умолчанию генератор случайных чисел использует текущее системное время. Если вы дважды используете одно и то же начальное значение, вы получите один и тот же результат, что означает случайное число дважды.
Синтаксис
random.seed(svalue, version)
Параметры
Параметр svalue
является необязательным, и это начальное значение, необходимое для генерации случайного числа. Значение по умолчанию — None, и если None, генератор использует текущее системное время.
Пример
import random
random.seed(10)
print(random.random())
random.seed(10)
print(random.random())
Результат:
0.5714025946899135
0.5714025946899135
Этот пример демонстрирует, что если вы дважды используете одно и то же начальное значение, вы дважды получите одно и то же случайное число.
Давайте посмотрим на другой пример, в котором мы генерируем одно и то же случайное число много раз.
import random
for i in range(5):
# Any number can be used in place of '11'.
random.seed(11)
# Generated random number will be between 1 to 1000.
print(random.randint(1, 1000))
Результат:
Когда мы передаем определенное начальное число в генератор случайных чисел, каждый раз, когда вы выполняете программу, вы получаете одни и те же числа. Это полезно, когда вам нужен предсказуемый источник случайных чисел.
Это упрощает оптимизацию кодов, когда для тестирования используются случайные числа. Вывод кода иногда зависит от ввода. Поэтому использование случайных чисел для тестирования алгоритмов может быть проблематичным.
Кроме того, функция seed
используется для генерации одних и тех же случайных чисел снова и снова и упрощает процесс тестирования алгоритма.
Генератор случайных чисел | Кодкамп
Введение
Примеры
Случайные и последовательности: случайный выбор, выбор и выборка
import random
Вы можете использовать random.shuffle()
, чтобы смешать / рандомизации элементы в изменяемом и индексируемой последовательности. Например, list
:
laughs = ["Hi", "Ho", "He"]
random.shuffle(laughs) # Shuffles in-place! Don't do: laughs = random.shuffle(laughs)
print(laughs)
# Out: ["He", "Hi", "Ho"] # Output may vary!
Принимает случайный элемент из последовательности произвольном:
print(random.choice(laughs))
# Out: He # Output may vary!
Как choice
он принимает случайные элементы из последовательности , но произвольной вы можете указать , сколько:
# |--sequence--|--number--|
print(random.sample( laughs , 1 )) # Take one element
# Out: ['Ho'] # Output may vary!
он не будет принимать один и тот же элемент дважды:
print(random.sample(laughs, 3)) # Take 3 random element from the sequence.
# Out: ['Ho', 'He', 'Hi'] # Output may vary!
print(random.sample(laughs, 4)) # Take 4 random element from the 3-item sequence.
ValueError: выборка больше, чем совокупность
Создание случайных целых чисел и чисел: randint, randrange, random и равномерное
import random
Возвращает случайное число между x
и y
(включительно):
random.randint(x, y)
Например получать случайное число между 1
и 8
:
random.randint(1, 8) # Out: 8
random.randrange
имеет тот же синтаксис, что range
и в отличие от random.randint
, последнее значение не включено:
random.randrange(100) # Random integer between 0 and 99
random.randrange(20, 50) # Random integer between 20 and 49
random.rangrange(10, 20, 3) # Random integer between 10 and 19 with step 3 (10, 13, 16 and 19)
Возвращает случайное число с плавающей запятой от 0 до 1:
random.random() # Out: 0.66486093215306317
Возвращает случайное число с плавающей точкой между x
и y
(включительно):
random.uniform(1, 8) # Out: 3.726062641730108
Воспроизводимые случайные числа: семя (seed) и состояние (state)
Установка определенного Seed создаст фиксированный ряд случайных чисел:
random.seed(5) # Create a fixed state
print(random.randrange(0, 10)) # Get a random integer between 0 and 9
# Out: 9
print(random.randrange(0, 10))
# Out: 4
Сброс начального числа создаст ту же самую «случайную» последовательность снова:
random.seed(5) # Reset the random module to the same fixed state.
print(random.randrange(0, 10))
# Out: 9
print(random.randrange(0, 10))
# Out: 4
Так как семя фиксируется эти результаты всегда 9
и 4
. Если иметь конкретные номера не требуется , только то , что значения будут тем же, также можно просто использовать getstate
и setstate
для восстановления предыдущего состояния:
save_state = random.getstate() # Get the current state
print(random.randrange(0, 10))
# Out: 5
print(random.randrange(0, 10))
# Out: 8
random.setstate(save_state) # Reset to saved state
print(random.randrange(0, 10))
# Out: 5
print(random.randrange(0, 10))
# Out: 8
Для псевдо-рандомизации последовательности вы снова seed
с None
:
random.seed(None)
Или вызовите seed
метод без аргументов:
random.seed()
Создание криптографически безопасных случайных чисел
По умолчанию случайный модуль Python использовать Вихрь Мерсенна PRNG
для генерации случайных чисел, которые, хотя и пригодны в областях , таких как моделирование, не отвечает требованиям безопасности в более сложных условиях.
Для создания криптографически защищенного псевдослучайного числа, можно использовать SystemRandom
, которые, используя os.urandom
, может выступать в качестве криптографической защиты генератора псевдослучайных чисел, CPRNG .
Самый простой способ использовать это просто включает в себя инициализацию SystemRandom
класса. Предоставленные методы аналогичны тем, которые экспортируются случайным модулем.
from random import SystemRandom
secure_rand_gen = SystemRandom()
Для того чтобы создать случайную последовательность 10 int
s в диапазоне [0, 20]
, можно просто вызвать randrange()
:
print([secure_rand_gen.randrange(10) for i in range(10)])
# [9, 6, 9, 2, 2, 3, 8, 0, 9, 9]
Для того, чтобы создать случайное число в заданном диапазоне, можно использовать randint
:
print(secure_rand_gen.randint(0, 20))
# 5
и, соответственно, для всех других методов. Интерфейс точно такой же, единственным изменением является основной генератор чисел.
Вы можете также использовать os.urandom
непосредственно для получения криптографически безопасных случайных байт.@g;J?]M6e’
Обратите внимание , что другие процедуры , сделанные немедленно доступны в random
модуле — такие , как random.choice
, random.randint
и т.д. — не подходит для криптографических целей.
За кулисами, эти процедуры использовать Вихрь Мерсенна ПСЧ , который не удовлетворяет требованиям , предъявляемым к CSPRNG . Таким образом, в частности, вам не следует использовать какие-либо из них для создания паролей, которые вы планируете использовать. Всегда используйте экземпляр SystemRandom
, как показано выше.
Начиная с Python 3.6 доступен модуль `секреты`, который предоставляет криптографически безопасную функциональность. Процитировав [официальную документацию] [pydoc-secrets-3.6], чтобы сгенерировать * «десятибуквенный буквенно-цифровой пароль, содержащий как минимум один символ в нижнем регистре, как минимум один символ в верхнем регистре и как минимум три цифры», * вы можете: импортировать строку alphabet = string.ascii_letters + string.digits, а True: пароль = » .join (выбор (алфавит) для i в диапазоне (10)) if (любой (c.islower () для c в пароле) и любой (c. isupper () для c в пароле) и sum (c.isdigit () для c в пароле)> = 3): break
Случайное двоичное решение
import random
probability = 0.3
if random.random() < probability:
print("Decision with probability 0.3")
else:
print("Decision with probability 0.7")
Синтаксис
Параметры
Примечания
Как добавить исключение к random.randint в Python?
Таким образом, у меня есть переменная, которая создает число random между 0 и 10, однако я бы не хотел, чтобы число random было равно 5. Как мне добавить исключения к random.randint в Python? То, что я имею ниже, не делает этого:
number = random.randint(0, 10) !=5
Это только возвращает True или False в зависимости от того, равно ли число random 5 или нет… как мне это исправить?
python
random
Поделиться
Источник
CoopDaddio
08 февраля 2017 в 07:36
4 ответа
- Python: почему random.randint(1,100) возвращает два значения?
Я пытаюсь работать через python заданий, потому что я уже знаю java и C#, и сумел выйти из класса python в моем колледже с моим баллом AP Computer Science. Это функция SetTitle, которую я создал. Функция записи уже реализована в данном классе. class HTMLOutputFile: def SetTitle( title ): if not…
- Действительно ли random.randint() в Python random?
Поэтому я использовал модуль random в Python с некоторыми циклами и печатал пакет чисел, чтобы проверить, как они выглядят. Я заметил это, когда вводил: random.randint(0,100000) большинство чисел будут шестизначными числами, некоторые-пятизначными и меньше-4. Одиночных фигур почти не было. Это…
8
Вы можете сделать
number = random.randint(0,10)
while number == 5:
number = random.randint(0,10)
Поделиться
JGut
08 февраля 2017 в 07:37
4
Как насчёт
random.choice([x for x in range(11) if x != 5])
для однострочного
Поделиться
schwobaseggl
08 февраля 2017 в 07:42
1
Если вы действительно хотите, чтобы возникла ошибка, вы можете использовать assert
number = random.randint(0, 10)
assert number != 5
или raise
ошибка, если ваше условие выполнено.
number = random.randint(0, 10)
if number == 5:
raise ValueError # or another Exception of choice
Или, если вы хотите продолжать попытки, пока не получите число random, которое не равно 5, тогда
while True:
number = random.randint(0, 10)
if number != 5:
break
Поделиться
Steven Summers
08 февраля 2017 в 07:44
0
!= на самом деле оператор, который возвращает true или false
, попробуйте это:
import random
l=[i for i in range(1,11)]
l.remove(5)
print random.choice(l)
Поделиться
warfreak1
10 сентября 2017 в 17:40
Похожие вопросы:
Random.randint вход
Я хочу, чтобы пользователь мог ввести наименьшее возможное число и наибольшее возможное число, а функция random.randint напечатала число random между введенными числами. Но random.randint будет…
python, повторите random.randint?
Я новичок в python и хотел бы знать, как заставить код повторить часть random.randint 100 раз. #head’s or tail’s print(you filp a coin it lands on…) import random heads = 0 tails = 0 head_tail…
random.randint(1,n) в Python г.
Большинство из нас знает, что команда random.randint(1,n) в Python (2.X.X) будет генерировать число в random (псевдо-random) между 1 и n. Мне интересно знать, каков верхний предел для n ?
Python: почему random.randint(1,100) возвращает два значения?
Я пытаюсь работать через python заданий, потому что я уже знаю java и C#, и сумел выйти из класса python в моем колледже с моим баллом AP Computer Science. Это функция SetTitle, которую я создал….
Действительно ли random.randint() в Python random?
Поэтому я использовал модуль random в Python с некоторыми циклами и печатал пакет чисел, чтобы проверить, как они выглядят. Я заметил это, когда вводил: random.randint(0,100000) большинство чисел…
случайным образом выберите из списка, используя random.randint в python
Как использовать random.randint() для выбора random имен, приведенных в списке в python. Я хочу напечатать 5 имен из этого списка. На самом деле я знаю, как использовать random.randint() для чисел….
Замена числа в random.randint на букву python
import random for i in range(1): myNum= str(random.randint(1,5)) print(myNum) Хотел заменить каждое вхождение числа 1 буквой j в python, как бы это сделать?
python random.randint() не возвращает никакого значения
Мне нужно добавить random час к полю даты. Для этого я использовал следующий код: datetime.utcnow().date() + relativedelta(hours=random.randint(0,23)) Это ответное сообщение: datetime.date(2018, 7,…
random.randint показывает разный выход в Python 2.x и Python 3.x с одним и тем же семенем
Я переношу приложение с python 2 на python 3 и столкнулся со следующей проблемой: random.randint возвращает другой результат в соответствии с используемой версией Python. Так import random…
получение недопустимого синтаксического ошибки для random.randint в python
Я новичок в python, когда пытаюсь это сделать randomNumber = random.randint(1,3) Я получаю ошибку «invalid syntax». не знаю, что я делаю не так.
Выбор случайного элемента из списка в Python
В этой статье мы рассмотрим, как случайным образом выбирать элементы из списка в Python. Мы рассмотрим извлечение случайных элементов, а также извлечение нескольких элементов — с повторением и без.
Введение
Выбор случайного элемента из списка является частой задачей — будь то случайное значение из списка рекомендаций или просто случайная строка.
Выбор случайного элемента из списка
Наиболее интуитивным и естественным подходом к решению этой проблемы является генерация случайного числа, которое действует как индекс доступа к элементу из списка.
Для реализации этого подхода рассмотрим некоторые методы генерации случайных чисел в Python: random.randint() и random.randrange(). Дополнительно мы можем использовать random.choice() и поставлять итерабельное число — в результате чего случайный элемент из этого итерабельного числа возвращается обратно.
Использование функции random.randint()
random.randint(a, b) возвращает случайное целое число между a и b включительно.
Нам понадобится случайный индекс в диапазоне от 0 до len(list) — 1, чтобы получить случайный индекс элемента в списке:
import random
test_list = ["1", "2", "3", "4", "5", "6"]
random_index = random.randint(0, len(test_list) - 1)
print(test_list[random_index])
Использование функции random.randrange()
random.randrange(a) — это другой метод, который возвращает случайное число n, равное 0 <= n < a:
import random
test_list = ["1", "2", "3", "4", "5", "6"]
random_index = random.randrange(len(test_list))
print(test_list[random_index])
Так как random.randrange(len(test_list)) возвращает случайно сгенерированное число в диапазоне от 0 до len(test_list) — 1, мы используем его для доступа к элементу в случайном порядке в буквах, как мы делали это в предыдущем подходе.
Этот подход немного проще, чем предыдущий просто потому, что мы не указываем начальную точку, которая по умолчанию равна 0.
Использовании функции random.choice()
Еще лучшим решением, чем последнее было бы использование функции random.choice(), так как это именно та функция, которая предназначена для решения такой задачи:
import random
test_list = ["1", "2", "3", "4", "5", "6"]
print(random.choice(test_list))
Выбор нескольких случайных элементов из списка
Без повторения элементов
Первый метод, который мы можем использовать для случайного выделения более чем одного элемента — random.sample(). Он производит выборку, основываясь на том, сколько выборок мы хотим получить:
import random
test_list = ["1", "2", "3", "4", "5", "6"]
print(random.sample(test_list, 3))
Давно читаешь статьи, но до сих не подписался в группу ВКонтакте? Не мучайся, подпишись.
Этот метод выбирает элементы без замены т.е. выбирает без дубликатов и повторений.
С повторением элементов
Как и предыдущая функция, функция random.choices() возвращает список случайно выбранных элементов из заданного итерабельного списка. Однако, она не отслеживает выбранные элементы, поэтому можно получить и дублирующие элементы:
import random
test_list = ["1", "2", "3", "4", "5", "6"]
print(random.choices(test_list, k=3))
Заключение
В этой статье мы рассмотрели несколько способов получения одного или нескольких случайно выбранных элементов из списка на Python.
Мы получили доступ к списку по случайному индексу с помощью randint() и randrange(), а также получили случайные элементы с помощью choices() и sample().
Пожалуйста, прочитайте другие статьи посвященные языку программирования Python. Помножте свой опыт в программирования с практическими советами от разработчика.
Если вы ждали идеальное время, чтобы обучиться языку программирования Python, то оно наступило прямо сейчас. GeekUniversity — обучение до уровня Middle с гарантированным трудоустройством.
Модуль random, случайные числа в Python.
Генерация случайных распределений и псевдослучайных чисел.
Модуль random
реализует генераторы псевдослучайных чисел для различных распределений.
Для целых чисел существует равномерный выбор из диапазона. Для последовательностей существует равномерный выбор случайного элемента, функция для генерации случайной перестановки списка на месте и функция для случайной выборки без замены.
На реальной линии есть функции для вычисления равномерного, нормального (гауссовского), логнормального, отрицательного экспоненциального, гамма и бета распределений. Для генерации распределений углов доступно распределение фон Мизеса.
Почти все функции модуля зависят от базовой функции random.random()
, которая генерирует случайное число с плавающей точкой в полуоткрытом диапазоне [0.0, 1.0]
. Python использует Mersenne Twister в качестве генератора ядра. Он генерирует 53-битные значения точности и имеет период 2 ** 19937-1
. Базовая реализация в C является быстрой и поточно-ориентированной. Mersenne Twister является одним из наиболее тщательно протестированных генераторов случайных чисел из существующих. Однако, будучи полностью детерминированным, он не подходит для всех целей и совершенно не подходит для криптографических целей.
Функции, предоставляемые этим модулем, на самом деле являются связанными методами скрытого экземпляра класса random.Random
. Вы можете создать свои собственные экземпляры Random()
, чтобы получить генераторы, которые не делятся состоянием.
Класс Random()
также можно разделить на подклассы, если вы хотите использовать другой базовый генератор вашего собственного устройства: в этом случае переопределите методы random.random()
, random.seed()
, random.getstate()
и random.setstate()
. При желании новый генератор может предоставить метод random.getrandbits()
— это позволяет random.randrange()
производить выборки в произвольно большом диапазоне.
Модуль random
также предоставляет класс random.SystemRandom
, который использует системную функцию os.urandom()
для генерации случайных чисел из источников, предоставляемых операционной системой.
Предупреждение.
Псевдослучайные генераторы этого модуля не должны использоваться в целях безопасности. В целях безопасности или криптографического использования смотрите «Модуль secrets
«.
Замечания по воспроизводимости последовательностей.
Иногда полезно иметь возможность воспроизвести последовательности, заданные генератором псевдослучайных чисел. При повторном использовании начального значения seed
, одна и та же последовательность должна воспроизводиться от запуска к запуску, пока не запущено несколько потоков.
Большинство алгоритмов и функций модуля могут изменяться в разных версиях Python, но два аспекта гарантированно не изменятся:
- Если будет добавлен новый метод, то обязательно будет предложена обратная совместимость.
- Метод генератора
random()
будет продолжать создавать ту же последовательность, если совместимому методу будет дано то же самое начальное числоseed
.
Примеры использования модуля
random
.
Базовое применение модуля:
>>> import random # Случайное float: 0.0 <= x < 1.0 >>> random.random() # 0.37444887175646646 # Случайное float: 2.5 <= x < 10.0 >>> random.uniform(2.5, 10.0) # 3.1800146073117523 # Интервал между прибытием в среднем 5 секунд >>> random.expovariate(1 / 5) # 5.148957571865031 # Четное целое число от 0 до 100 включительно >>> random.randrange(10) # 7 # Even integer from 0 to 100 inclusive >>> random.randrange(0, 101, 2) 26 # Один случайный элемент из последовательности >>> random.choice(['win', 'lose', 'draw']) 'draw' >>> deck = 'ace two three four'.split() # Перемешать список >>> random.shuffle(deck) >>> deck ['four', 'two', 'ace', 'three'] # Четыре образца без замены >>> random.sample([10, 20, 30, 40, 50], k=4) # [40, 10, 50, 30]
Имитационные расчеты:
# Шесть вращений колеса рулетки (взвешенная выборка с заменой) >>> choices(['red', 'black', 'green'], [18, 18, 2], k=6) # ['red', 'green', 'black', 'black', 'red', 'black'] # Сдайте 20 карт без замены из колоды из 52 игральных карт # и определите пропорцию карт с достоинством в: # десять, валет, дама или король. >>> dealt = sample(['tens', 'low cards'], counts=[16, 36], k=20) >>> dealt.count('tens') / 20 # 0.15 # Оценка вероятности получения 5 или более попаданий из 7 # бросаний монеты, которая выпадает орлом в 60% случаев. >>> def trial(): ... return choices('HT', cum_weights=(0.60, 1.00), k=7).count('H') >= 5 ... >>> sum(trial() for i in range(10_000)) / 10_000 # 0.4169 >>> # Вероятность того, что медиана из 5 выборок находится в средних двух квартилях >>> def trial(): ... return 2_500 <= sorted(choices(range(10_000), k=5))[2] < 7_500 ... >>> sum(trial() for i in range(10_000)) / 10_000 # 0.7958
Пример статистической начальной загрузки с использованием повторной выборки с заменой для оценки доверительного интервала для среднего значения выборки:
# http://statistics.about.com/od/Applications/a/Example-Of-Bootstrapping.htm from statistics import fmean as mean from random import choices data = [41, 50, 29, 37, 81, 30, 73, 63, 20, 35, 68, 22, 60, 31, 95] means = sorted(mean(choices(data, k=len(data))) for i in range(100)) print(f'The sample mean of {mean(data):.1f} has a 90% confidence ' f'interval from {means[5]:.1f} to {means[94]:.1f}')
Пример теста перестановки повторной выборки для определения статистической значимости или Р-значения наблюдаемой разницы между эффектами препарата и плацебо:
# Example from "Statistics is Easy" by Dennis Shasha and Manda Wilson from statistics import fmean as mean from random import shuffle drug = [54, 73, 53, 70, 73, 68, 52, 65, 65] placebo = [54, 51, 58, 44, 55, 52, 42, 47, 58, 46] observed_diff = mean(drug) - mean(placebo) n = 10_000 count = 0 combined = drug + placebo for i in range(n): shuffle(combined) new_diff = mean(combined[:len(drug)]) - mean(combined[len(drug):]) count += (new_diff >= observed_diff) print(f'{n} label reshufflings produced only {count} instances with a difference') print(f'at least as extreme as the observed difference of {observed_diff:.1f}.') print(f'The one-sided p-value of {count / n:.4f} leads us to reject the null') print(f'hypothesis that there is no difference between the drug and the placebo.')
Моделирование времени прибытия и доставки услуг для многосерверной очереди:
from heapq import heappush, heappop from random import expovariate, gauss from statistics import mean, median, stdev average_arrival_interval = 5.6 average_service_time = 15.0 stdev_service_time = 3.5 num_servers = 3 waits = [] arrival_time = 0.0 servers = [0.0] * num_servers # time when each server becomes available for i in range(100_000): arrival_time += expovariate(1.0 / average_arrival_interval) next_server_available = heappop(servers) wait = max(0.0, next_server_available - arrival_time) waits.append(wait) service_duration = gauss(average_service_time, stdev_service_time) service_completed = arrival_time + wait + service_duration heappush(servers, service_completed) print(f'Mean wait: {mean(waits):.1f}. Stdev wait: {stdev(waits):.1f}.') print(f'Median wait: {median(waits):.1f}. Max wait: {max(waits):.1f}.')
Случайный модуль Python
Модуль random
— это встроенный модуль для генерации псевдослучайных величин. Его можно использовать для выполнения некоторых действий случайным образом, например, для получения случайного числа, выбора случайных элементов из списка, случайного перемешивания элементов и т. Д.
Генерировать случайные числа с плавающей запятой
Метод random.random ()
возвращает случайное число с плавающей запятой от 0,0 до 1,0. Функция не требует аргументов.
>>> импорт случайный
>>> random.random ()
0,645173684807533
Генерировать случайные целые числа
Метод random.randint ()
возвращает случайное целое число между указанными целыми числами.
>>> импорт случайный
>>> random.randint (1, 100)
95
>>> случайный.рандинт (1, 100)
49
Генерировать случайные числа в пределах диапазона
Метод random.randrange ()
возвращает случайно выбранный элемент из диапазона, созданного аргументами start, stop и step.
По умолчанию начальное значение равно 0. Аналогично, значение шага по умолчанию равно 1.
>>> random.randrange (1, 10)
2
>>> случайный.рандом (1, 10, 2)
5
>>> random.randrange (0, 101, 10)
80
Выбрать случайные элементы
Метод random.choice ()
возвращает случайно выбранный элемент из непустой последовательности. Пустая последовательность в качестве аргумента вызывает ошибку IndexError.
>>> импорт случайный
>>> random.choice ('компьютер')
'т'
>>> случайный.выбор ([12,23,45,67,65,43])
45
>>> random.choice ((12,23,45,67,65,43))
67
Перемешать элементы в случайном порядке
Метод random.shuffle ()
случайным образом меняет порядок элементов в списке.
>>> числа = [12,23,45,67,65,43]
>>> random.shuffle (числа)
>>> числа
[23, 12, 43, 65, 67, 45]
>>> случайный.перемешать (числа)
>>> числа
[23, 43, 65, 45, 12, 67]
Дополнительные сведения о модуле random см. В документации Python.
Используйте модуль случайных чисел для генерации случайных чисел в Python
Python предлагает модуль random
, который может генерировать случайные числа.
Это псевдослучайные числа, поскольку последовательность генерируемых чисел зависит от начального числа.
Если значение заполнения такое же, последовательность будет такой же.Например, если вы используете 2 в качестве начального значения, вы всегда будете видеть следующую последовательность.
случайный импорт
random.seed (2)
печать (random.random ())
печать (random.random ())
печать (random.random ())
Вывод всегда будет следовать последовательности:
0,9560342718892494 0,9478274870593494 0,05655136772680869
Не так уж и случайно, а? Поскольку этот генератор полностью детерминирован, его нельзя использовать для целей шифрования.
Вот список всех функций, определенных в модуле random, с кратким объяснением того, что они делают.
Функция | Описание |
---|---|
семя (a = Нет, версия = 2) | Инициализировать генератор случайных чисел |
getstate () | Возвращает объект, фиксирующий текущее внутреннее состояние генератора |
setstate (состояние) | Восстанавливает внутреннее состояние генератора |
getrandbits (k) | Возвращает целое число Python с k случайными битами |
randrange (start, stop [, step]) | Возвращает случайное целое число из диапазона |
рандинт (а, б) | Возвращает случайное целое число от a до b включительно. |
выбор (seq) | Вернуть случайный элемент из непустой последовательности |
в случайном порядке (seq) | Перемешать последовательность |
выборка (совокупность, тыс.) | Возвращает список уникальных элементов длиной k, выбранных из последовательности совокупности |
случайный () | Вернуть следующее случайное число с плавающей запятой в диапазоне [0.0, 1.0) |
униформа (а, б) | Вернуть случайное число с плавающей запятой от a до b включительно |
треугольный (низкий, высокий, мода) | Вернуть случайное число с плавающей запятой между младшим и старшим, с указанным режимом между этими границами |
бета-вариант (альфа, бета) | Бета-дистрибутив |
экспоненциальный (лямбд) | Экспоненциальное распределение |
гамма-вариант (альфа, бета) | Гамма-распределение |
гаусс (мю, сигма) | Гауссово распределение |
lognormvariate (mu, sigma) | Журнал нормального распределения |
нормальный вариант (мю, сигма) | Нормальное распределение |
vonmisesvariate (mu, kappa) | Распределение Вонмизеса |
паретовариат (альфа) | Распределение Парето |
переменная Weibull (альфа, бета) | Распределение Вейбулла |
Посетите эту страницу, чтобы узнать больше о том, как вы можете генерировать псевдослучайные числа в Python.
Как использовать модуль Random в Python
Обзор
В этом посте я хотел бы описать использование модуля random в Python. Модуль random обеспечивает доступ к функциям, которые поддерживают множество операций. Возможно, самое главное — это то, что он позволяет генерировать случайные числа.
Когда это использовать?
Мы хотим, чтобы компьютер выбирал случайное число из заданного диапазона. Выбирал случайный элемент из списка, выбирал случайную карту из колоды, подбрасывал монету и т. Д.При повышении безопасности базы данных паролей или при включении функции случайной страницы вашего веб-сайта.
Случайные функции
Случайный модуль содержит несколько очень полезных функций.
Randint
Если нам нужно случайное целое число, мы можем использовать функцию randint. Randint принимает два параметра: наименьшее и наибольшее число. Генерация целых чисел от 1,5. Первое значение должно быть меньше второго.
импорт случайный
напечатать random.randint (0, 5)
Будет выведено 1, 2, 3, 4 или 5.
Случайное
Если вам нужно большее число, вы можете его умножить.
Например, случайное число от 0 до 100:
import random
random.random () * 100
Выбор
Сгенерировать случайное значение из последовательности последовательности.
random.choice (['красный', 'черный', 'зеленый']).
Функцию выбора часто можно использовать для выбора случайного элемента из списка.
импорт случайный
myList = [2, 109, False, 10, "Lorem", 482, "Ipsum"]
случайный.выбор (myList)
Перемешать
Функция перемешивания перемешивает элементы в списке на месте, чтобы они располагались в случайном порядке.
random.shuffle (список) Пример взят из этого сообщения в Stackoverflow
из случайного перемешивания импорта
x = [[i] для i в диапазоне (10)]
перемешать (x)
Выход:
# print x дает [[9], [2], [7], [0], [4], [5], [3], [1], [8], [6]] »
# конечно, ваши результаты будут отличаться
Randrange
Сгенерировать случайно выбранный элемент из диапазона (начало, остановка, шаг)
random.randrange (начало, остановка [, шаг])
случайный импорт
для i в диапазоне (3):
напечатать random.randrange (0, 101, 5)
Пример кода
Давайте посмотрим на этот пример (скопирован из PYMOTW Дуга Хеллмана)
import random
импортировать itertools
results = {'Heads': 0,
'решки': 0,
}
стороны = resultss.keys ()
для i в диапазоне (10000):
исходы [random.choice (стороны)] + = 1
print 'Heads:', results ['головы']
напечатайте 'Tails:', results ['tails']
Допускаются только два результата, поэтому вместо использования чисел и их преобразования слова «орел» и «решка» используются с выбором ().
Результаты заносятся в таблицу с использованием имен результатов в качестве ключей.
Рекомендуемое обучение Python
Для обучения Python наша главная рекомендация — DataCamp.
$ python random_choice.py
Голов: 4984
Хвосты: 5016
Дополнительная информация
http://en.wikibooks.org/wiki/Choose_Your_Own_Pyventure/Random_and_PRNGs http://docs.python.org/2/library/random.html http://www.cs.swarthmore.edu/~adanner/cs21/f09/randomlib.php
Рекомендуемое обучение Python
Для обучения Python наша главная рекомендация — DataCamp.
Python random Module — генерировать случайные числа / последовательности
Эта статья посвящена модулю random
в Python, который используется для генерации псевдослучайных чисел для различных вероятностных распределений.
Методы модуля случайных чисел Python
1. seed ()
Инициализирует генератор случайных чисел. Чтобы сгенерировать новую случайную последовательность, необходимо установить начальное число в зависимости от текущего системного времени. random.seed ()
устанавливает начальное число для генерации случайных чисел.
2. getstate ()
Возвращает объект, содержащий текущее состояние генератора. Чтобы восстановить состояние, передайте объект в setstate ()
.
3. setstate (state_obj)
Восстанавливает состояние генератора в момент вызова getstate ()
, передавая объект состояния.
4. getrandbits (k)
Возвращает целое число Python с k
случайными битами. Это полезно для таких методов, как randrange ()
, для обработки произвольных больших диапазонов для генерации случайных чисел.
>>> импорт случайный >>> random.getrandbits (100) # Получить случайное целое число, имеющее 100 бит 802952130840845478288641107953
Вот пример, иллюстрирующий методы getstate ()
и setstate ()
.
случайный импорт random.seed (1) # Получить состояние генератора состояние = random.getstate () print ('Создание случайной последовательности из 3-х целых чисел ...') для i в диапазоне (3): печать (random.randint (1, 1000)) # Восстановить состояние до точки до того, как последовательность была сгенерирована случайный.setstate (состояние) print ('Создание одинаковой идентичной последовательности из 3-х целых чисел ...') для i в диапазоне (3): печать (random.randint (1, 1000))
Возможный результат:
Генерация случайной последовательности из 3 целых чисел ... 138 583 868 Создание одинаковой идентичной последовательности из 3-х целых чисел ... 138 583 868
Генерация случайных целых чисел
Модуль random предоставляет некоторые специальные методы для генерации случайных целых чисел.
1. randrange (start, stop, step)
Возвращает случайно выбранное целое число из диапазона (start, stop, step)
.Это вызывает ValueError
, если start
> stop
.
2. randint (a, b)
Возвращает случайное целое число от a до b (оба включительно). Это также вызывает ValueError
, если a
> b
.
Вот пример, иллюстрирующий обе указанные выше функции.
случайный импорт я = 100 j = 20e7 # Генерирует случайное число от i до j a = random.randrange (i, j) пытаться: b = случайный.рандом (j, i) кроме ValueError: print ('ValueError в randrange () с момента запуска> остановки') c = random.randint (100, 200) пытаться: d = random.randint (200, 100) кроме ValueError: print ('ValueError в randint () с 200> 100') print ('я =', я, 'и j =', j) print ('randrange () сгенерированное число:', a) print ('randint () сгенерированное число:', c)
Возможный выход
ValueError в randrange (), поскольку start> stop ValueError в randint () с 200> 100 i = 100 и j = 200000000.0 randrange () сгенерированный номер: 143577043 сгенерированное число randint (): 170
Генерация случайных чисел с плавающей запятой
Подобно генерации целых чисел, существуют функции, которые генерируют случайные последовательности с плавающей запятой.
- случайный. random () -> Возвращает следующее случайное число с плавающей запятой от [0,0 до 1,0)
- random. uniform (a, b) -> Возвращает случайное число с плавающей запятой
N
, такое, что a <= N <= b , если a <= b, и b <= N <= a , если b- случайный. expovariate (lambda) -> Возвращает число, соответствующее экспоненциальному распределению.
- случайный. gauss (mu, sigma) -> Возвращает число, соответствующее гауссовскому распределению.
Есть аналогичные функции для других распределений, таких как Нормальное распределение, Гамма-распределение и т. Д.
Пример генерации этих чисел с плавающей запятой приведен ниже:
import random print ('Случайное число от 0 до 1:', random.случайный()) print ('Равномерное распределение между [1,5]:', random.uniform (1, 5)) print ('Распределение по Гауссу со средним значением = 0 и стандартным отклонением = 1:', random.gauss (0, 1)) print ('Экспоненциальное распределение с лямбда = 0,1:', random.expovariate (0,1)) print ('Нормальное распределение со средним значением = 1 и стандартным отклонением = 2:', random.normalvariate (1, 5))
Возможный выход
Случайное число от 0 до 1: 0,44663645835100585 Равномерное распределение между [1,5]: 3.65657099941547 Распределение Гаусса со средним значением = 0 и стандартным отклонением = 1: -2.271813609629832 Экспоненциальное распределение с лямбда = 0,1: 12,64275539117617 Нормальное распределение со средним значением = 1 и стандартным отклонением = 2: 4,2595111757
Случайные последовательности с использованием модуля случайных чисел
Подобно целым числам и последовательностям с плавающей запятой, общая последовательность может быть набором элементов, например списком / кортежем. Модуль random
предоставляет полезные функции, которые могут вводить состояние случайности в последовательности.
1. random.shuffle (x)
Используется для перемешивания последовательности на месте.Последовательность может быть любым списком / кортежем, содержащим элементы.
Пример кода для иллюстрации перетасовки:
импорт случайный последовательность = [random.randint (0, i) для i в диапазоне (10)] print ('Перед перемешиванием', последовательность) random.shuffle (последовательность) print ('После перемешивания', последовательность)
Возможный вывод:
Перед перемешиванием [0, 0, 2, 0, 4, 5, 5, 0, 1, 9] После перемешивания [5, 0, 9, 1, 5, 0, 4, 2, 0, 0]
2. random.choice (seq)
Это широко используемая на практике функция, в которой вы хотите случайным образом выбрать элемент из списка / последовательности.
случайный импорт a = ['один', 'одиннадцать', 'двенадцать', 'пять', 'шесть', 'десять'] печать (а) для i в диапазоне (5): печать (случайный выбор (а))
Возможный результат
[«один», «одиннадцать», «двенадцать», «пять», «шесть», «десять»] 10 одиннадцать шесть двенадцать двенадцать
3. random.sample (совокупность, k)
Возвращает случайную выборку из последовательности длиной k
.
случайный импорт a = ['один', 'одиннадцать', 'двенадцать', 'пять', 'шесть', 'десять'] печать (а) для i в диапазоне (3): b = случайный.образец (а, 2) print ('случайная выборка:', b)
Возможный результат
[«один», «одиннадцать», «двенадцать», «пять», «шесть», «десять»] случайная выборка: ['пять', 'двенадцать'] случайная выборка: ['десять', 'шесть'] случайная выборка: ['одиннадцать', 'один']
Случайное начальное число
Поскольку псевдослучайная генерация основана на предыдущем числе, мы обычно используем системное время, чтобы гарантировать, что программа выдает новый результат каждый раз, когда мы ее запускаем. Таким образом, мы используем семян
.
Python предоставляет нам random.seed ()
, с помощью которого мы можем установить seed для получения начального значения. Это начальное значение определяет вывод генератора случайных чисел, поэтому, если оно остается прежним, вывод также остается прежним.
случайный импорт random.seed (1) print ('Генерация случайной последовательности из 4 чисел ...') print ([random.randint (1, 100) для i в диапазоне (5)]) # Сбросить семя снова на 1 random.seed (1) # Теперь мы получаем ту же последовательность print ([random.randint (1, 100) для i в диапазоне (5)])
Возможный результат
Генерация случайной последовательности из 4 чисел... [18, 73, 98, 9, 33] [18, 73, 98, 9, 33]
Это гарантирует, что мы должны помнить о семени при работе с псевдослучайными последовательностями, поскольку последовательность может повторяться, если семя не изменилось.
Заключение
Мы узнали о различных методах, которые предоставляет нам случайный модуль Python для работы с целыми числами, числами с плавающей запятой и другими последовательностями, такими как списки и т. Д. Мы также увидели, как начальное число влияет на последовательность псевдослучайные числа.
Ссылки
Как сгенерировать случайные числа в Python | Программа инженерного образования (EngEd)
Случайное событие — это событие, которое невозможно предсказать заранее. Как компьютеры делают случайные числа? Мы создадим несколько собственных генераторов случайных чисел, чтобы показать, как они работают.
Зачем это нужно?
Зачем делать генератор случайных чисел, если мы можем просто использовать random.random ()
?
Приятно знать, как работают алгоритмы, которые вы используете.Некоторые могут быть лучше для вашего проекта, чем другие. Знание того, как они работают, поможет вам выбрать лучший.
Известно, что некоторые генераторы случайных чисел очень плохие. Стандартные в Perl, Java и C печально известны. Если вы работаете на любом из этих языков, возможно, вы предпочтете создать свой собственный генератор.
События реального мира
Мы можем использовать события реального мира для генерации случайности. Вот как работает random.org. Он использует атмосферный шум для генерации своих чисел.Атмосферный шум очень хаотичный. Технически вы могли бы это предсказать, если бы знали точное состояние каждой молекулы в мире.
Сайт делает ставку на то, что вы этого не делаете. Как выразился доктор Мадс Хаар: «Я думаю, что наиболее значимым определением случайности является то, что люди не могут предсказать».
Вы можете использовать API random.org, чтобы использовать эти случайные числа в своем коде. Хотя для его использования вам понадобится Интернет, а многим это не понравится.
Проблема с использованием реальных событий в том, что вам нужно устройство для их измерения.Если у вас этого нет, это не сработает.
Псевдослучайность
Должен быть способ получше, правда?
Компьютеры не могут быть полностью случайными без получения данных от реальных случайных событий. Истинно-случайные события очень редки. Если бы вы знали точное состояние каждого кварка во Вселенной, вы могли бы предсказать почти все.
Вместо этого компьютеры обычно используют генераторы псевдослучайных чисел. Они не на 100% случайны, но большинству людей они будут казаться случайными.
Ваш компьютер может выдавать псевдослучайные числа. Наиболее часто используемые числа — это текущее время и точные данные, введенные пользователем. В наши дни время немного более популярно. Однако в те времена, когда у нас были машины, которые не отслеживали время, нам приходилось использовать ввод данных пользователем.
Конечно, простое использование времени в качестве случайного числа не звучит слишком случайно. Если кто-то составит кучу случайных чисел примерно в одно и то же время, возникнет проблема.Мы можем изменить его каким-то хаотическим образом, чтобы сгенерировать более случайное число. Мы можем назвать исходное число семенем, поскольку это начальное значение. Затем мы используем алгоритм, чтобы взять наше семя и превратить его в псевдослучайное число. Есть несколько способов сделать это.
Примечание. Если вы пытаетесь использовать случайные числа из соображений безопасности, не используйте ни один из этих алгоритмов. Есть лучшие для вашего случая.
Системная энтропия
Операционные системы на основе Unix имеют уникальный способ генерации случайных чисел.Файл с именем / dev / random
содержит случайное число, полученное из многих источников. Каждый раз, когда вы читаете этот файл, вы получаете новый номер. С этим есть пара проблем.
Чтение этого файла в Linux может занять некоторое время. Он не открывается, пока не будет достаточно информации для создания достаточно случайного числа. Для этого есть решение. Есть еще один файл, / dev / urandom,
, который откроется немедленно. Однако этот файл немного более предсказуем.
Кроме того, блокировка возникает только в версиях Linux старше 5.6
. В macOS / dev / random
и / dev / urandom
ведут себя одинаково. В Linux 5.6 / dev / random
блокируется, только если генератор случайных чисел еще не инициализирован. На момент написания этой статьи Linux 5.6 еще не является стабильным в долгосрочной перспективе, поэтому многие люди все еще не используют его. Для некоторых пользователей это все еще может быть медленным.
Другая проблема в том, что этого файла нет в Windows. Нам нужен генератор случайных чисел, который работает во всех системах.
Гигантский список
Этот метод наиболее простой в реализации.Нам просто нужен гигантский список чисел, а затем мы можем просмотреть его.
случайное_число = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3, 8, 4, 6, 2, 6 , 4]
random_number_index = 0
def rand ():
глобальный random_number_index
число = случайное_число [случайное_число_индекс]
random_number_index = (random_number_index + 1)% len (случайные_числа)
номер возврата
Запустить код
Получаем номер из списка и переходим к следующему номеру в списке.Это быстрый и простой способ генерировать случайные числа. Этот метод используется в Fire Emblem, и умные игроки научились им злоупотреблять. Очевидно, этот метод не очень хорош. Это повторяется предсказуемым образом, который согласуется с каждым запуском. = xorshift_seed << 5 xorshift_seed% = int ("ffffffff", 16) # Модуль ограничивает его 32-битным числом вернуть xorshift_seed
Запустить код
Проблема в том, что это просто статистически, а не случайно.Мы можем сделать демонстрацию, чтобы показать это. Эта демонстрация запускает как данную реализацию xorshift, так и функцию random.randint ()
, чтобы увидеть, насколько равномерно распределены результаты.
xorshift ()% 10
0: 189 раз
1: 220 раз
2: 179 раз
3: 181 раз
4: 214 раз
5: 169 раз
6: 239 раз
7: 197 раз
8: 203 раза
9: 209 раз
random.randint (0, 9)
0: 198 раз
1:189 раз
2: 190 раз
3: 218 раз
4: 222 раза
5: 186 раз
6: 197 раз
7: 195 раз
8: 218 раз
9: 187 раз
Хотя реализация xorshift довольно четкая, число 6 встречается довольно часто, а 5 — немного необычно.Диапазон вхождений составляет около 70. Однако со встроенной функцией случайных чисел Python значения ближе. Ассортимент всего около 40.
Однако есть несколько вариантов xorshift, которые работают намного лучше. Посмотрите на них, если вам нужен невероятно быстрый генератор случайных чисел.
Алгоритм среднего квадрата
Возьмите семя, возведите его в квадрат и используйте только средние цифры. Чтобы вычислить следующее число, вы берете предыдущее случайное число и используете его в качестве начального числа.
Для создания начального числа вы можете выбрать один из двух методов.Вы можете использовать текущее время или использовать / dev / random
или / dev / urandom
в Unix.
Проблема в том, что, в зависимости от семени, вы можете получить повторяющийся узор раньше, чем вы хотите. Мы называем количество раз, необходимое для получения повторяющейся последовательности, периодом . Некоторые семена дадут вам более длительный период, чем другие.
Двухзначное начальное число 50 будет просто повторять одно и то же число вечно. Если числа будут повторяться очень быстро, их будет намного легче предсказать, а некоторые числа вообще не появятся.Нужен лучший алгоритм.
Линейный конгруэнтный генератор
Для этого алгоритма нам нужно еще несколько параметров. Помимо начального числа нам понадобится множитель, приращение и модуль. О том, как в этом разобраться, поговорим позже. Чтобы сгенерировать число, вам просто нужно вычислить следующее:
число = (множитель * начальное число + приращение)% модуля
При хорошем множителе и приращении периодом для этого алгоритма является модуль.Вы можете написать функцию для генерации множителя и приращения за вас. Хотя было бы быстрее просто жестко их закодировать. Мы можем использовать определенные значения для множителя, приращения и модуля, чтобы получить как можно более длинный период.
- Приращение и модуль не должны иметь общих множителей.
- (множитель — 1) должно делиться на все простые множители модуля.
- Если модуль кратен 4, то множитель также должен быть кратным 4.
Чтобы прояснить, у вас все еще есть гарантия повторения в какой-то момент с этим алгоритмом. Хотя, если вы используете правильные значения, программа, вероятно, завершится раньше, чем это произойдет.
Любой из этих генераторов случайных чисел будет создавать числа, которые кажутся случайными. Некоторые могут быть лучше для вашей программы, чем другие. Прочитав это, вы сможете выбрать подходящий для своего проекта.
Вклад экспертной оценки: Lalithnarayan C
Случайный модуль Python — Javatpoint
Функции модуля Python random зависят от функции генератора псевдослучайных чисел random (), которая генерирует число с плавающей запятой между 0.0 и 1.0.
В произвольном модуле используются различные типы функций, которые приведены ниже:
random.random ()
Эта функция генерирует случайное число с плавающей запятой от 0,0 до 1,0.
random.randint ()
Эта функция возвращает случайное целое число между указанными целыми числами.
random.choice ()
Эта функция возвращает случайно выбранный элемент из непустой последовательности.
Пример
# импорт «случайного» модуля.случайный импорт
# Мы используем функцию choice () для генерации случайного числа из
# заданный список номеров.
print («Случайное число из списка:», end = «»)
печать (random.choice ([50, 41, 84, 40, 31]))
Выход:
Случайное число из списка: 84
random.shuffle ()
Эта функция случайным образом меняет порядок элементов в списке.
random.randrange (начало, конец, шаг)
Эта функция используется для генерации числа в диапазоне, указанном в ее аргументе.Он принимает три аргумента: начальное число, последнее число и шаг, который используется для пропуска числа в диапазоне. Рассмотрим следующий пример.
# Мы используем функцию randrange () для генерации в диапазоне от 100
от # до 500. Последний параметр 10 — это размер шага, который нужно пропустить.
# десять цифр при выборе.
случайный импорт
print («Случайное число из диапазона:», end = «»)
печать (random.randrange (100, 500, 10))
Выход:
Случайное число из диапазона: 290
случайный.семя ()
Эта функция используется для применения к конкретному случайному числу с начальным аргументом. Он возвращает значение сопоставителя. Рассмотрим следующий пример.
# импорт «случайного» модуля.
случайный импорт
# использование random () для генерации случайного числа
# от 0 до 1
print («Случайное число от 0 до 1:», end = «»)
печать (random.random ())
# использование seed () для засева случайного числа
random.seed (4)
Выход:
Случайное число от 0 до 1: 0.4405576668981033
Random — BBC micro: bit документация MicroPython 1.0.1
Иногда вы хотите оставить все на волю случая или немного перепутать: вы хотите
устройство действует случайным образом.
MicroPython поставляется с модулем random
, чтобы упростить введение случайности
и немного хаоса в вашем коде. Например, вот как прокрутить случайный
имя на дисплее:
из импорта микробита * случайный импорт names = [«Мэри», «Иоланда», «Дэмиен», «Алия», «Кушал», «Мэй Сю», «Золтан»] отображать.scroll (random.choice (имена))
Список ( имен,
) содержит семь имен, определенных как строки символов.
Последняя строка — вложенных (эффект «лука», представленный ранее):
Метод random.choice
принимает список имен
в качестве аргумента и возвращает
предмет, выбранный наугад. Этот предмет (случайно выбранное имя) является аргументом
для отображения . прокрутите
.
Можете ли вы изменить список, включив в него свой собственный набор имен?
Случайные числа
Случайные числа очень полезны.Они обычны в играх. Почему еще у нас
игральная кость?
MicroPython поставляется с несколькими полезными методами случайных чисел. Вот как
сделать простые кости:
из импорта микробита * случайный импорт display.show (str (random.randint (1, 6)))
Каждый раз, когда устройство перезагружается, на нем отображается число от 1 до 6. Вы находитесь.
начинают знакомство с вложением , поэтому важно отметить, что
random.randint
возвращает целое число между двумя аргументами включительно
(целое число еще называют целым — отсюда и название метода).Обратите внимание: поскольку display.show
ожидает символ, мы используем
str
функция для преобразования числового значения в символ (мы превращаем, для
Например, 6
в "6"
).
Если вы знаете, что вам всегда нужен номер от 0
до N
, используйте
random.randrange
method. Если вы дадите ему единственный аргумент, он вернет
случайные целые числа до, но не включая, значение аргумента N
(это отличается от поведения random.randint
).
Иногда нужны числа с десятичной точкой. Они называются
чисел с плавающей запятой чисел, и такое число можно сгенерировать с помощью
random. random
метод. Это возвращает только значения от 0,0
до 1,0
включительно. Если вам нужны более крупные случайные числа с плавающей запятой, добавьте результаты
из случайных. случайных
и случайных. случайных
как это:
из импорта микробита * случайный импорт ответ = случайный.randrange (100) + random.random () display.scroll (str (ответ))
Семена хаоса
Генераторы случайных чисел, используемые компьютерами, на самом деле не случайны. Они просто
дать случайные похожие результаты с начальным значением seed . Семя часто
генерируется из случайных значений, таких как текущее время и / или показания из
датчики, такие как термометры, встроенные в микросхемы.
Иногда вы хотите иметь повторяющееся случайное поведение: источник
воспроизводимая случайность.Это все равно, что сказать, что вам нужны те же пять
случайные значения каждый раз, когда вы бросаете кости.
Этого легко добиться, установив значение seed . Учитывая известное семя,
генератор случайных чисел создаст такой же набор случайных чисел. Семя
установить с random.seed
и любым целым числом (целым). Эта версия
программа dice всегда дает одинаковые результаты:
из импорта микробита * случайный импорт random.seed (1337) в то время как True: если button_a.was_pressed (): display.show (str (random.randint (1, 6)))
Можете ли вы понять, почему этой программе нужно, чтобы мы нажимали кнопку A вместо сброса
устройство как в первом примере игральных костей ..?
.