Рандом python: Случайные числа в Python / Skillbox Media

Содержание

python random

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

betavariate()

random.betavariate(alpha, beta)

Бета-распределение. Возвращает числа в диапазоне от 0 до 1. alpha > -1 и beta > -1.

choice()

random.choice(iter)

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

random.choice('123')
# '3'
random.choice([1, 2, 3])
# 2

cunifvariate()

random.cunifvariate(mean, arc)

Круговое равномерное распределение. В аргументе mean передается средний угол, а в аргументе arc – ширина диапазона распределения относительно среднего угла. Оба эти значения должны указываться в радианах, в диапазоне от 0 до pi. Возвращает значения в диапазоне (mean — arc/2, mean + arc/2).

expovariate()

random.expovariate(lambd)

Экспоненциальное распределение. В аргументе lambd передается значение, полученное делением 1.0 на желаемое среднее значение. Возвращает значения в диапазоне [0, +Infinity).

gammavariate()

random.gammavariate(alpha, beta)

Гамма-распределение. alpha > -1, beta > 0.

gauss()

random.gauss(mu, sigma)

Гауссово распределение 1 со средним значением mu и стандартным отклонением sigma. Выполняется немного быстрее, чем функция normalvariate().

getrandbits()

random.getrandbits(k)

Создает длинное целое число, состоящее из k случайных битов.

getstate()

random.getstate()

Возвращает объект, представляющий текущее состояние генератора. Позднее этот объект можно передать функции setstate(), чтобы восстановить состояние генератора.

jumpahead()

random.jumpahead(n)

Быстро изменяет состояние генератора, как если бы функция random() была вызвана n раз подряд. Аргумент n должен быть целым неотрицательным числом.

lognormvariate()

random.lognormvariate(mu, sigma)

Логарифмически нормальное распределение, то есть нормальное распределение логарифмов чисел, со средним значением mu и стандартным отклонением sigma.

normalvariate()

random.normalvariate(mu, sigma)

Нормальное распределение со средним значением mu и стандартным отклонением sigma.

paretovariate()

random.paretovariate(alpha)

Распределение Парето с параметром формы alpha.

randint()

random.randint(start, end)

Возвращает случайное целое число x в указанном диапазоне

random.randint(1, 100)
# 99

random()

random.random()

Возвращает случайное вещественное число, находящееся в диапазоне от 0.0 до 1.0

randrage()

random.randrage(start, stop[, step])

Возвращает случайное целое число, находящееся в диапазоне range(start, stop, step)

sample()

random.sample(iter, len)
Parameters

Возвращает список случайных элементов последовательности, из указанного количества элементов.

>>> random.sample('string', 2)
['i', 'r']

seed()

random.seed([x])

Инициализирует генератор случайных чисел. При вызове без аргумента или со значением None в аргументе x генератор инициализируется значением системного времени. В противном случае, если x является целым или длинным целым числом, используется значение x. Если аргумент x не является целым числом, он должен быть хешируемым объектом, а в качестве инициализирующего значения будет использоваться результат вызова функции hash(x).

setstate()

random.setstate(state)

Восстанавливает состояние генератора случайных чисел из объекта, полученного в результате вызова функции getstate().

shuffle()

random.shuffle(items: list[, random=random()])

Случайным образом перемешивает элементы списка.

arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
random.shuff1e(arr)
arr
# [8, 6, 9, 5, 3, 7, 2, 4, 10, 1]

triangular()

random.triangular([low[, high[, mode]]])

Треугольное распределение на отрезке [low, high) с модальным значением mode. По умолчанию аргумент low имеет значение 0, high – значение 1.0, а mode – значение посередине между low и high.

uniform()

random.uniform(a, b)

Возвращает случайное вещественное число, находящееся в диапазоне от a до b

vonmisesvariate()

random.vonmisesvariate(mu, kappa)

Распределение фон Мизеса, 1 где mu – средний угол в радианах между 0 и 2 * pi, а kappa – неотрицательный коэффициент концентрации. Если аргумент kappa имеет нулевое значение, распределение фон Мизеса вырождается до равномерного распределения угла в диапазоне от 0 до 2 * pi.

weibullvariate()

random.weibullvariate(alpha, beta)

Распределение Вейбулла с параметром масштабирования alpha и параметром формы beta.

Random()

class random.Random
random()
seed()
getstate()
setstate()
jumphead()

WichmannHill()

class random.WichmannHill

генератор Уичмана-Хилла

SystemRandom()

class random.SystemRandom

генерирует случайные числа, используя системный генератор случайных чисел os.urandom()

Модуль random — генерация случайных чисел

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

import random

Перечислим основные функции

random() — возвращает псевдослучайное число от 0.0 до 1.0

>>> import random
>>> random.random()
0.7466459239415119
>>> random.random()
0.4908688798600912
>>> random.random()
0.5724365575322524

seed(<Параметр>) — настраивает генератор случайных чисел на новую последовательность. По умолчанию используется системное время. Если значение параметра будет одиноким, то генерируется одинокое число:

>>> random.seed(20)
>>> random.random()
0.9056396761745207
>>> random.seed(20)
>>> random.random()
0.9056396761745207

Получить любой ресурс на свою страницу Вконтакте можно с покупкой рекламы на сайте Avi1. Здесь Вы найдете пакетные предложения по добавлению лайков, подписчиков, репостов и пр. в любое сообщество или на личный профиль. Становитесь популярнее и известнее!

uniform(<Начало>, <Конец>) — возвращает псевдослучайное вещественное число в диапазоне от <Начало> до <Конец>:

>>> random.uniform(0, 10)
6.862541570267026
>>> random.uniform(0, 10)
7.665092563626442

randint(<Начало>, <Конец>) — возвращает псевдослучайное целое число в диапазоне от <Начало> до <Конец>:

>>> random.randint(0, 50)
46
>>> random.randint(0, 50)
13

choince(<Последовательность>) — возвращает случайный элемент из любой последовательности (строки, списка, кортежа):

>>> random.choice('Python3')
't'
>>> random.choice(['n', 'e', 'w'])
'w'
>>> random.choice(('b', 'a', 'g'))
'a'

Взвешенный случайный выбор с использованием Python

  1. Используйте функцию random.choices() для генерации взвешенных случайных выборов
  2. Используйте функцию numpy.random.choice() для генерации взвешенного случайного выбора

В Python мы можем легко генерировать случайные числа с помощью библиотек Random и Numpy.

Выбор случайных элементов из списка или массива по вероятному результату элемента известен как взвешенный случайный выбор. Выбор элемента определяется присвоением вероятности каждому присутствующему элементу. Иногда из списка сделанных элементов также выбирается более одного элемента.

В этом руководстве мы обсудим, как генерировать взвешенный случайный выбор в Python.

Используйте функцию

random.choices() для генерации взвешенных случайных выборов

Здесь random модуль Python используется для создания случайных чисел.

В функции choices() взвешенный случайный выбор выполняется с заменой. Он также известен как взвешенная случайная выборка с заменой. Кроме того, в этой функции важную роль играют веса. Веса определяют вероятный результат выбора каждого элемента. Есть два типа гирь:

  1. Относительный вес
  2. Совокупный вес

Выберите элементы с относительным весом

Параметр weights определяет относительные веса. Вероятный результат различается для каждого элемента в списке. Если вероятный результат для каждого элемента был зафиксирован с использованием относительных весов, то выбор делается только на основе относительных весов.

Вот пример:

import random

List = [12, 24, 36, 48, 60, 72, 84]
print(random.choices(List, weights=(30, 40, 50 , 60, 70, 80, 90), k=7))

Здесь каждому элементу в списке присваивается собственный вес, то есть вероятный результат. Кроме того, k в приведенном выше примере — это количество элементов, необходимых для данного списка.

Выход:

[60, 84, 36, 72, 84, 84, 60]

Здесь общая сумма весов не равна 100, потому что это относительные веса, а не проценты. Число 84 встречается трижды, так как оно имеет наибольший вес среди всех весов. Так что вероятность его появления будет максимальной.

Выберите элементы с совокупным весом

Параметр cum_weight используется для определения совокупных весов. Совокупный вес элемента определяется весом предыдущего элемента плюс относительный вес этого элемента. Например, относительные веса [10, 20, 30, 40] эквивалентны кумулятивным весам [10, 30, 60, 100].

Вот пример:

import random

List = [13, 26, 39, 52, 65]
print(random.choices(List, cum_weights=(10, 30, 60, 100, 150), k=5))

Выход:

[65, 65, 39, 13, 52]

Здесь также число 65 встречается чаще, чем любое другое число, поскольку оно имеет наибольший вес.

Используйте функцию

numpy.random.choice() для генерации взвешенного случайного выбора

Для генерации случайного взвешенного выбора Numpy обычно используется, когда пользователь использует версию Python ниже 3.6.

Здесь numpy.random.choice используется для определения распределения вероятностей. В этом методе берутся случайные элементы 1D-массива, а случайные элементы numpy-массива возвращаются с помощью функции choice().

import numpy as np

List = [500,600,700,800]
sNumbers = np.random.choice(List, 4, p=[0.10,0.20,0.30,0.40])
print(sNumbers)

Здесь вероятность должна быть равна 1. Число 4 представляет размер списка.

Выход:

[800 500 600 800]

Модуль random. Генерация случайных чисел OTUS

В процессе программирования на Python может понадобиться случайное число. О том, как создать собственный простейший генератор псевдослучайных чисел и пойдет разговор в этой статье. Будут рассмотрены некоторые популярные методы и функции, которые включены в модуль random для Python 3 и позволяют получать значения случайным образом (randomly).

В качестве лирического отступления следует сказать, что, согласно специфике внутреннего состояния генератора, модуль для Python под названием random позволяет сгенерировать не случайный, а псевдослучайный элемент, то есть значения и их последовательности формируются на основе формулы. Раз последовательность зависит от нескольких параметров, она не является случайной в полном смысле этого слова. Если нужна истинная случайность, генерация может основываться, к примеру, на принципах квантовой механики, однако на практике это слишком дорого и сложно, да и не всегда экономически целесообразно, ведь для многих задач программирования вполне подойдут и псевдослучайные генераторы (если речь идет не про онлайн-казино). Вдобавок к этому, случайность (randomness) — вещь капризная, поэтому, как тут не вспомнить прекрасное высказывание американского математика Роберта Кавью:

Также на ум приходит еще одно интересное высказывание, но уже от выдуманного персонажа и с некоторым уклоном в философию:

Применение random в Python

В языке программирования «Пайтон» модуль random позволяет реализовывать генератор псевдослучайных чисел для разных распределений, куда входят как целые (integers), так и вещественные числа, то есть числа с плавающей запятой.

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

Но мы не будем углубляться в распределения, а рассмотрим самые простые методы. А так как разглядывать их в таблице совершенно неинтересно, давайте попрактикуемся и выясним, как может быть использован тот или иной метод в деле.

Но прежде чем это сделать и иметь возможность полноценно использовать модуль, его надо импортировать. Делается это предельно просто: нужно прописать в начале кода import random.

random.random

У модуля random есть одноименный метод-тезка — функция random. Она возвращает случайное число в диапазоне 0 — 1.0:

import random

print("Выводим случайное число с помощью random.random():")

print(random.random())

Если вы скопируете этот простейший код себе (можно использовать любой онлайн-компилятор), вы получите другое число.

Также вывести можно не одно, а, к примеру, три (three) числа (используется for i in range), причем прекрасным решением будет ограничить вывод до двух знаков после запятой (за это отвечает ‘%.2f’):

import random

print("Выводим 3 случайных числа; не более 2 знаков после запятой:")

print(['%.2f' % random.random() for i in range(3)])

random.seed

Метод seed может показаться более сложным для понимания. Фишка в том, что, как уже было сказано выше, используется генератор псевдослучайных чисел, то есть выдача этих чисел происходит в соответствии с алгоритмом. Алгоритм вычисляет значение на основе другого числа, но это число берется не с потолка — оно вычисляется на основании текущего системного времени. В результате, если вы будете пробовать на своем компьютере один из кодов, рассмотренных выше, вы будете получать каждый раз новые числа.

