Как создать рандомное число в python
Перейти к содержимому

Как создать рандомное число в python

  • автор:

Модуль random, случайные числа в Python

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

Модуль random реализует генераторы псевдослучайных чисел для различных распределений.

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

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

Почти все функции модуля зависят от базовой функции random.random() , которая генерирует случайное число с плавающей точкой в ​​полуоткрытом диапазоне [0.0, 1.0] . Python использует Mersenne Twister в качестве генератора ядра. Он генерирует 53-битные значения точности и имеет период 2 ** 19937-1 . Базовая реализация в C является быстрой и поточно-ориентированной. Mersenne Twister является одним из наиболее тщательно протестированных генераторов случайных чисел из существующих. Однако, будучи полностью детерминированным, он не подходит для всех целей и совершенно не подходит для криптографических целей.

Функции, предоставляемые этим модулем, на самом деле являются связанными методами скрытого экземпляра класса random.Random . Вы можете создать свои собственные экземпляры Random() , чтобы получить генераторы, которые не делятся состоянием.

Класс Random() также можно разделить на подклассы, если вы хотите использовать другой базовый генератор вашего собственного устройства: в этом случае переопределите методы random.random() , random.seed() , random.getstate() и random.setstate() . При желании новый генератор может предоставить метод random.getrandbits() — это позволяет random.randrange() производить выборки в произвольно большом диапазоне.

Модуль random также предоставляет класс random.SystemRandom , который использует системную функцию os.urandom() для генерации случайных чисел из источников, предоставляемых операционной системой.

Предупреждение.

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

Замечания по воспроизводимости последовательностей.

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

Большинство алгоритмов и функций модуля могут изменяться в разных версиях Python, но два аспекта гарантированно не изменятся:

  • Если будет добавлен новый метод, то обязательно будет предложена обратная совместимость.
  • Метод генератора random() будет продолжать создавать ту же последовательность, если совместимому методу будет дано то же самое начальное число seed .

Примеры использования модуля random .

Базовое применение модуля:

>>> import random # Случайное float: 0.0 >>> random.random() # 0.37444887175646646 # Случайное float: 2.5 >>> random.uniform(2.5, 10.0) # 3.1800146073117523 # Интервал между прибытием в среднем 5 секунд >>> random.expovariate(1 / 5) # 5.148957571865031 # Четное целое число от 0 до 100 включительно >>> random.randrange(10) # 7 # Even integer from 0 to 100 inclusive >>> random.randrange(0, 101, 2) 26 # Один случайный элемент из последовательности >>> random.choice(['win', 'lose', 'draw']) 'draw' >>> deck = 'ace two three four'.split() # Перемешать список >>> random.shuffle(deck) >>> deck ['four', 'two', 'ace', 'three'] # Четыре образца без замены >>> random.sample([10, 20, 30, 40, 50], k=4) # [40, 10, 50, 30] 
# Шесть вращений колеса рулетки (взвешенная выборка с заменой) >>> choices(['red', 'black', 'green'], [18, 18, 2], k=6) # ['red', 'green', 'black', 'black', 'red', 'black'] # Сдайте 20 карт без замены из колоды из 52 игральных карт # и определите пропорцию карт с достоинством в: # десять, валет, дама или король. >>> dealt = sample(['tens', 'low cards'], counts=[16, 36], k=20) >>> dealt.count('tens') / 20 # 0.15 # Оценка вероятности получения 5 или более попаданий из 7 # бросаний монеты, которая выпадает орлом в 60% случаев. >>> def trial(): . return choices('HT', cum_weights=(0.60, 1.00), k=7).count('H') >= 5 . >>> sum(trial() for i in range(10_000)) / 10_000 # 0.4169 >>> # Вероятность того, что медиана из 5 выборок находится в средних двух квартилях >>> def trial(): . return 2_500  sorted(choices(range(10_000), k=5))[2]  7_500 . >>> sum(trial() for i in range(10_000)) / 10_000 # 0.7958 

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

# http://statistics.about.com/od/Applications/a/Example-Of-Bootstrapping.htm from statistics import fmean as mean from random import choices data = [41, 50, 29, 37, 81, 30, 73, 63, 20, 35, 68, 22, 60, 31, 95] means = sorted(mean(choices(data, k=len(data))) for i in range(100)) print(f'The sample mean of mean(data):.1f> has a 90% confidence ' f'interval from means[5]:.1f> to means[94]:.1f>') 

Пример теста перестановки повторной выборки для определения статистической значимости или Р-значения наблюдаемой разницы между эффектами препарата и плацебо:

# Example from "Statistics is Easy" by Dennis Shasha and Manda Wilson from statistics import fmean as mean from random import shuffle drug = [54, 73, 53, 70, 73, 68, 52, 65, 65] placebo = [54, 51, 58, 44, 55, 52, 42, 47, 58, 46] observed_diff = mean(drug) - mean(placebo) n = 10_000 count = 0 combined = drug + placebo for i in range(n): shuffle(combined) new_diff = mean(combined[:len(drug)]) - mean(combined[len(drug):]) count += (new_diff >= observed_diff) print(f'n> label reshufflings produced only count> instances with a difference') print(f'at least as extreme as the observed difference of observed_diff:.1f>.') print(f'The one-sided p-value of count / n:.4f> leads us to reject the null') print(f'hypothesis that there is no difference between the drug and the placebo.') 

