Рандом по процентам disnake.py

Рейтинг: 0Ответов: 1Опубликовано: 30.05.2023

Как сделать бота для дискорд с рандомом по процентам 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)

Ответы

▲ 0Принят
#### числами в списки для удобства и наглядности проверки через 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%).