Если же задействовать seed с одним и тем же параметром, то вычисление будет производиться на основании этого параметра. Итог — на выходе будут получаться одинаковые «случайные» значения. Возьмем для примера параметр 5 и сделаем так, чтобы метод отработал дважды:

import random

random.seed(5)

print(random.random())

random.seed(5)

print(random.random())

random.uniform

С uniform все проще: возвращается псевдослучайное вещественное число, находящееся в определенном диапазоне, который указывается разработчиком:

import random

print("Находим число с плавающей точкой в заданном диапазоне:")

print(random.uniform(5, 10))

random.randint

Randint в Python тоже позволяет вернуть псевдослучайное число в определенном диапазоне, но тут уже речь идет о целом значении (int, integer):

import random

print("Используем randint для генерации целого числа int из диапазона:")

print(random.randint(10, 20))

random.randrange

Следующий метод, называемый randrange, похож на предыдущий randint, но тут, кроме диапазона целых значений int, можно добавить еще и шаг выборки (в качестве третьего параметра):

import random

print("Генерируем случайное целое число в заданном диапазоне с шагом")

print(random.randrange(10, 100, 2))

Судя по результату ниже и в соответствии с выбранным диапазоном от 10 до 100, установив шаг 2, мы будем получать лишь четные значения:

random.choice

Применение choice позволяет вернуть элемент из какой-нибудь последовательности — это может быть список, строка, кортеж.

И это уже интереснее, т. к. напрашивается аналогия с броском игрального кубика:

import random

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

print("Выборка одного элемента из списка с помощью choice:")

print(random.choice(list))

Ура, выпало шесть!

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

Сыграйте в игру и попробуйте погадать, какой язык программирования вам лучше учить в Otus:

import random

list = ['Python','Java','C#','C++','PHP','C','JavaScript','Scala']

print("Какой язык программирования будешь учить?")

print(random.choice(list))

Sample и choices

Начиная с Python 3.6, появился метод choices. Его отличие в том, что он позволяет сделать выборку нескольких элементов из последовательности, а вот сколько именно будет значений, можно указать. В отличие от схожего метода sample, в choices возможно получение одинаковых цифр.

Вернемся к нашему виртуальному кубику. Вот работа sample:

import random

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

print ("Выборка двух случайных значений:")

print (random.sample(list,2))

Все бы ничего, но этот метод будет постоянно выводить 2 разных значения. Если же мы захотим сымитировать бросок двух игральных кубиков, код придется менять, ведь в реальной жизни выкинуть дубль все-таки можно. Но зачем менять код, если есть choices? Он обеспечит вывод двух случайных значения из заданного диапазона, причем они могут повторяться. Это уже максимально приближено к реальному броску двух кубиков, причем профит достигается и за счет того, что объем кода не увеличивается. Ради интереса мы его даже уменьшили — оптимизировали (List превратился в l, да и лишний текст выкинули):

import random

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

print(random.choices(l, k=2))

Кстати, вот и дубль — результат равен [6, 6], причем всего лишь с 5-й попытки (можете поверить на слово):

Правда, тут нюанс: пришлось сменить онлайн-компилятор, так как на предыдущем компиляторе Python версии 3.6 не поддерживался.

random.shuffle

Функция с интересным названием shuffle может перемешивать последовательность, меняя местами значения (она не подходит для неизменяемых объектов). Здесь важна именно последовательность выпадения определенных значений, как в лото.  

import random

list = [1,2,3,4,5,6,7,8,9,10]

random.shuffle(list)

print ("Крутим барабан и достаем шары наугад: ", list)

Остается добавить, что английское слово shuffle означает «тасовать, перемешивать». Как тут не вспомнить картежного шулера или лопату-шуфлю для перемешивания бетонного раствора. Но это так, для общего развития.

Успехов вам, друзья!

Великий random — tirinox.ru

Генераторы случайных чисел (аббр. ГСЧ или RNG) можно разделить на псевдослучайные генераторы (pseudo random number generator – PRNG) и настоящие генераторы (true random number generator – TRNG). Настоящие случайное число может быть получено, например, честным бросанием (без мухлежа) игрального кубика. Но, цифровая техника, в т.ч. и компьютер — вещь точная и детерминированная. И нет так очевидно, где нам там брать случайные числа. Да, бывают аппаратные ГСЧ, построенные на аналоговых шумах или квантовых эффектах, но они не всегда доступны простым пользователям. Однако математики разработали алгоритмы, по которым можно с помощью простых и точных операций (типа сложения и деления) получать «иллюзию» случайности.

Давайте для начала рассмотрим линейный конгруэнтный метод и попробуем сконструировать свой рандом. Все начинается с зерна (seed). x[0] = seed. Следующие случайное число будет равно x[i + 1] = (a * x[i] + b) mod c. Каждое из них будет в пределах [0..c). Вот реализация:

class MyRandom:
    def __init__(self, seed=42):
        self._state = seed

    def random(self):
        self._state = (5 * self._state + 9) % 17
        return self._state


r = MyRandom(42)
print([r.random() for _ in range(10)])
# [15, 16, 4, 12, 1, 14, 11, 13, 6, 5]

r2 = MyRandom(24)
print([r2.random() for _ in range(10)])
# [10, 8, 15, 16, 4, 12, 1, 14, 11, 13]

r3 = MyRandom(42)
print([r3.random() for _ in range(10)])
# [15, 16, 4, 12, 1, 14, 11, 13, 6, 5]

Первое. Последовательности кажутся случайными, но на самом деле качество их невелико. Через некоторые время числа начинают повторятся. Последовательность периодична. Второе. Наш псевдослучайный генератор выдает одинаковые последовательности для одинаковых seed. Алгоритм детерминирован. Последнее свойство бывает вредно и полезно. Представим, что вы проводите эксперимент. Допустим, учите нейросеть. Инициализировав веса случайными числами, вы получаете какой-то результат. Далее вы меняете что-то в архитектуре сети и запускаете снова, и получаете иной результат. Но как убедиться, повлияли ли ваши изменения в коде, или просто иная случайная инициализация изменила результат. Имеет смысл зафиксировать seed генератора случайных чисел константой в начале программы. При следующем запуске мы получим точно такую же инициализацию сети, как и в предыдущем.

Но, если мы не хотим повторяемости, то можно инициализировать генератор какой-то меняющейся от запуска к запуску переменной (например, временем):

import time
r4 = MyRandom(int(time.time()))
print([r4.random() for _ in range(10)])
# [3, 7, 10, 8, 15, 16, 4, 12, 1, 14]

Для получение случайных величин в Python есть несколько способов. Мы рассмотрим следующие:

• Встроенный модуль random
• numpy.random из библиотеки NumPy
• Функцию os.urandom
• Встроенный модуль secrets
• Встроенный модуль uuid

Модуль random

Самый популярный вариант: модель встроенный random. Модуль random предоставляет набор функций для генерации псевдослучайных чисел. Реализована генерация на языке Си (исходник) по более хитрому алгоритму «вихрь Мерсенна», разработанному в 1997 году. Он дает более «качественные» псевдослучайные числа. Но они по-прежнему получается из начального зерна (seed) путем совершения математических операций. Зная seed и алгоритм можно воспроизвести последовательность случайных чисел; более того существуют алгоритмы позволяющие вычислить из последовательности чисел ее seed. Поэтому такие алгоритмы не пригодны для генерации конфиденциальных данных: паролей, и ключей доступа. Но он вполне сгодится для генерации случайностей в играх (не азартных) и прочих приложений, где не страшно, если кто-то сможет воспроизвести и продолжить последовательностей случайных чисел. Воспроизводимость случайностей поможет вам в задачах статистики, в симуляциях различных процессов.

Приступим:

>>> import random

random.seed(new_seed) – сброс ГСЧ с новым seed:

>>> random.seed(4242)
>>> random.random()
0.8624508153567833
>>> random.random()
0.41569372364698065

>>> random.seed(4242)
>>> random.random()
0.8624508153567833
>>> random.random()
0.41569372364698065

Когда мы второй раз задали тот же seed, ГСЧ выдает точно такие же случайные числа. Если мы не задаем seed, то ГСЧ будет скорее всего инициализирован системным временем, и значения будут отличаться от запуска к запуску.

random.randint(a, b) – случайное целое число от a до b (включительно):

>>> random.randint(5, 8)
5
>>> [random.randint(5, 8) for _ in range(10)]
[6, 8, 5, 8, 6, 6, 8, 5, 5, 6]

random.randrange(a, b, step) – случайное целое число от a до b (не включая b) с шагом step. Аргументы имеют такой же смысл, как у функции range. Если мы зададим только a, получим число в [0, a) с шагом 1; если задаем a и b, то в число будет в диапазоне [a, b):

>>> [random.randrange(10) for _ in range(5)]
[9, 3, 7, 0, 4]
>>> [random.randrange(10, 20) for _ in range(5)]
[15, 10, 15, 12, 18]
>>> [random.randrange(10, 20, 2) for _ in range(5)]
[14, 14, 18, 16, 16]

random.choice(seq) – выбирает из последовательности seq случайный элемент. Последовательность должна иметь длину (len). Например list, tuple, range – подойдут, а произвольные генераторы – нет.

>>> alist = [1, 2, 3, 4, 5, 6]
>>> random.choice(alist)
5
>>> random.choice(alist)
3
>>> random.choice(alist)
1

random.choices(population, weights=None, *, cum_weights=None, k=1) – позволяет выбрать k элементов из population. Выбранные элементы могут повторяться. Можно задать веса каждого элемента через weight, или кумулятивные веса через cum_weights. Веса определяют вероятность соответствующего элемента быть выбранным. Если мы не задали никакие веса, то любой элемент считается равновероятным. Кумулятивные веса – это значит, каждый следующий вес является суммой предыдущего и некоторой добавки, которая и есть вес соответствующего элемента. Пример: weights=[10, 5, 30, 5] эквивалентно cum_weights=[10, 15, 45, 50], причем последний вариант предпочтительнее, так как с кумулятивными весами функция работает быстрее.

>>> random.choices([1, 2, 3], k=10)
[1, 3, 1, 1, 2, 2, 1, 3, 3, 1]

📎 Пример. Выбор с весами (80% шанс получить 1, 15% для 2 и 5% для 3):

>>> random.choices([1, 2, 3], k=10, weights=[80, 15, 5])
[1, 1, 1, 1, 2, 1, 3, 1, 1, 1]

📎 Пример. Генерация случайной строки:

>>> import string
>>> ''.join(random.choices(string.ascii_letters, k=10))
'ncNAzTldvg'

random.shuffle(x) – перемешивает саму последовательность x, ничего не возвращает.

>>> x = [10, 20, 30, 40]
>>> random.shuffle(x)
>>> x
[10, 40, 20, 30]
>>> random.shuffle(x)
>>> x
[20, 30, 10, 40]

Если последовательность неизменяема (например, кортеж), то используйте random.sample(x, k=len(x)), которая вернет перемешанный список, не трогая исходную последовательность.

>>> random.sample(x, k=len(x))
[40, 30, 10, 20]

random.random() – случайное вещественное число от 0.0 до 1.0, не включая 1.0, т.е. в диапазоне [0, 1). Равновероятное распределение.

>>> random.random()
0.8505907349159074
>>> random.random()
0.49760476981102786

random.uniform(a, b) – случайное вещественное число на промежутке [a, b], равноверотяно.

>>> random.uniform(5, 7)
6.812839982463059
>>> random.uniform(5, 7)
6.564395491702289
>>> random.uniform(5, 7)
5.875898672403455

random.gauss(mu, sigma) и random.normalvariate(mu, sigma) – нормальные распределения с медианой μ и с среднеквадратичным отклонением σ .

Нормальные распределения

random.triangular(low, high, mode) – треугольное разпределние от low до high с модой mode ∈ [low, high].

Треугольные распределения

random.betavariate(alpha, beta) – бета-распределение.

Бета-распределения

random.expovariate(lambd) – экспоненциальное распределение.

random.gammavariate(alpha, beta) – гамма-распределение (не путать с гамма-функцией).

Гамма-распределения

random.lognormvariate(mu, sigma) – логнормальное распределение. Если случайная величина имеет логнормальное распределение, то её логарифм имеет нормальное распределение.

Логнормальные распределения

random.vonmisesvariate(mu, kappa) – распределение вон Мизеса (также известное как круглое нормальное распределение или распределение Тихонова) является непрерывным распределением вероятности на круге.

Распределения вон Мизеса

random.paretovariate(alpha) – распределение Парето.

Распределения Парето

random.weibullvariate(alpha, beta) – распеделение Вейбулла.

Распределения Вейбулла

Внутри модуля random скрывается класс Random. Можно создавать экземпляры этого класса, которые не будут делить состояние с остальными функциями random. Этот класс содержит методы с аналогичными названиями, что и функции модуля:

>>> my_random = random.Random(42)
>>> my_random.normalvariate(1, 2.5)
1.6133158542696586
>>> my_random.random()
0.27502931836911926
>>> my_random.choice([1, 2, 3])
1

Класс Random пригодится вам, если нужна гарантированная воспроизводимость случайных чисел, ведь из этого ГСЧ только вы берете случайные числа, и никакая более часть программы не нарушит эту последовательность.

Класс random.SystemRandom() – альтернативные класс для случайных чисел, который берет случайные числа не из встроенного алгоритма, а из системного os.urandom, о котором будет рассказано в конце статьи.

Случайные числа в библиотеке NumPy

ГСЧ из NumPy пригодится на случай необходимости генерации случайных многомерных массивов.

numpy.random.seed(n) – задать seed для ГСЧ.

rand(d0, d1, …, dn) – многомерный массив случайных вещественных чисел в диапазоне [0, 1). Размерности указываются через запятую.

>>> import numpy as np
>>> np.random.rand(3, 2)
array([[0.10249247, 0.21503386],
       [0.40189789, 0.23972727],
       [0.28861301, 0.12995166]])

randn(d0, d1, …, dn) – тоже, что и rand, но случайные числа будут распределены нормально вокруг 0 со СКО = 1.

>>> np.random.randn(3, 2)
array([[ 1.13506644,  1.1115104 ],
       [-0.43613352, -0.03630799],
       [ 0.69787228,  1.24875159]])

randint(low[, high, size, dtype]) – случайные целые числа в диапазоне [low, high) в многомерном массиве размера size (целое число или кортеж размерностей).

>>> np.random.randint(10, 20, 5)
array([18, 18, 10, 19, 15])
>>> np.random.randint(10, 20, (3, 2))
array([[10, 13],
       [12, 14],
       [19, 14]])

random_integers(low[, high, size]) – случайные целые числа в диапазоне [low, high] в многомерном массиве размера size (целое число или кортеж размерностей).

>>> np.random.random_integers(10, 20, (3, 2))
array([[10, 20],
       [16, 14],
       [12, 18]])

randint никогда не возвращает верхнюю границу диапазона (high), random_integers – может вернуть и high.

random_sample([size]), random([size]), ranf([size]), sample([size]) – эти четыре функции называются по-разному, но делают одно и тоже. Возвращают многомерный массив случайных вещественных чисел в диапазоне [0, 1). Размерности указываются числом для 1D массива или кортежем для массива большего ранга.

>>> np.random.ranf(3)
array([0.60612404, 0.04881742, 0.17121467])
>>> np.random.sample(4)
array([0.71248954, 0.8613707 , 0.72469335, 0.62528553])
>>> np.random.random_sample((3, 4))
array([[0.39140157, 0.17538846, 0.55895275, 0.58363394],
       [0.52779193, 0.90067421, 0.63571978, 0.62386877],
       [0.52287003, 0.49077399, 0.57247767, 0.15221763]])

numpy.random.choice(a, size=None, replace=True, p=None) – случайно выбирает из 1D массива один и несколько элементов.

a – одномерный массив или число. Если вместо массива – число, то оно будет преобразовано в np.arange(a).

size – размерность возвращаемой величины. По умолчанию size=None, дает один единственный элемент, если size – целое число, то вернется 1D-массив, если size — кортеж, то вернется массив размерностей из этого кортежа.

replace – допускается ли повтор элементов, т.е. «возвращаем ли мы выбранный шар обратно в корзину». По умолчанию – да. Если мы запретим возврат, то мы не сможем извлечь больше элементов, чем есть в исходном массиве.

p – массив вероятностей для каждого элемента быть выбранным. Если не задано, распределение вероятностей равномерно.

📎 Пример. Допуская повторы:

>>> np.random.choice([1, 2, 3, 4], 3)
array([1, 3, 3])

📎 Пример. Не допуская повторы:

>>> np.random.choice([1, 2, 3, 4], 3, replace=False)
array([1, 3, 4])

📎 Пример. Задаем вероятности:

>>> np.random.choice([1, 2, 3, 4], 4, p=[0.1, 0.7, 0.0, 0.2])
array([2, 2, 1, 2])

📎 Пример. Выбор строк:

>>> np.random.choice(["foo", "bar", "dub"])
'dub'
>>> np.random.choice(["foo", "bar", "dub"], size=[2, 2])
array([['bar', 'bar'],
       ['bar', 'dub']], dtype='<U3')

bytes(length) – возвращает length случайных байт.

>>> np.random.bytes(10)
b'\x19~\xd0w\xc2\xb6\xe5M\xb1R'

shuffle(x) и permutation(x) – перемешивают последовательность x. shuffle модифицирует исходную последовательность, а permutation – возвращает новую перемешанную последовательность, не трогая исходную.

>>> x = np.arange(10)
>>> x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

>>> np.random.shuffle(x)
>>> x
array([8, 6, 0, 3, 1, 2, 4, 9, 7, 5])

>>> y = np.random.permutation(x)
>>> y
array([4, 8, 7, 5, 9, 3, 6, 0, 2, 1])

>>> x
array([8, 6, 0, 3, 1, 2, 4, 9, 7, 5])