Моделирование времени прибытия и доставки услуг для многосерверной очереди:

from heapq import heappush, heappop from random import expovariate, gauss from statistics import mean, median, stdev average_arrival_interval = 5.6 average_service_time = 15.0 stdev_service_time = 3.5 num_servers = 3 waits = [] arrival_time = 0.0 servers = [0.0] * num_servers # time when each server becomes available for i in range(100_000): arrival_time += expovariate(1.0 / average_arrival_interval) next_server_available = heappop(servers) wait = max(0.0, next_server_available - arrival_time) waits.append(wait) service_duration = gauss(average_service_time, stdev_service_time) service_completed = arrival_time + wait + service_duration heappush(servers, service_completed) print(f'Mean wait: mean(waits):.1f>. Stdev wait: stdev(waits):.1f>.') print(f'Median wait: median(waits):.1f>. Max wait: max(waits):.1f>.') 
  • КРАТКИЙ ОБЗОР МАТЕРИАЛА.
  • Генерация случайного целого числа или байтов
  • Генерация случайных вещественных чисел
  • Функция choice() модуля , выбирает случайный элемент
  • Функция random.choices(), выбирает несколько случайных элементов
  • Функция shuffle() модуля random, перемешивает список
  • Функция random.sample() модуля random
  • Инициализация и состояние генератора
  • Классы Random() и SystemRandom() модуля random
  • Вероятностные распределения в модуле random Python
  • Рецепты использования модуля random
  • Функция binomialvariate() модуля random

14. Генерируем случайные числа на Python

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

import random

Если вы запустите код dir(название_модуля) в командной строке Python, то вы можете получить все атрибуты модуля или чего-нибудь еще. Так же можно обратиться к документации Python. В справочнике по модулю random можем найти функцию randint() , которая нам как раз и нужна.

Если в оболочке Python запустить код help(random.randint) , то можно узнать что делает эта функция. Итак, эта функция возвращает целое число в диапазоне [a, b] включая их, которые передаются в функцию следующим образом:

random.randint(1,60)

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

import random
result = random.randint(1,60)
print("Случайное число от 1 до 60: ", result)

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

import random
for i in range(5):
print("Случайное число от 1 до 60: ", random.randint(1,60))

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

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

Картинка к уроку

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

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

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

import random

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

Random.random

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

import random print(random.random()) >>> 0.172676650596703 print(random.random()) >>> 0.41967198132083483 print(random.random()) >>> 0.9918523889221545

Random.uniform

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

import random print(random.uniform(0, 100)) >>>26.937418056935602 print(random.uniform(0, 100)) >>>50.37814119663015 print(random.uniform(0, 0.1)) >>>0.022964850436330765

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

Random.randint

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

import random print(random.randint(0, 100)) >>> 3 print(random.randint(0, 100)) >>> 54 print(random.randint(0, 100000)) 31842

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

Random.randrange

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

import random print(random.randrange(0, 20, 5)) >>>0 print(random.randrange(0, 20, 5)) >>>15 print(random.randrange(0, 20, 2)) >>>12

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

Random.choince

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

import random print(random.choices([0, 1, 12])) >>>[0] print(random.choices([0, 1, 12])) >>>[12] print(random.choices([0, 1, 12])) >>>[1]

Функция задается в формате random.choise(список).

Создать рандомные числа и присвоить их каждому индексу в списке (Python)

не так давно приступил к изучению пайтона, да и в целом программирования. Пока читал одну из глав книги о списках и кортежах, мне пришла в голову идея: написать код, который будет через библиотеку random генерировать произвольные числа от 0 до 10000. Затем сгенерированное число будет поочередно присваиваться каждому индексу в списке (предположим, что имя у списка будет myList и хранить он в себе будет значения [0, 0, 0, 0, 0]. После всех этих операций значения в списке будут рассортированы через метод sort() и выводиться на экран. Такую задачу я пытался решить, но ничего не получилось. Спасибо за помощь.

import random myList = [0, 0, 0, 0, 0] for item in myList: myList[item] = random.randint(1, 10000) print(myList) 

Отслеживать
задан 15 сен 2020 в 17:16
5 4 4 бронзовых знака
Что значит «не получилось», где ваш код?
15 сен 2020 в 17:21

В принципе, это элементарная задачка, которую можно написать в одну строчку, но если кто-то напишет её за вас, вы ничему не научитесь.

15 сен 2020 в 17:22
Не могу на данный момент предоставить код
15 сен 2020 в 17:27
упд. Добавил код
15 сен 2020 в 18:10
Вам нужно внимательно перечитать главу и списках и циклах.
15 сен 2020 в 18:14

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

В вашем коде достаточно заменить

for item in myList: --> for item in range(len(myList)): 

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

Но вашу задачу проще было бы решить через генератор списков:

my_list = [random.randint(0, 10**4) for i in range(5)] 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *