Рандом по процентам disnake.py
Как сделать бота для дискорд с рандомом по процентам disnake.pу. Нашла примерный код но он для diskord.py, и естественно у меня он не работает
bot.slash_command(name='spell')
async def spell(ctx):
rand3 = ["Добрый мишка -- Секретный","Мишка с мишонкой -- Секретный"]
rand2 = ["Обычный мишка - обычный", "Мишка на стуле с шипами - Редкий", "Мишка без мишки - обычный"]
rand1 = ["Мишка сидит и ест мишку - Эпик", "Мишка смотртит хентай - Легендарный", "Мишка сидит на бебре - мифичисекий","Злой мишка -- Легендарный","Белый миша -- Невозможный","мишка ест мороженое -- Легенадрный", "Мишка с мишонкой -- Секретный"]
r = (random.randint(1,1000))
if r <= 500:
randc = (random.choice(rand2))
elif r >= 800:
randc = (random.choice(rand1))
elif r <= 950:
print(random.choice(rand3))
await ctx.send(randc)
Ответы (1 шт):
#### числами в списки для удобства и наглядности проверки через print вероятностей сделал, просто поменяйте под себя потом.
@bot.command()
async def rand(ctx):
rand3 = ["31", "32"]
rand2 = ["21", "22", "23"]
rand1 = ["12", "13", "14", "15", "16", "17", "18"]
weights = [10, 20, 70]
total_weight = sum(weights)
weights = [weight / total_weight for weight in weights]
all = [rand1, rand2, rand3]
selected = random.choices(all, weights=weights)[0]
print(selected)
option = random.choice(selected)
print(option)
await ctx.send(option)
Подсчитываем сумму весов из weights.
sum(weights) - общий вес, который будет использоваться для преобразования весов в процентные значения.
Преобразовываем веса из числовых значений в процентные. Используем генератор списка [weight / total_weight for weight in weights], который проходит по каждому элементу списка weights и вычисляет его отношение к общему весу.
Каждый элемент списка weights делится на общий вес, чтобы получить долю в процентах для этого элемента.
Например, список weights = [10, 20, 70] и total_weight = 100, то преобразование будет таким:
weights = [10 / 100, 20 / 100, 70 / 100] weights = [0.1, 0.2, 0.7] Теперь элементы списка weights представляют собой процентные значения, где сумма всех элементов равна 1 (100%).