Также в NumPy имеется еще более богатый выбор различных распределений случайных величин, чем у обычного random. Не будет подробно останавливаться на каждой функции, так как это уже больше статистика, чем программирование. Из названия функций легко понять, какое распределение они представляют. Главная особенность, что у каждый из этих функций есть аргумент size – кортеж размерностей возвращаемого многомерного массива или целое число, если нужен одномерный массив:

  • beta(a, b[, size])
  • binomial(n, p[, size])
  • chisquare(df[, size])
  • dirichlet(alpha[, size])
  • exponential([scale, size])
  • f(dfnum, dfden[, size])
  • gamma(shape[, scale, size])
  • geometric(p[, size])
  • gumbel([loc, scale, size])
  • hypergeometric(ngood, nbad, nsample[, size])
  • laplace([loc, scale, size])
  • logistic([loc, scale, size])
  • lognormal([mean, sigma, size])
  • logseries(p[, size])
  • multinomial(n, pvals[, size])
  • multivariate_normal(mean, cov[, size, …)
  • negative_binomial(n, p[, size])
  • noncentral_chisquare(df, nonc[, size])
  • noncentral_f(dfnum, dfden, nonc[, size])
  • normal([loc, scale, size])
  • pareto(a[, size])
  • poisson([lam, size])
  • power(a[, size])
  • rayleigh([scale, size])
  • standard_cauchy([size])
  • standard_exponential([size])
  • standard_gamma(shape[, size])
  • standard_normal([size])
  • standard_t(df[, size])
  • triangular(left, mode, right[, size])
  • uniform([low, high, size])
  • vonmises(mu, kappa[, size])
  • wald(mean, scale[, size])
  • weibull(a[, size])
  • zipf(a[, size])

📎 Пример. Генерация двух коррелирующих временных рядов из двумерного нормального распределения (multivariate_normal):

import numpy as np
import matplotlib.pyplot as plt


def corr2cov(p: np.ndarray, s: np.ndarray) -> np.ndarray:
    """Ковариационная матрица от корреляции и стандартных отклонений"""
    d = np.diag(s)
    return d @ p @ d


# Начало с корреляционной матрицы и стандартных отклонений
# 0.9 это корреляция между А и B, а корреляция
# самой переменной равна 1.0
corr = np.array([[1., 0.9],
                [0.9, 1.]])

stdev = np.array([3., 1.])
mean = np.array([5., -5.])
cov = corr2cov(corr, stdev)

# `size` это длина временных рядов для 2д данных
data = np.random.multivariate_normal(mean=mean, cov=cov, size=5000)

x, y = data.T

f, (ax1, ax2) = plt.subplots(1, 2)

ax1.plot(x, y, 'x')

ax2.plot(x[:100])
ax2.plot(y[:100])
plt.show()

Коррелирующие временные ряды

Криптографически безопасный ГСЧ

Криптографически безопасный ГСЧ (КБГСЧ) – по-прежнему псевдослучайный и детерминированный генератор, однако он использует широкий набор источников энтропии в системе. Энтропия – мера неопределенности, хаотичности системы. Случайности могут быть получены из

  • Различных системных идентификаторов
  • Времен возникновения разных системных событий в ядре и драйверах
  • Движения мыши, нажатия клавиш и т.п.
  • Аппаратный ГСЧ, например встроенный в процессоры Intel Ivy Bridge.

КБГСЧ в Python базируется на функции os.urandom(), которая в свою очередь использует:

  • Чтение из /dev/urandom на Unix-like системах.
  • CryptGenRandom() функцию на Windows.

Для os.urandom нет понятия seed. Последовательность случайных байт не должна быть воспроизводима. Аргумент функции – число случайных байт.

📎 Пример.

>>> import os
>>> x = os.urandom(10)

# объект типа bytes
>>> x  
b'\xf0\xba\xf8\x86\xb6\xc4Aa*\xe7'

# тоже самое как 16-ричная строка
>>> x.hex()  
'f0baf886b6c441612ae7'

# тоже самое как список чисел
>>> list(x)   
[240, 186, 248, 134, 182, 196, 65, 97, 42, 231]

В стандартной библиотеке Python несколько модулей используют функцию os.urandom:

  • random.SystemRandom() – все функции обычного Random, но источник случайностей – os.urandom
  • модуль secrets – удобства для генерации случайных токенов, ключей и т.п.
  • uuid – генерация токенов по стандарту UUID (Universally Unique IDentifier)

Модуль secrets

По сути – обертка над os.urandom.

  1. secrets.token_bytes – тоже самое, что и os.urandom (по умолчанию, если размер не указан дает 32 байта).
  2. secrets.token_hex – тоже самое, только возвращает 16-ричную строку.
  3. secrets.token_urlsafe – случайная строка, пригодная для URL адресов.
  4. secrets.choice – безопасная версия random.choice

📎 Пример. Укоротитель ссылок:

from secrets import token_urlsafe

DATABASE = {}


def shorten(url: str, nbytes: int = 5) -> str:
    token = token_urlsafe(nbytes=nbytes)
    if token in DATABASE:
        # если уже есть такая ссылка – генерируем еще одну рекурсивно
        return shorten(url, nbytes=nbytes)
    else:
        DATABASE[token] = url
        return 'https://bit.ly/' + token


print(shorten('https://google.com'))
print(shorten('https://yandex.ru'))

# https://bit.ly/vZ1VZug
# https://bit.ly/x966uWI

Ссылки в примеры получились длиннее (7 символов), чем мы просили (5 байт). Это объясняется тем, что внутри token_urlsafe использует кодировку base64, где каждый символ представляет 6 бит данных; чтобы закодировать 5 * 8 = 40 бит, понадобилось как минимум 7 6-битных символов (7 * 6 = 42 бита).

Модуль uuid

UUID (Universally Unique IDentifier) – универсальный уникальный идентификатор, уникальность которого «гарантирована» в пространстве и времени. Имеет длину 128 бит (16 байт). Наиболее интересен для нас вариант uuid4, так как он использует случайность из os.random.

>>> uuid.uuid4()
UUID('cd955a9e-445d-47de-95e2-3d8de8c61696')

>>> u = uuid.uuid4()
>>> u
UUID('7dfb1170-af20-4218-9b76-bc4d7ae6a309')

>>> u.hex
'7dfb1170af2042189b76bc4d7ae6a309'

>>> u.bytes
b'}\xfb\x11p\xaf B\x18\x9bv\xbcMz\xe6\xa3\t' 

>>> len(u.bytes)
16

Вероятность коллизии (вероятность получить два одинаковых uuid4) крайне мала. Если бы мы каждую секунду генерировали по одному миллиарду uuid, то через 100 лет едва ли обнаружился хоть один дубликат.

Производительность

Резонный вопрос: почему бы не использовать random.SystemRandom() (или os.urandom) везде, где можно?
Оказывается, есть существенное препятствие. Пул энтропии КБГСЧ ограничен. Если он исчерпан, то придется подождать, пока он заполнится вновь. Проведем небольшой бенчмарк на пропускную способность генераторов случайных чисел:

import random
import timeit

r_secure = random.SystemRandom()
r_common = random.Random()
n_bits = 1024


def prng():
    r_common.getrandbits(n_bits)


def csprng():
    r_secure.getrandbits(n_bits)


setup = 'import random; from __main__ import prng, csprng'

if __name__ == '__main__':
    number = 50000
    repeat = 10
    data_size_mb_bytes = number * repeat * n_bits / (8 * 1024**2)
    for f in ('prng()', 'csprng()'):
        best_time = min(timeit.repeat(f, setup=setup, number=number, repeat=repeat))
        speed = data_size_mb_bytes / best_time
        print('{:10s} {:0.2f} mb/sec random throughput.'.format(f, speed))

Результаты:

prng() 1794.74 mb/sec random throughput.
csprng() 94.13 mb/sec random throughput.

Почти в 20 раз обычный ГСЧ быстрее, чем КБГСЧ.

Вывод: нужна безопасность – обязательно используем secrets, random.SystemRandom, uuid.uuid4 или просто os.urandom, а если нужно много и быстро генерировать неконфиденциальные случайные данные – random и numpy.random.

Специально для канала @pyway.




2 021

Рандомное число в питоне

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

random.seed([X], version=2) – инициализация генератора случайных чисел. Если X не указан, используется системное время.

random.getstate() – внутреннее состояние генератора.

random.setstate(state) – восстанавливает внутреннее состояние генератора. Параметр state должен быть получен функцией getstate().

random.getrandbits(N) – возвращает N случайных бит.

random.randrange(start, stop, step) – возвращает случайно выбранное число из последовательности.

random.randint(A, B) – случайное целое число N, A ≤ N ≤ B.

random.choice(sequence) – случайный элемент непустой последовательности.

random.shuffle(sequence, [rand]) – перемешивает последовательность (изменяется сама последовательность). Поэтому функция не работает для неизменяемых объектов.

random.sample(population, k) – список длиной k из последовательности population.

random.random() – случайное число от 0 до 1.

random.uniform(A, B) – случайное число с плавающей точкой, A ≤ N ≤ B (или B ≤ N ≤ A).

random.triangular(low, high, mode) – случайное число с плавающей точкой, low ≤ N ≤ high. Mode – распределение.

random.betavariate(alpha, beta) – бета-распределение. alpha>0, beta>0. Возвращает от 0 до 1.

random.expovariate(lambd) – экспоненциальное распределение. lambd равен 1/среднее желаемое. Lambd должен быть отличным от нуля. Возвращаемые значения от 0 до плюс бесконечности, если lambd положительно, и от минус бесконечности до 0, если lambd отрицательный.

random.gammavariate(alpha, beta) – гамма-распределение. Условия на параметры alpha>0 и beta>0.

random.gauss(значение, стандартное отклонение) – распределение Гаусса.

random.lognormvariate(mu, sigma) – логарифм нормального распределения. Если взять натуральный логарифм этого распределения, то вы получите нормальное распределение со средним mu и стандартным отклонением sigma. mu может иметь любое значение, и sigma должна быть больше нуля.

random.normalvariate(mu, sigma) – нормальное распределение. mu – среднее значение, sigma – стандартное отклонение.

random.vonmisesvariate(mu, kappa) – mu – средний угол, выраженный в радианах от 0 до 2π, и kappa – параметр концентрации, который должен быть больше или равен нулю. Если каппа равна нулю, это распределение сводится к случайному углу в диапазоне от 0 до 2π.

random.paretovariate(alpha) – распределение Парето.

random.weibullvariate(alpha, beta) – распределение Вейбулла.

Все довольно просто, и теперь вы можете генерировать случайные числа и последовательности. Удачи в ваших изысканиях!

Как и многие другие языки программирования, Python позволяет работать с генераторами случайных значений. С их помощью можно оперативно создавать последовательности из различных чисел или символов, предугадать которые невозможно. Для этой цели в Python применяется встроенная библиотека с множеством методов для управляемой генерации.

Что такое случайные числа?

Случайные числа представляют собой произвольные данные, которые были получены в результате автоматической генерации компьютерной программой. Подобная информация используется во многих видах программного обеспечения, где необходимо иметь дело с непредсказуемыми величинами. Ярким примером тому являются игровые автоматы либо казино, в которых каждый раз генерируется новая выигрышная комбинация чисел. Также данный подход применяется в криптографических целях для создания надежных паролей.

Стоит заметить, что стандартные средства Python не способны предоставлять в программе истинно случайные значения. Они предоставляют псевдо случайную последовательность. Инициализируется она от какого либо случайного числа. То есть если мы будем инициализировать последовательность одним и тем же числом, то она будет каждый раз выдавать одинаковые данные. Чтобы этого не было, для инициализации берется значение системных часов.

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

Реализации случайных чисел в Python

Язык программирования Python содержит в себе несколько разных модулей, применяемых для генерации псевдослучайных величин. Все они, как правило, используют в своих целях текущее системное время, которое установлено на компьютере. Это гарантирует получение разных последовательностей значений при каждом новом обращении к генератору. Среди инструментов, которые предназначены для работы с псевдослучайными числами, находится довольно обширная библиотека random, а также функции numpy.random и os.urandom.

Особенности их применения:

  • Стандартный модуль random в Python 3 включает множество методов для генерации как целых, так и вещественных чисел, а также последовательностей с определенными параметрами.
  • Функция numpy.random используется для заполнения массивов случайными величинами.
  • Функция os.urandom предоставляет набор из случайных байтов, что применимо в криптографии.

Наиболее широкое применение получила в Python библиотека random. Поэтому далее мы ее и рассмотрим подробно.

Модуль random

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

Характеристика
random() возвращает число в диапазоне от 0 до 1
seed(a) настаивает генератор на новую последовательность a
randint(a, b) возвращает целое число в диапазоне от a и b
randrange(a, b, c) возвращает целое число в диапазоне от a до b с шагом c
uniform(a, b) возвращает вещественное число в диапазоне от a и b
shuffle(a) перемешивает значения в списке a
choice(a) возвращает случайный элемент из списка a
sample(a, b) возвращает последовательность длиной b из набора a
getstate() возвращает внутреннее состояние генератора
setstate(a) восстанавливает внутреннее состояние генератора a
getrandbits(a) возвращает a случайно сгенерированных бит
triangular(a, b, c) возвращает вещественное число от a до b с распределением c

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

В примерах мы рассмотрим, как применяются основные функции. А так же в конце рассмотрим как используется SystemRandom.

Примеры

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

Вещественные числа

В модуле есть одноименная функция random. В Python она используется чаще, чем другие функции этого модуля. Функция возвращает вещественное число в промежутке от 0 до 1. В следующем примере демонстрируется создание трех разных переменных a, b и c.

Целые числа

Для получения случайных целых чисел в определенном диапазоне используется функция randint, принимающая два аргумента: минимальное и максимальное значение. Программа, показанная ниже отображает генерацию трех разных значений в промежутке от 0 до 9.

Диапазоны целых

Метод randrange позволяет генерировать целочисленные значения, благодаря работе с тремя параметрами: минимальная и максимальная величина, а также длина шага. Вызвав функцию с одним аргументом, начальная граница получит значение 0, а интервал станет равен 1. Для двух аргументов автоматически инициализируется только длина шага. Работа данного метода с трема разными наборами параметров показана в следующем примере.

Диапазоны вещественных

Сгенерировать вещественное число поможет метод под названием uniform. Он принимает всего два аргумента, обозначающих минимальное и максимальное значения. Демонстрация его работы располагается в следующем примере кода, где создаются переменные a, b и c.

Использование в генераторах

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

Перемешивание

Метод shuffle дает возможность перемешать содержимое уже созданного списка. Таким образом, все его элементы будут находиться в абсолютно случайном порядке. Пример, где отображается работа этой функции со списком a из 10 значений, располагается дальше.

Случайный элемент списка

При помощи функции choice можно извлечь случайный элемент из существующего набора данных. В следующем примере переменная b получает некое целое число из списка a.

Несколько элементов списка

Извлечь из последовательности данных можно не только один элемент, но и целый набор значений. Функция sample позволит получить абсолютно новый список чисел из случайных компонентов уже существующего списка. В качестве первого аргумента необходимо ввести исходную последовательность, а на месте второго указать желаемую длину нового массива.

Генерация букв

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

Как можно заметить, отображаются буквы в разном регистре. Для того чтобы преобразовать их к общему виду, рекомендуется вызвать стандартные строковые методы upper или lower.

SystemRandom

Как уже говорилось ранее, SystemRandom основана на os.urandom. Она выдает так же псевдослучайные данные, но они зависят дополнительно и от операционной системы. Результаты используются в криптографии. Есть недостаток – то что функции SystemRandom отрабатывают в несколько раз дольше. Рассмотрим пример использования:

Заключение

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

Иногда, при написании программ, необходимо сгенерировать какое-либо случайное число. Для реализации этого на языке программирования Python существует модуль Random.

Генерация случайного числа с помощью модуля Random

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

После этого можно воспользоваться необходимой вам функцией модуля Random.

Random.random

Функция возвращает случайное число в диапазоне 0 — 1.

Random.uniform

Функция возвращает случайное вещественное число в указанном диапазоне.

В скобках указывается диапазон чисел random.unifrom(начало, конец).

Random.randint

Функция возвращает случайное целое число из указанного диапазона.

В скобках указывается диапазон чисел random.randint(начало, конец)

Random.randrange

Функция возвращает случайное число из указанного диапазона с определенным шагом. То есть, если мы зададим диапазон 0 — 10 и шаг 5, то функция вернет 0, 5 или 10.

В скобках указывается диапазон чисел и шаг, с которым выбирается случайное число random.randrage(начало, конец, шаг)

Random.choince

Функция возвращает случайный элемент из любого списка, например если мы зададим список с 10 значениями, то функция вернет одно из 10 значений списка.

Генератор случайных чисел на Python.

В этой статье мы напишем программу “Угадай число”, которая будет работать на основе генератора чисел. Если вы новичок в Python, тогда советуем сначала изучить статью “Циклы в Python” и потом возвращаться к этой статье.

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

random.seed([X], version=2) – инициализация генератора случайных чисел. Если X не указан, используется системное время.

random.getstate() – внутреннее состояние генератора.

random.setstate(state) – восстанавливает внутреннее состояние генератора. Параметр state должен быть получен функцией getstate().

random.getrandbits(N) – возвращает N случайных бит.

random.randrange(start, stop, step) – возвращает случайно выбранное число из последовательности.

random.randint(A, B) – случайное целое число N, A ≤ N ≤ B.

random.choice(sequence) – случайный элемент непустой последовательности.

random.shuffle(sequence, [rand]) – перемешивает последовательность (изменяется сама последовательность). Поэтому функция не работает для неизменяемых объектов.

random.sample(population, k) – список длиной k из последовательности population.

random.random() – случайное число от 0 до 1.

random.uniform(A, B) – случайное число с плавающей точкой, A ≤ N ≤ B (или B ≤ N ≤ A).

random.triangular(low, high, mode) – случайное число с плавающей точкой, low ≤ N ≤ high. Mode – распределение.

random.betavariate(alpha, beta) – бета-распределение. alpha>0, beta>0. Возвращает от 0 до 1.

random.expovariate(lambd) – экспоненциальное распределение. lambd равен 1/среднее желаемое. Lambd должен быть отличным от нуля. Возвращаемые значения от 0 до плюс бесконечности, если lambd положительно, и от минус бесконечности до 0, если lambd отрицательный.

random.gammavariate(alpha, beta) – гамма-распределение. Условия на параметры alpha>0 и beta>0.

random.gauss(значение, стандартное отклонение) – распределение Гаусса.

random.lognormvariate(mu, sigma) – логарифм нормального распределения. Если взять натуральный логарифм этого распределения, то вы получите нормальное распределение со средним mu и стандартным отклонением sigma. mu может иметь любое значение, и sigma должна быть больше нуля.

random.normalvariate(mu, sigma) – нормальное распределение. mu – среднее значение, sigma – стандартное отклонение.

random.vonmisesvariate(mu, kappa) – mu – средний угол, выраженный в радианах от 0 до 2π, и kappa – параметр концентрации, который должен быть больше или равен нулю. Если каппа равна нулю, это распределение сводится к случайному углу в диапазоне от 0 до 2π.

random.paretovariate(alpha) – распределение Парето.

random.weibullvariate(alpha, beta) – распределение Вейбулла.

В нашей программе мы будем использовать функцию randint(). Полный листинг программы:


import random

print("*" * 10, "Угадай число", "*" * 10)

print("Компьютер будет загадывать число от 1 до 100. Попробуйте угадать число. Для выхода введите 0")

answer = 1
score = 0
i = 0

while answer:
    if answer == 0:
        break

    rand = random.randint(1, 100)
    answer = int(input("Число загадано. Попробуйте отгадать: "))
    if answer == rand:
        score = score + 1
        print("Красавчик!")
    else:
        print("Неудачник! Пробуй еще...")
    i = i + 1
print("Всего ты отгадал чисел ", score, "из", i)
print("Приходи когда поумнеешь!")

input("Нажмите Enter для выхода")

Наша программа в цикле while проверяет введенное пользователем значение. Если оно совпадает со сгенерированным в начале итерации случайным значением, значит, выводится соответствующее сообщение и увеличивается значение переменной score.

Параллельно мы ведём счетчик итераций, чтобы знать, сколько попыток совершил пользователь (переменная i). также наша программа выводит статистику по окончанию игры.

rand = random.randint(1, 100) – используем функцию randint и задаем диапазон загадываемых чисел от 1 до 100. Диапазон можно изменить.

Нижеуказанная инструкция выполняет большую роль в нашей программе:


if answer == 0:
    break

Если пользователь введет 0, выполнение будет прервано.

В нашей программе есть небольшой недочет. При чтении данных мы не производим проверку их корректности.

Если пользователь введет строку вместо числа, то выполнение программы будет остановлено, а на консоли будет изображено сообщение об ошибке. Для обработки таких исключений используются блоки try..except.

Вы можете улучшить нашу программу и добавить исключения самостоятельно. В комментариях ждём ваших предложений по поводу улучшений данного кода.

 

Статистика

в Python — Генерация случайных чисел в Python, NumPy и sklearn | Вэй-Мэн Ли | Сентябрь 2021 г.

Все, что вам нужно знать для генерации случайных чисел в Python

Фото Насера ​​Тамими на Unsplash

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

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

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

Для генерации случайных чисел в Python вы можете использовать модуль random :

 import random 

Чтобы сгенерировать случайное число с плавающей запятой, вызовите функцию random () :

  random.random  () # например 0.49543508709194095 

Функция random () генерирует плавающее число в полуоткрытом интервале [0,1) . Это означает, что сгенерированное число будет от 0 до 1 (где 1 исключен).

Если вы хотите сгенерировать целочисленное значение от 0 до 10 (включительно), используйте функцию randint () :

  random.randint  (0,10) # [0,10] - от 0 до 10 ( включительно) например 6 

Если вам нужно случайное число с плавающей запятой, которое находится в определенном диапазоне (например,грамм. От 1 до 5 (исключая)), используйте функцию uniform () :

  random.uniform  (1,5) # [1,5) например 4.756596651114043 

Чтобы сгенерировать список случайных целочисленных значений в определенном диапазоне (например, от 0 до 32 (исключая)) без повторения значений , используйте функцию sample () :

  random.sample  (range (0 , 32), 5) # результат - это список из 5 значений 
# из [0,32) без повторов
# [12, 15, 26, 10, 7]

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

Если вам нужен список случайных значений с плавающей запятой в полуоткрытом интервале, вы можете использовать функцию random () через понимание списка:

  [random.random () for _ in range (5)]  # [0, 1) 
# [0,26800994395551214,
# 0,3322334781304659,
# 0,5058884832347348,
# 0,2552
    2686192,
    # 0,33885158106897195]

Аналогично, если вам нужен список случайных значений с плавающей запятой. диапазон, вы можете сделать это:

  [random.uniform (1,5) для _ в диапазоне (5)]  # [1, 5) 
# [1.4556516495709206,
# 1.94075804553687,
# 4.775979596495107,
# 4.118159382173641,
# 3.860434558608088]

Наконец, если вам нужно чтобы сгенерировать список случайных целых чисел, используйте это:

  [random.randint (0,10) for _ in range (5)]  # [0,10] 
# [3, 9, 8, 7, 10]

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

Функция uniform () генерирует числа с плавающей запятой в полуоткрытом интервале :

 import numpy as np  np.random.uniform ()  # [0,1) например. 0,6603742810407641 

Вы также можете указать диапазон:

  np.random.uniform (1,5)  # [1,5) например 2.18016758803 

А также количество случайных значений для генерации:

  np.random.uniform (1,5,8)  #   [1,5) x 8 
# array ([3.15101237, 3.52431302, 2.43564056, 4.22373224,
# 1.82549706, 4.30782957, 2.1383488, 3.71130947])

Вы также можете указать желаемую форму результата:

  np.random.uniform (1,5, (2, 4))  # [1,5) - результатом является 2D-массив 
# 2 строки и 4 столбца
# array ([[4.85777402, 2.41464442, 3.47972032, 3.61706258],
# [1.395

, 2.41386733, 3.34813041, 3.13411887] ])

