Форум сайта python.su
0
Ув. корифеи, подскажите пожалуйста, какой из существующих методов распределения модуля random подойдет. Задача следующая:
A=1, B=0 вероятность выпадения A = X%, при N… итерациях. X и N переменные. Нужно чтоб генерировалось одно число (не список) по заданным параметрам.
Пока в голову приходит только сгенерировать список для A длинной в AL=N*X и B длинной в N-AL, сложиьт и перемешать shuffle. Но думаю что этот топорный велосипед н есамый правильный.
Офлайн
0
from random import *
#Создаем кортеж из 100 едениц или нулей где х-количество едениц.
randx=lambda x:choice((1,)*x+(0,)*(100-x))
print(randx(55))
Если я правильно вас понял.
Офлайн
0
По сути очень похожее, решение, с теми же минусами, в процентах нет дробей, но это можно решить увеличив кол-во единиц/нулей до десяти тысяч, но это все таки расход ресурсов, и если использовать эту схему к примеру для генерации критов/уворотов то мне кажется уже после тысячного игрока будут ощутимые проблемы с ресурсами, ведь в памяти будут храниться как минимум по два кортежа длинной в 10000 знаков у 1000 игроков. Хотелось бы чтоб 55% вероятность события вычислялось без кортежей или списков. Но все равно спасибо мой вариант был таким:
n = int(input('Введите вероятность в процентах:'))
if n>100:
print('Всего 100%')
n = int(input('Введите вероятность в процентах:'))
my_list_orel = * n
print(my_list_orel)
reska_ver = 100 - n
my_list_reska = * reska_ver
print(my_list_reska)
total_list = my_list_orel + my_list_reska
random.shuffle(total_list)
Офлайн
0
Кортеж существует только один из него и вибираем при вызове. такчто не заморачивайтесь
Офлайн
20
SRGBДля randint вероятностное распределение в районе 40 процентов для средних значений диапазона занимающих 20% этого диапазона, не скажу за весь random, но проблемы могут начаться уже из-за этого. Я к тому что распределение не нормальное.
random
Офлайн