Как сделать шанс выпадения в python
Перейти к содержимому

Как сделать шанс выпадения в python

  • автор:

«Случайные» числа в Python – random, randint и randrange

В компьютерных программах нередко требуется эмуляция случайности. Например, при разработке игр. Если в программе имеется некий генератор, то есть производитель, случайного числа, то, используя полученное таким образом число, можно выбирать ту или иную ветку выполнения программы, или произвольный объект из коллекции. Другими словами, главное – сгенерировать число. Эмуляция случайности иного рода основывается на нем.

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

«Зерно» – это исходные данные для формулы. Им может быть, например, системное время в миллисекундах, которое постоянно меняется. Следовательно, «зерно» будет постоянно разным. Или программист может задавать его самостоятельно.

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

В этом уроке будут рассмотрены функции random() , randrange() и randint() из модуля random . Обратите внимание, что модуль random содержит одноименную функцию random() . Так бывает.

Чтобы обращаться к функциям, надо импортировать модуль random :

>>> import random

Или импортировать отдельные функции из него:

>>> from random import random, randrange, randint

Функции для получения целых «случайных» чисел – randint() и randrange()

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

>>> random.randint(0, 10) 6

или (если импортировались отдельные функции):

>>> randint(100, 200) 110

В случае randint() обе границы включаются в диапазон, т. е. на языке математики отрезок описывается как [a; b].

Числа могут быть отрицательными:

>>> random.randint(-100, 10) -83 >>> random.randint(-100, -10) -38

Но первое число всегда должно быть меньше или, по-крайней мере, равно второму. То есть a

Функция randrange() сложнее. Она может принимать один аргумент, два или даже три. Если указан только один, то она возвращает случайное число от 0 до указанного аргумента. Причем сам аргумент в диапазон не входит. На языке математики – это [0; a).

>>> random.randrange(10) 4
>>> randrange(5) 0

Если в randrange() передается два аргумента, то она работает аналогично randint() за одним исключением. Верхняя граница не входит в диапазон, т. е. [a; b).

>>> random.randrange(5, 10) 9 >>> random.randrange(1, 2) 1

Здесь результатом второго вызова всегда будет число 1.

Если в randrange() передается три аргумента, то первые два – это границы диапазона, как в случае с двумя аргументами, а третий – так называемый шаг. Если, например, функция вызывается как randrange(10, 20, 3) , то «случайное» число будет выбираться из чисел 10, 13, 16, 19:

>>> random.randrange(10, 20, 3) 13 >>> random.randrange(10, 20, 3) 19 >>> random.randrange(10, 20, 3) 10

Функция random() – «случайные» вещественные числа

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

>>> random.random() 0.17855729241927576 >>> random.random() 0.3310978930421846
>>> random() 0.025328854415995194

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

>>> a = random.random() >>> a 0.8366142721623201 >>> round(a, 2) 0.84 >>> round(random.random(), 3) 0.629

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

>>> random.random() * 10 2.510618091637596 >>> random.random() * 10 6.977540211221759

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

>>> random.random() * (10 - 4) + 4 9.517280589233597 >>> random.random() * (10 - 4) + 4 6.4429124181215975 >>> random.random() * (10 - 4) + 4 4.9231983600782385

В данном примере число умножается на 6. В результате получается число от 0 до 6. Прибавив 4, получаем число от 4 до 10.

Пример получения случайных чисел от -1 до 1:

>>> random.random() * (1 + 1) - 1 -0.673382618351051 >>> random.random() * (1 + 1) - 1 0.34121487148075924 >>> random.random() * (1 + 1) - 1 -0.988751324713907 >>> random.random() * (1 + 1) - 1 0.44137358363477674

Нижняя граница равна -1. При вычитании получается +. Когда добавляется нижняя граница, то плюс заменяется на минус ( +(-1) = — 1).

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

>>> int(random.random() * 100) 61 >>> round(random.random() * 100 - 50) -33

Практическая работа

  1. Используя функцию randrange() получите псевдослучайное четное число в пределах от 6 до 12. Также получите число кратное пяти в пределах от 5 до 100.
  2. Напишите программу, которая запрашивает у пользователя границы диапазона и какое (целое или вещественное) число он хочет получить. Выводит на экран подходящее случайное число.

Примеры решения и дополнительные уроки в pdf-версии курса

X Скрыть Наверх

Python. Введение в программирование

Как сделать шанс в python?

Наверно плохо читал документацию но так и не нашёл, как сделать шансы выпадения чисел в python ?

Например что бы число 5 выпадало с 80% вероятностью, а число 7 с 20%

  • Вопрос задан более двух лет назад
  • 4178 просмотров

Комментировать
Решения вопроса 3

SoreMix

soremix @SoreMix Куратор тега Python

random.choices([5,7], weights=[80,20], k=1)[0]

Либо нечто похожее через cum_weights

random.choices([5,7], cum_weights=[0.8, 1.0], k=1)[0]

Ответ написан более двух лет назад
Нравится 6 1 комментарий

import random w = 0 for _ in range(100): if random.choices([5,7], cum_weights=[0.8, 1.0], k=1)[0] == 5: w += 1 print(w)

Шансы в языке Python

Я вроде приспособился писать вот такой код для случайного выпадения одного из вариантов (50 на 50):

import random
val=random.randint(1,2)
if val==1:
print(1)
if val==2:
print(2)

Но может есть какой-то способ сделать это короче?
Может даже указать в процентах?

Голосование за лучший ответ

А print(val) не судьба?)

CulasvisУченик (86) 5 лет назад
Не понял вас: зачем print(val), причем он тут?

Лайт Ягами Искусственный Интеллект (279274) Притом, что плодить на каждый кейс отдельную обработку — глупо) Кроме случаев, когда они действительно должны обрабатываться по-разному, но в вашем примере — всё выводится на экран)

if random.randrange(2):
первое действие
else:
второе действие

если вариантов больше двух и они с разными вероятностями, проще сделать так
import bisect
import itertools

p = list(itertools.accumulate([0.1, 0.3, 0.45]))
n = bisect.bisect(p, random.random())

if n == 0:
действие которое выполнится в 10% случаев
elif n == 1:
в 30% случаев
elif n == 2:
в 45% случаев
else:
в оставшихся 15% случаев (100% — 10% — 30% — 45% = 15%)

Python задача. Какая вероятность четных случайных чисел

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

Python random

1)Давайте создадим счетчик случайных четных чисел и установим его на 0.

2)Сгенерируем 1000 случайных чисел (например, от 0 до 99) и проверим правильность каждого из них. Четное число – это число, при делении которого на 2 в остатке 0. Если следующее число четное, то увеличим счетчик на 1.

3)Оценим вероятность выпадения четных чисел в процентах. Для этого нужно разделить количество четных чисел на общее количество сгенерированных чисел (в данном случае 1000) и умножить на 100.

Программа должна вывести около 50%. Вы можете увеличить количество, например до 10 000. В этом случае отклонение в 50% будет ближе.

Python random

Код для решения задачи на python

from random import random

for i in range(N):
if int(random()*100) % 2 == 0:
s += 1
print(«%.2f%%» % (s / N * 100))

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

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