Если вы просто хотите генерировать числа в полуоткрытом интервале, вы можете использовать еще одну функцию — rand () :

  np.random.rand ()  # [0,1) например 0.11705786929477491 

Функция rand () позволяет легко генерировать значения полуоткрытого интервала в различных измерениях:

  np.random.rand (5)  # [0,1) x 5 
# array ([ 0,52310231, 0,87305847, 0,03870784, 0,69239079, 0,47626848]) np.random.rand (2,3) # [0,1) в 2D массиве
# ([[0,16926449, 0,06317189, 0,03222409],
# [0,24243086, 0,11270682 , 0.40499002]])

Функция rand () принимает дополнительные аргументы для формы возвращаемого результата, в то время как функция uniform () принимает три аргумента — низкий, высокий и размер.

Другая функция, аналогичная функции rand () , — это random () . Он тоже генерирует числа в полуоткрытом интервале. Ключевое различие между ними заключается в том, что функция random () принимает один аргумент для измерения чисел, которые вы хотите сгенерировать.

  np.random.random (5)  
# array ([0.
056, 0.96734226, 0.06753921,
# 0.31758607, 0.69686297]) np.random.random ((2,3)) # передано нужное измерение
# как кортеж
# массив ([[0.04207297, 0,92656545, 0,93526291],
# [0,8104269, 0,18834308, 0,58731822]])

Разница между random () и uniform () заключается в том, что функция random () принимает один аргумент. Поэтому, если вы хотите сгенерировать результат многомерного массива, вам нужно обернуть фигуру как кортеж.

Если вам нужно случайное целое число, используйте функцию randint () :

  np.random.randint (0,9)  # [0,9) e.грамм. 7 

Вы также можете создать список целочисленных значений в многомерном формате:

  np.random.randint (0,9,5)  # [0,9) x 5 
# array ([3, 7, 3, 2, 8]) np.random.randint (0,9, (4,5)) # [0,9) в 2D-массиве
# array ([[5, 2, 4, 8, 0],
# [5, 2, 3, 7, 2],
# [6, 1, 2, 4, 7],
# [2, 3, 5, 8, 4]])

На данный момент все числа, которые мы сгенерировали, равны , равномерно распределены .

Равномерное распределение — это непрерывное распределение вероятностей, которое касается событий, которые с одинаковой вероятностью произойдут.

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

 import matplotlib.pyplot as plt 
_ = plt.hist (np.random.random (1_000_000), bins = 25)

Приведенный выше оператор отображает гистограмму, показывающую распределение одного миллиона чисел:

Если вы хотите сгенерировать список чисел, являются нормально распределенными , вы можете использовать функцию randn () :

  np.random.randn (4,3)  
# массив ([[- 0.58617287, 0.99765344, 1.00439116],
# [-0.45170132, -0.01265149, 0.75739522],
# [0.70970036, -0.1740791, 1.14584093],
# [1.2637344 , 0,77962903, -0,97546801]])

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

Функция randn () возвращает выборку значений из стандартного нормального распределения . В приведенном выше фрагменте кода функция randn () возвращает результат в виде 2D-массива.

Стандартное нормальное распределение — нормальное распределение со средним нулевым и стандартным отклонением 1. Для стандартного нормального распределения 68,27% наблюдений лежат в пределах 1 стандартного отклонения от среднего; 95,45% лежат в пределах двух стандартных отклонений от среднего; и 99.73% находятся в пределах 3 стандартных отклонений от среднего.

Источник: https://en.wikipedia.org/wiki/Normal_distribution#/media/File:Standard_deviation_diagram.svg

В следующем примере генерируется один миллион чисел, которые обычно распределяются, а затем используются для построения гистограммы с числами, разделенными на 50 ячеек:

 _ = plt.hist ( np.random.randn (1_000_000) , bins = 50) 

Вы должны увидеть что-то вроде следующего:

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

Если вы генерируете случайные числа на Python, используйте функцию seed () , передав целочисленное значение:

  random.seed (1) # передать целочисленное значение в качестве начального числа  
random.sample (range (0, 32), 5)
# [8, 4, 16, 7, 31]

Приведенный выше фрагмент кода всегда будет генерировать тот же список случайных чисел.

Если вы используете NumPy, используйте функцию random.seed () :

  np.random.seed (2)   # передать целочисленное значение в качестве начального числа  
np.random.uniform (0, 10, 5)
# [4.35994902 0.25926232 5.49662478 4.35322393 4.20367802]

NumPy также поставляется с классом RandomState , где вы можете создать его экземпляр, используя случайное начальное число, а затем использовать его для генерации различных типов случайных значений:

 r =  нп.random.RandomState (1) # передать целое число как 
# seed
print (r.uniform (0, 10, 5)) # [0,10)
# [4.17022005e + 00 7.20324493e + 00 1.14374817e -03 3.02332573e + 00
# 1.46755891e + 00] print (r.rand (2,3)) # [0,1)
# [[0,09233859 0,18626021 0,34556073]
# [0,39676747 0,53881673 0,41919451]]

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

Генерация линейно распределенных случайных чисел

Вы можете использовать функцию make_regression () из модуля sklearn.datasets для генерации набора точек, которые линейно распределены:

 из sklearn.datasets import  make_regression  
import numpy as npx, y = make_regression (n_samples = 100, n_features = 1, noise = 12.3)

Параметр n_samples указывает, сколько чисел нужно сгенерировать, n_features указывает количество столбцов для генерации, а шум указывает стандартное отклонение, применяемое к числам (насколько они рассредоточены). Приведенный выше фрагмент кода выдаст следующий результат:

  print (x)  
# [[1.20630427]
# [-1.02041981]
# ...
# [-0.95098556]
# [0.09247152]] print (y)
# [66.34055577 -52.3

18 51.46433162 -12.56089116
# 10.624 8.00035735 4.80360232 -28.99765946
# ...
# 12.75554229 9.75147261 2.678
-32.4981596
# -30.1606270648 -32.4981596
plot:

 import matplotlib.pyplot as plt 
_ = plt.scatter (x, y)

Если вы измените шум на большее значение:

 x, y = make_regression (n_samples = 100, n_features = 1,  шум = 19 ) 
_ = plt.scatter (x, y)

Вы увидите, что значения теперь более разбросаны:

Что если вы измените n_features на 2? В этом случае X будет 2D-массивом:

  X , y = make_regression (n_samples = 1000,  n_features = 2 , noise = 3) 
print (X)
# [[-0.10171443 1,59563406]
# [0,337 -0,21477808]
# [0,00732151 0,24783439]
# ...
# [-0,62820116 0,16688806]
# [-0,35656323 -1.1761519]
# [0.04589981 0.59696238]]

Хороший способ визуализировать набор сгенерированных случайных чисел - построить трехмерную диаграмму рассеяния с помощью функции scatter3D () :

 из sklearn.datasets import make_regression 
import numpy as np
import matplotlib.pyplot as pltX, y = make_regression (n_samples = 1000, n_features = 2, noise = 3) fig = plt.figure (figsize = (13,13))
ax = plt.axes (projection = '3d ') ax.scatter3D (X [:, 0], X [:, 1], y, c = y, cmap =' Greens ')
ax.set_xlabel ('X [0]')
ax.set_ylabel ('X [1]')
ax.set_zlabel ('y')
plt.show ()

Вы должны сохранить приведенный выше фрагмент кода в файл с именем random_regression.py и запустите его в командной строке. После этого вы сможете визуализировать сюжет, вращая его.

Вот как график выглядит под разными углами:

Интерполяция сгенерированных случайных чисел

Значения, сгенерированные функцией make_regression () , могут быть не в желаемом диапазоне.Например, если вы хотите создать набор точек, показывающих взаимосвязь между ростом и весом группы людей. В этом случае вы хотите, чтобы рост составлял от 148 см до 185 см, а вес - от 44 кг до 74 кг. Следующий фрагмент кода масштабирует значения x и y с помощью функции interp () из NumPy:

 x, y = make_regression (n_samples = 100, n_features = 1, noise = 2.6) # scale x (например, высота в см) до 148..185 диапазон 
x = np.interp (x, (x.min (), x.max ()), (148, 185)) # масштабировать y (например, вес в кг) до 44..74 range
y = np.interp (y, (y .min (), y.max ()), (44, 74)) plt.scatter (x, y)

Диаграмма рассеяния подтверждает выполненную интерполяцию:

Генерация случайных чисел, которые группируются вокруг центроидов

Очень часто, когда вы занимаетесь неконтролируемым обучением, вам необходимо генерировать случайные точки, которые группируются вокруг нескольких центроидов. Для этого вы можете использовать функцию make_blobs () из sklearn.наборы данных модуль:

 из sklearn.datasets import make_blobsX, y = make_blobs (n_samples = 500, 
center = 3,
n_features = 2)

Приведенный выше фрагмент кода возвращает 500 пар случайных чисел (содержащихся в X) и y содержит классы, в которых находится каждая точка:

 print (X) 
# [[-9.86754851 9.27779819]
# [-11.50057906 8.88609894]
# ...
# [-5.96056302 -3.21866963]
# [-10.38173377 8.82254368] ] print (y)
# [2 2 0 1 2 2 0 1 2 1 1 1 0 2
# 1 1 2 1 1 1 2 2 0 1 1 1 1 1
#...
# 2 0 0 0 2 0 1 0 2 2 1 2 1 2
# 2 1 2 2 1 1 1 0 0 0 2 1 2 1]

Как обычно, визуализация всегда делает вещи намного яснее:

 rgb = np.array (['r', 'g', 'b']) # строить капли с помощью диаграммы рассеяния и использовать цветовую кодировку 
_ = plt.scatter (X [:, 0], X [:, 1 ], color = rgb [y])
plt.xlabel ('X [0]')
plt.ylabel ('X [1]')

Как насчет трехмерных точек? Конечно, просто установите для n_features значение 3 и постройте график с помощью функции scatter3D () :

 из sklearn.наборы данных import make_blobs 
import numpy as np
import matplotlib.pyplot as pltX, y = make_blobs (n_samples = 1500,
center = 3,
n_features = 3 ) fig = plt.figure (figsize = (13,13))
ax = plt.axes (projection = '3d')
ax.scatter3D ( X [:, 0], X [:, 1], X [:, 2] , c = y, cmap = 'tab20b' )
ax.set_xlabel ('X [0]')
ax.set_ylabel ('X [1]')
ax.set_zlabel ('y') plt.show ()

Вы должны сохранить приведенный выше фрагмент кода в файл с именем random_blobs.py и запустите его в командной строке. После этого вы сможете визуализировать сюжет, вращая его.

Для воспроизводимости установите для параметра random_state значение:

 X, y = make_blobs (n_samples = 1500, 
center = 3,
n_features = 3,
random_state = 0 )

Фу, выглядит как будто в Python существует множество различных способов генерации случайных чисел. Лучший способ запомнить, что его использовать, - обратиться к следующему обзору функций, которые мы обсуждали в этой статье.

Не пропустил ли я важные функции? Дай мне знать в комментариях!

MoonBooks: массивные открытые онлайн-блокноты

Как создать случайную выборку с резервуаром с помощью панд в Python?


Дайдалос
/

CC BY-SA 4.0

/

03 ноября 2021 г.


Комментировать трассировщик тепловую карту на глобальной карте с картографией на Python?


Bazinga
/

CC BY-SA 4.0

/

18 октября 2021 г.


Комментарий к списку кортежей в Python?


Bazinga
/

CC BY-SA 4.0

/

18 октября 2021 г.


Comment obtenir le signe d'un nombre (-1 ou +1) en python?


Bazinga
/

CC BY-SA 4.0

/

18 октября 2021 г.


Как построить тепловую карту (данные с координатной сеткой) на глобальной карте с картографией в Python?


Дайдалос
/

CC BY-SA 4.0

/

13 октября 2021 г.


Как найти количество вхождений в списке кортежей в Python?


Дайдалос
/

CC BY-SA 4.0

/

10 октября 2021 г.


Все заметки

Как создать список чисел на Python?


Дайдалос
/

CC BY-SA 4.0

/

09 марта 2018


Как преобразовать массив с плавающей запятой в целочисленный массив в Python?


Дайдалос
/

CC BY-SA 4.0

/

22 марта 2019


Комментарий Supprimer Element d'une Liste Avec Python?


Дайдалос
/

CC BY-SA 4.0

/

21 авг.2014 г.


Как создать диаграмму рассеяния с несколькими цветами в matplotlib?


Дайдалос
/

CC BY-SA 4.0

/

05 апреля 2019


Комментарий arrondir un nombre décimal en python?


Дайдалос
/

CC BY-SA 4.0

/

03 июн 2014


Как преобразовать изображение в оттенки серого с помощью Python?


Дайдалос
/

CC BY-SA 4.0

/

19 феврье 2019


Как заменить некоторые элементы матрицы с помощью numpy в Python?


Дайдалос
/

CC BY-SA 4.0

/

31 октября 2019 г.


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

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

Принимая во внимание, что истинно случайных чисел генерируются путем измерения истинно физических случайных параметров, поэтому мы можем гарантировать, что сгенерированные числа действительно случайны.

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

В Python встроенный модуль random генерирует псевдослучайные числа. В этом уроке мы обсудим оба типа. Итак, приступим.

Случайное число от 0 до 100

Чтобы сгенерировать одно случайное число в диапазоне, например, от 0 до 100, мы можем использовать метод randint () модуля random. Синтаксис randint () следующий:

 random.randint (а, б)
 

Он вернет целое число n от a до b.Обратите внимание, что a и b включены в вывод. Это означает, что случайное число может быть a или b или любым числом от a до b.

Код:

 случайный импорт

печать (random.randint (0, 100))
 

Вывод:

Как видно из приведенного выше примера, вам нужно сначала импортировать случайный модуль. Затем вызовите randint (). Этот метод даст вам случайное целое число.

Случайное число с размером шага

Другая функция для генерации целочисленного случайного числа в указанном диапазоне - randrange ().Метод randrange () может принимать до трех аргументов: start, stop и step. Синтаксис randrange () приведен ниже:

Синтаксис:

 random.randrange (начало, остановка, шаг)
 

Возвращаемое целое число находится между началом (включая начало) и концом на остановке (без учета остановки). Шаг указывает значение приращения для нахождения случайного числа, и по умолчанию оно равно 1.

Например, если start равно 0, stop равно 15 и step равно 3, то случайное число будет кратным 3, то есть: 0, 3, 6, 9, 12 или 15.

Другими словами, шаг - это значение приращения, которое добавляется к начальному значению.
Обратите внимание, что аргументы start и step в функции необязательны.

Код:

 случайный импорт

random.randrange (0, 15, 3)
 

Вывод:

Разница между randrange () и randint () заключается в том, что значение остановки не включается в метод randrange (), а включается в метод randint ().

Случайное число с плавающей запятой / двойное число в диапазоне

Модуль random предоставляет несколько функций для генерации числа с плавающей запятой в заданном диапазоне.
Метод uniform (a, b) может генерировать число n между a и b.

Он вернет плавающее число n между a и b. Обратите внимание, что a и b включены в вывод. Это означает, что случайное число может быть a или b или любым числом от a до b.

Код:

 случайный импорт

random.uniform (0, 10)
 

Вывод:

Другой метод генерации плавающего случайного числа - использование функции random () .

Синтаксис функции random () следующий:

 random.random ()
 

Функция random () не принимает никаких аргументов. Он будет генерировать случайное число с плавающей запятой в диапазоне от 0 до 1, где 1 не включается в вывод. Диапазон определяется как: [0,0, 1,0).

Код:

 случайный импорт

random.random ()
 

Вывод:

Случайное число из Iterable

Чтобы сгенерировать случайное число из итеративного (стека или последовательности), модуль случайных чисел Python имеет функцию, называемую random.выбор (seq) .
Метод random.choice (seq) вернет случайный элемент из заданной последовательности.

Использование random.choice ()

Код:

 случайный импорт

x = ['a', 'b', 'c', 'd', 'e', ​​'f', 'g', 'h']

random.choice (x)
 

Вывод:

Вы также можете использовать функции randint () и randrange () для выбора случайного элемента из заданной последовательности.

Использование randint ()

Код:

 случайный импорт

x = ['a', 'b', 'c', 'd', 'e', ​​'f', 'g', 'h']

индекс = случайный.рандинт (0, len (x) -1)

x [индекс]
 

Вывод:

В этом коде мы сначала создали список, а затем выбрали случайное целое число от 0 до длины списка. Затем с помощью индексации мы нашли букву в случайном индексе из списка.

Таким образом мы можем получить случайный элемент из списка с помощью randint ().

Использование randrange ()

Код:

 случайный импорт

x = ['a', 'b', 'c', 'd', 'e', ​​'f', 'g', 'h']

индекс = случайный.рандом (0, len (x))

x [индекс]

 

Вывод:

Обратите внимание, что мы вычли 1 из длины списка в методе randint () и ничего не вычли в методе randrange (). Это потому, что randint () включает точку остановки. Следовательно, нам пришлось вычесть 1.

Исключение определенных чисел из диапазона (условный выбор)

Чтобы сгенерировать случайные числа в заданном диапазоне, исключая некоторые числа, мы можем использовать случайное число.choice () метод. Рассмотрим пример ниже:

Код:

 случайный импорт

print (random.choice ([x для x в диапазоне (0, 10), если x не в [1, 3, 5, 7, 9]]))
 

Вывод:

В этом примере мы использовали цикл for для итерации по списку элементов от 0 до 10.

Затем мы использовали условие, что итерация (x) в диапазоне (0, 10) не должно присутствовать в данном списке нечетных чисел. Следовательно, сгенерированное число всегда будет четным.

Случайное число длины N

В Python вы можете сгенерировать случайное число фиксированной длины, равное n цифрам в числе. Например, вы хотите сгенерировать случайное число длины n, где n = 3.

Трехзначное случайное число может быть сгенерировано в диапазоне от 100 до 999. Поэтому в методе randint () укажите начальную точку должно быть 100, а конечная точка - 999.

В методе randint () включаются начальная и конечная точки.
Рассмотрим пример ниже:

Код:

 случайный импорт

печать (random.randint (100, 999))
 

Вывод:

Случайные числа в двумерном массиве

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

Функция range () генерирует последовательность чисел в заданном диапазоне.
Чтобы сгенерировать массив случайных чисел, мы сначала сгенерируем последовательность чисел в заданном диапазоне, затем мы выберем случайные числа из диапазона и сохраним их в массиве, как показано в приведенном ниже коде:

Код:

 случайный импорт

[random.random () для i в диапазоне (0,5)]
 

Вывод:

Точно так же, чтобы создать двумерный массив, вы можете использовать понимание вложенного списка. Понимание списков - это короткий способ создания списков в Python, как показано ниже:

Код:

 [[случайный.random () для i в диапазоне (0, 3)] для j в диапазоне (0, 3)]
 

Вывод:

Вновь созданный двумерный массив содержит 3 строки и 3 столбца.

Вероятность случайного числа

Предположим, нам дан список элементов, и мы должны выбрать случайные элементы из списка в соответствии с их приоритетом.

Что мы сделаем, так это присвоим вес элементам списка. У элемента с наибольшим весом будет больше шансов появиться в итоговом списке.

Другими словами, элемент с наибольшим весом будет иметь наибольшую вероятность быть добавленным в новый список.
В Python мы можем выбрать случайный элемент из списка на основе его вероятности, используя метод choices () случайного модуля. Синтаксис метода choices () следующий:

Синтаксис:

 random.choices (последовательность, веса, cum_weights, k)
 
  • последовательность: - это итерация Python, такая как список, кортеж или диапазон чисел.
  • вес: не является обязательным. Это список для указания относительного веса элементов в заданной последовательности. Веса определяют вероятность или возможность выбора элемента.
  • cum_weights не является обязательным. Это список для указания совокупного веса элементов в заданной последовательности. Веса определяют вероятность или возможность выбора элемента.
  • k не является обязательным. Это целое число, определяющее размер (длину) результирующего списка.

Относительный вес рассчитывается по следующей формуле:

 relative_weight = вес элемента / сумма всех весов
 

Принимая во внимание, что совокупный вес элемента рассчитывается по следующей формуле:

 cumulative_weight = вес предыдущего элемента + вес текущего элемента 

Тип возвращаемого значения random.choices () - это список элементов размером k, выбранных на основе весов элементов входного списка.
Использование метода choices () продемонстрировано в приведенном ниже коде:

Код:

 случайный импорт

input_list = ['школа', 'книга', 'сумка', 'бутылка']

output_list = random.choices (input_list, weights = [10, 30, 40, 20], k = 8)

печать (output_list)
 

Выходные данные:

Из выходных данных видно, что элемент «мешок» имеет наибольшую вероятность, следовательно, он имеет наибольшую вероятность повторения в результирующем списке.

Среднее и стандартное отклонение

Случайный модуль предоставляет методы для генерации случайных чисел с заданным средним и стандартным отклонением.
Для генерации случайного числа в нормальном распределении используется метод random.normalvariate (). Синтаксис метода normalvariate () следующий:

Синтаксис:

 случайный. Нормальный вариант (мю, сигма) 
  • mu - среднее значение
  • сигма - стандартное отклонение

Случайное.normalvariate (mu, sigma) возвращает случайное число с плавающей запятой с нормальным распределением.
Точно так же у нас есть методы для генерации случайных чисел с распределением Гаусса и логарифмически нормальным распределением.

random.gauss (mu, sigma) используется для генерации случайного числа с плавающей запятой с гауссовым распределением. Random.lognormvariate (mu, sigma) генерирует случайное число с плавающей запятой с логарифмически нормальным распределением.

Код:

 случайный импорт

случайный.нормальная переменная (2, 6)

random.gauss (2, 6)

random.lognormvariate (2, 6)
 

Вывод:

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

Код:

 случайный импорт

импортировать matplotlib.pyplot как plt

normal_dist = [random.normalvariate (250, 100) для i в диапазоне (100)]

plt.plot (normal_dist)

plt.Показать()

 

Вывод:

С распределением Гаусса код и график будут:

Код:

 gauss_dist = [random.gauss (250, 100) для i в диапазоне (100)]

plt.plot (gauss_dist)

plt.show ()

 

Вывод:

Аналогично, при нормальном логарифмическом распределении код и график будут:

Код:

 lognormvariate_list = [случайный.lognormvariate (250, 100) для i в диапазоне (100)]

plt.plot (lognormvariate_list)

plt.show ()
 

Вывод:

Отрицательное случайное число

Средняя точка числовой строки в математике - 0. Числа справа от 0 - положительные действительные числа, а числа слева от 0 - отрицательные. действительные числа.
Чтобы сгенерировать отрицательное случайное число, вы можете указать диапазон, начиная с отрицательного числа и заканчивая 0.Рассмотрим пример ниже:

Код:

 случайный импорт

random.uniform (-10, 0)

random.randrange (-50, 0)

random.randint (-40, 0)
 

Вывод:

В приведенном выше примере randon.uniform () сгенерирует отрицательное число с плавающей запятой.

Создать с дубликатами

Есть много способов сгенерировать список случайных чисел с повторяющимися элементами. Вы можете использовать random.randrange () или random.choice () для создания списка повторяющихся элементов. Посмотрите код ниже:

Использование randrange ()

Код:

 случайный импорт

my_list = [random.randrange (10) для x в диапазоне (0, 10)]

печать (отсортировано (my_list))
 

Вывод:

Из вывода видно, что у нас есть список с повторяющимися элементами. Мы использовали метод sorted () для сортировки списка.

Используя выбор ()

Код:

 случайный импорт
my_list = [случайный.выбор (диапазон (10)) для x в диапазоне (0, 10)]
печать (отсортировано (my_list))
 

Вывод:

Генерировать без дубликатов (уникальные случайные числа)

При создании списка случайных чисел существует вероятность того, что элементы в списке будут дублироваться. Чтобы избежать списка повторяющихся элементов, модуль random определяет функцию с именем sample (), которая создает список без повторения каких-либо элементов.

Синтаксис:

 случайный.образец (последовательность, k)
 
  • последовательность: повторяется. Это может быть список, кортеж, набор или строка и т. Д.
  • k: - размер (длина) результирующего списка. k не должно быть больше размера входного списка.

Тип возвращаемого значения random.sample () - это список элементов без каких-либо повторяющихся элементов. В следующем примере демонстрируется использование метода sample () для списка, строки и кортежа.

Код:

 случайный импорт

mylist = [1, 2, 3, 4, 5]

печать (случайный.образец (mylist, 4))

mytuple = ('яйцо', 'яблоко', 'банан', 'апельсин', 'вишня')

печать (random.sample (mytuple, 3))

mystring = "LikeGeeks"

печать (random.sample (mystring, 3))
 

Вывод:

Обратите внимание, что когда мы использовали метод random.sample () со строками, он показывает некоторые дубликаты. На самом деле, со струнами такое бывает.

Случайное число на круге

Используя модуль random, мы можем генерировать случайные точки в круговом распределении.В этом разделе мы найдем случайные координаты круга. Рассмотрим пример ниже:

Код:

 случайный импорт

импортная математика

radius_circle = 5

center_x = 3

center_y = 5

rand_angle = 2 * math.pi * random.random ()

rand_radius = радиус_круга * math.sqrt (random.random ())

cord_x = rand_radius * math.cos (rand_angle) + center_x

cord_y = rand_radius * math.sin (rand_angle) + center_y

print ("Случайные точки на круге:", (cord_x, cord_y))
 

Вывод:

В этом примере мы сгенерировали случайный радиус и случайный угол, чтобы найти координаты круга с помощью общих математических функций.

Перемешать числа

Мы можем перемешать элементы в заданной последовательности или выполнить итерацию, используя метод shuffle () случайного модуля. Синтаксис метода shuffle () приведен ниже:

Синтаксис:

 random.shuffle (последовательность, функция)
 
  • последовательность: - это итерация, такая как список, набор или кортеж.
  • функция: является необязательной и по умолчанию используется random (). Возвращает значение от 0.От 0 до 1.0.

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

Код:

 случайный импорт

my_list = ['a', 'b', 'c', 'd', 'e']

print ("Список перед перемешиванием", my_list)

random.shuffle (мой_лист)

print ("Список после перемешивания", my_list)
 

Вывод:

Генерация истинного случайного числа

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

Например, вы хотите сгенерировать истинное случайное число, вы можете измерить движение мыши, реакцию ввода с устройств ввода и т. Д.
В Python вы можете использовать класс random.SystemRandom () для генерации истинных случайных чисел.

Этот класс использует ресурсы, предоставляемые операционной системой, для генерации случайных чисел и не зависит от какого-либо программного обеспечения. Эти числа не могут быть воспроизведены.
Вы можете использовать все методы модуля random с random.SystemRandom (). Разница в том, что SystemRandom () использует ресурсы ОС.

Код:

 случайный импорт

trng = random.SystemRandom ()

trng.randint (1, 15)
 

Этот код генерирует истинное случайное число от 1 до 15. Точно так же вы можете генерировать истинные случайные числа с плавающей запятой, используя random.SystemRandom (). Random:

 случайный.SystemRandom (). Случайный () 

Теперь вы узнали, как с помощью Python генерировать как псевдослучайные, так и истинные случайные числа.

Надеюсь, это руководство окажется для вас полезным. Продолжают возвращаться.

Мохтар является основателем LikeGeeks.com. Он работает системным администратором Linux с 2010 года. Он отвечает за обслуживание, защиту и устранение неполадок серверов Linux для множества клиентов по всему миру. Он любит писать сценарии оболочки и Python для автоматизации своей работы.

python - генерировать случайное число

python - генерировать случайное число - qaru

Спросил

Просмотрено
371 раз

На этот вопрос уже есть ответы :

Закрыт 5 месяцев назад.

Я пытаюсь создать функцию, которая генерирует случайное число от 0 до 100, используя random,
Я написал этот код, но получаю только числа между 0 и 1
что я могу сделать, чтобы исправить это

  импорт случайный
def randint (min = 0, max = 100):
    число = random.random ()
    вернуть номер
randint ()
  

задан 25 мая в 19:35

5

попробуйте передать min & value в randint ()

  импорт случайный
def randint (min = 0, max = 100):
    а = случайный.рандинт (мин., макс.)
    вернуть

randint ()
  

ответ дан 25 мая в 22:42

Ade_1Ade_1

1,33311 золотых знаков44 серебряных знака1515 бронзовых знаков

2

Это может помочь вам использовать случайную внутреннюю функцию:

  импорт случайный
def RANDOM (i):
    для i в диапазоне (100):
        n = []
        п.append (random.randrange (0, 100, 1))
        вернуть n

для i в диапазоне (100):
    Текст = СЛУЧАЙНО (i)
    печать (текст)
  

ответ дан 25 мая в 22:49

graj499graj499

6511 серебряный знак1111 бронзовых знаков

Вы, вероятно, захотите использовать для этого randrange () или randint (), взятые из этого руководства:
https: // документы.python.org/3/library/random.html

  импорт случайный как rn

def randint ():
    число = рН. рандинт (0,100)
    вернуть номер
  

попробуйте это. Надеюсь, это сработает

ответ дан 25 мая в 22:42

Не тот ответ, который вы ищете? Посмотрите другие вопросы с метками python или задайте свой вопрос.

lang-py

Stack Overflow лучше всего работает с включенным JavaScript

Ваша конфиденциальность

Нажимая «Принять все файлы cookie», вы соглашаетесь с тем, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в ​​отношении файлов cookie.

Принимать все файлы cookie

Настроить параметры

Что такое генератор случайных чисел в Python и как им пользоваться?

При создании программного обеспечения наши программы обычно требуют создания различных элементов.Это наиболее часто встречается в таких приложениях, как игры, генерация одноразовых паролей, азартные игры и т. Д. Python упрощает задачу генерации этих значений с помощью своих встроенных функций. В этой статье о генераторах случайных чисел в Python вы узнаете, как генерировать числа с помощью различных встроенных функций.

Прежде чем двигаться дальше, давайте взглянем на темы, обсуждаемые в этом руководстве:

  • Что такое генератор случайных чисел в Python?
  • Генерация целых чисел
  • Генерация чисел с плавающей запятой
  • Возвращение значений из последовательности
  • Другие функции

Итак, приступим.:)

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

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

Теперь давайте более подробно рассмотрим каждую из них.

Случайные целые числа можно генерировать с помощью таких функций, как randrange () и randint ().

Давайте сначала взглянем на randint ().

randint ():

Эта функция генерирует целые числа между заданным пределом. Он принимает два параметра, где первый параметр указывает нижний предел, а второй - верхний предел. randint (a, b) начинает генерировать значения от a до b такие, что:

a <= x <= b (включает a и b)

ПРИМЕР:

 import random 
random.randint (2, 9)

ВЫХОД: 5

Приведенный выше код может генерировать числа от 2 до 9, включая ограничения.Если вы хотите сгенерировать несколько значений между этим диапазоном, вы можете использовать цикл для следующим образом:

ПРИМЕР:

 import random 
for x in range (2):
print (random.randint (2,9))

ВЫХОД: 2 6

Если вы хотите генерировать числа с интервалами, вы можете использовать функцию randrange ().

randrange ():

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

ПРИМЕР:

 import random 
for x in range (5):
print (random.randrange (2,60,2))

ВЫХОД:

Как видите, все числа сгенерированы здесь есть четные числа от 2 до 6.

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

Для генерации чисел с плавающей запятой вы можете использовать функции random () и uniform.

random ():

Эта функция производит значения с плавающей запятой между 0.От 0 до 1.0 и, следовательно, не принимает никаких параметров. Обратите внимание, что верхний предел исключен. Таким образом, максимальное значение будет 9,999.

ПРИМЕР:

 импорт случайный 
для x в диапазоне (5):
печать (random.random ())

ВЫХОД:

0,18156025373128404
0,1972996

18416
0,699875692812

0,125 :

В отличие от функции random (), эта функция принимает два параметра, которые определяют нижний и верхний пределы соответственно.

ПРИМЕР:

 для x в диапазоне (5): 
print (random.uniform (6))

ВЫХОД:

2.3135197730563335
5.752723932545697
4.56123681344740932545697
4.561236813447408

7 9327457 93270007 9327457 также генерировать случайные значения из заданной последовательности.

Генерация значений из заданной последовательности:

Это можно сделать с помощью функций choice () и sample ().

choice ():

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

ПРИМЕР:

 для x в диапазоне (3): 
print (random.choice ([1,2,3,4,5,6,7,8,9]))

ВЫХОД:

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

sample ():

Функция sample () выбирает случайную последовательность из заданной последовательности и возвращает ее в качестве выходных данных. Он принимает два параметра, где первый параметр представляет собой последовательность, а второй - целочисленное значение, определяющее, сколько значений необходимо вернуть в выходных данных.

ПРИМЕР:

 print (random.sample ([1,2,3,4,5,6,7,8,9], 4)) 

ВЫХОД: [1, 4, 5, 9]

Как видите, выходной список, созданный в приведенном выше примере, состоит из четырех случайно выбранных значений из заданной последовательности.

Другие функции:

seed ():

Функция seed () принимает число в качестве параметра, называемого семенем, и выдает одни и те же случайные числа каждый раз, когда вы вызываете эту функцию с этим числом.

ПРИМЕР:

 random.seed (2) print (random.random (), random.random (), random.random (), end = 'nn') random.seed (3) print (random. random (), random.random (), random.random (), end = 'nn') random.seed (2) печать (random.random (), random.random (), random.random ()) 

ВЫХОД:

 0,9560342718892494 0,9478274870593494 0,05655136772680869 0,2379646270
37 0,5442292252959519 0,36995516654807925 0,9560342718892494 0,9478274870593494 98040009Эта функция очень полезна в экспериментах, когда вам нужно передавать одни и те же случайные числа в различные тестовые примеры. 

shuffle ():

Эта функция используется для случайного перемешивания заданной последовательности.

ПРИМЕР:

 mylist = [1,2,3,4,5,6,7,8,9] 
random.shuffle (mylist)
print (mylist)

ВЫХОД: [6, 8, 2, 4, 3, 7, 1, 5, 9]

На этом мы подошли к концу статьи «Генератор случайных чисел в Python».Надеюсь, вы поняли все концепции.

Вот и все, ребята, это подводит нас к концу статьи о том, как вводить A-список в Python? Если вы хотите ознакомиться с другими статьями о самых популярных технологиях на рынке, таких как искусственный интеллект, DevOps, этический взлом, посетите официальный сайт Edureka.

Обязательно обратите внимание на другие статьи в этой серии, которые объяснят различные другие аспекты Python и Data Science.

1. Классификатор машинного обучения на Python

2. Шпаргалка по Python Scikit-Learn

3. Инструменты машинного обучения

4. Библиотеки Python для науки о данных и машинного обучения

5. Чат-бот на Python

6. Коллекции Python

7. Модули Python

8. Навыки разработчика Python

9. ООП Вопросы и ответы

10. Резюме для Python-разработчика

11. Исследовательский анализ данных в Python

12. Игра «Змея» с модулем Python Turtle

13. Зарплата разработчика Python

14 Анализ основных компонентов

15. Python и C ++

16. Учебное пособие по Scrapy

17. Python SciPy

18. Метод регрессии наименьших квадратов

19. Шпаргалка по Jupyter Notebook

20. Основы Python

21. Программы шаблонов Python

22. Генераторы на Python

23. Декоратор Python

24. Что такое программирование сокетов в Python

25. Мобильные приложения с использованием Kivy в Python

26. 10 лучших книг для изучения и практики Python

27. Робот-фреймворк с Python

28. Snake Game на Python с использованием PyGame

29. Django Interview Вопросы и ответы

30. 10 лучших приложений Python

31. Хеш-таблицы и хэш-карты в Python

32. Python 3.8

33. Машина опорных векторов

34. Python Tutorial

35. Python Spyder

Python | 5a - Случайный

Python 5a - Случайный

Импорт

В этом разделе рассматриваются дополнительные команды, которые вы можете импортировать и использовать из библиотеки кода Python.

Библиотека - это набор различных последовательностей кодирования, которые автоматически поставляются с Python, но отделены от основного файла.Их можно импортировать (перенести) в вашу программу, используя команду импорта в начале вашей программы.

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

Например, ниже мы хотим открыть библиотеку кода Python, перейти в раздел random и импортировать только команду randint.

Это более эффективно, чем просто импорт всего случайного раздела.

Случайные числа

Чтобы сгенерировать случайные числа, сначала импортируйте раздел команды randint из библиотеки случайного кода Python в первой строке программы:

Команда randint означает случайное целое число. В скобках укажите диапазон номеров для случайного выбора.

Случайное значение необходимо сохранить в переменной.

Выше приведена допустимая строка генерации случайных чисел, но для полной программы требуется команда импорта и строка печати:

Диапазон в скобках команды randint не обязательно должен быть фиксированным и может быть заменен переменными. .

Ниже приведена программа, в которой пользователь выбирает верхнее и нижнее значения диапазона:

1. Сгенерировать случайное число от 1 до 5.

2. Попросите пользователя ввести число от 1 до 5.

3. Если номер пользователя равен случайному, выведите «ПРАВИЛЬНО!» в противном случае выведите «НЕПРАВИЛЬНО!»

Случайные символы

Вместо чисел, мы также можем случайным образом генерировать символы из указанного диапазона с помощью команды выбора.

Как и раньше, вам нужно импортировать команду из библиотеки random и указать диапазон в скобках.

Ниже приведена программа, которая случайным образом выбирает букву алфавита:

Диапазон символов для выбора не обязательно должен состоять только из букв; вы можете использовать цифры или знаки препинания.

Также не требуется фиксировать диапазон. Вместо этого символы можно выбрать из значения переменной, например:

1.Сгенерируйте случайную выборку из «aeiou».

2. Попросите пользователя ввести гласную (убедитесь, что они также используют строчные буквы).

3. Если гласная пользователя совпадает со случайной выборкой, выведите соответствующий ответ.

4. Если они не совпадают, выведите другой ответ.

Случайная выборка

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

После того, как вы написали эту команду, вам нужно указать список значений для выборки и сколько значений вы хотите выбрать:

Будьте осторожны с скобками.

Строковые значения должны быть внутри речевых знаков, разделены запятыми и заключены в квадратные скобки.

После списка строковых значений вам понадобится еще одна запятая, а затем значение, указывающее, сколько значений следует выбрать.

Ниже представлена ​​программа, которая выбирает три значения из списка строк и выводит их. Не забудьте включить строку импорта в начало каждой программы, используя случайную команду.

Вы также можете использовать команду sample, чтобы выбрать несколько целых чисел из заданного диапазона.

При реализации команды диапазона вам не нужно отдельно записывать каждое значение, как в примере строки выше.

У вашей тети будет мальчик.

Создайте программу, которая случайным образом выбирает 3 мужских имени из списка 10 возможных имен.

Python создает список случайных чисел с примерами

В этом руководстве объясняется несколько способов создания списка случайных чисел в Python. Здесь мы в основном будем использовать три функции генерации случайных чисел Python.Это random.randint (), random.randrange () и random.sample ().

Вы можете найти полную информацию об этих методах здесь: Генератор случайных чисел Python . Все эти функции являются частью модуля Random. Он использует быстрый генератор псевдослучайных чисел, который использует алгоритм Мерсенна Твистера.

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

1. randint () для создания списка целых чисел
2.randrange () для создания списка целых чисел
3. sample () для создания списка целых чисел

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

Создать список случайных целых чисел

1. randint () для создания списка целых чисел

Это встроенный метод случайного модуля. Об этом читайте ниже.

Синтаксис:

 случайный.randint (Старт, Стоп) 

Аргументы:

 (Start, Stop): оба должны быть целыми числами. 

Возвращаемое значение:

Возвращает случайное целочисленное значение в заданном диапазоне.

Статус ошибки:

  • Возвращает ValueError для передачи аргументов с плавающей запятой.
  • Возвращает TypeError для передачи любых нечисловых аргументов.
Пример-

Исходный код

 "" "
 Описание:
  Сгенерируйте список из 10 случайных целых чисел с помощью randint ()
"" "

случайный импорт

Старт = 9
Стоп = 99
limit = 10

RandomListOfIntegers = [случайный.randint (Start, Stop) для итера в диапазоне (предел)]

печать (RandomListOfIntegers) 

Выход

 [35, 86, 97, 65, 86, 53, 94, 15, 64, 74] 

2. randrange () для создания списка чисел

Он производит случайные числа из заданного диапазона. Кроме того, он позволяет нам указывать шаги.

Синтаксис:

 random.randrange ([Start,] Stop [, Step]) 

Аргументы:

  • Начало: Генерация начинается с этого номера.Это необязательный параметр, значение по умолчанию которого равно нулю.
  • Стоп: Генерация останавливается ниже этого значения. Это обязательный параметр.
  • Шаг: Это значение, добавляемое к числу. Это также необязательно, по умолчанию - 1.

Возвращаемое значение:

Возвращает последовательность чисел от начала до конца при скачкообразном изменении значения шага.

Статус ошибки:

Выдает ошибку ValueError, когда конечное значение меньше или равно начальному, или если входное число не является целым числом.

Подробнее, здесь Python randrange ().

Пример-

Исходный код

 "" "
 Описание:
  Сгенерируйте список из 10 случайных целых чисел с помощью randrange ()
"" "

случайный импорт

Старт = 9
Стоп = 99
limit = 10

# Список случайных целых чисел без параметра Step
RandomI_ListOfIntegers = [random.randrange (Start, Stop) для другого в диапазоне (предел)]
печать (RandomI_ListOfIntegers)

Шаг = 2
# Список случайных целых чисел с параметром Step
RandomII_ListOfIntegers = [случайный.randrange (Start, Stop, Step) для итера в диапазоне (предел)]
печать (RandomII_ListOfIntegers) 

Выход

 [52, 65, 26, 58, 84, 33, 37, 38, 85, 82]
[59, 29, 85, 29, 41, 85, 55, 59, 31, 57] 

3. sample () для создания списка целых чисел

Это встроенная функция модуля Python random. Он возвращает список элементов заданной длины, который он случайным образом выбирает из последовательности, такой как List, String, Set или Tuple. Его цель - случайная выборка без замены.

Синтаксис:

 random.sample (seq, k) 

Параметры:

  • seq: Это может быть список, строка, набор или кортеж.
  • k: Это целое число, представляющее размер выборки.

Возвращаемое значение:

Возвращает подпоследовательность из k no. предметов, случайно выбранных из основного списка.

Пример-

Исходный код

 "" "
Описание:
Сгенерируйте список из 10 случайных целых чисел с помощью sample ()
"" "

случайный импорт

Старт = 9
Стоп = 99
limit = 10

# Список случайных целых чисел, выбранных из диапазона
Random_ListOfIntegers = случайный.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *