@likeviolence

Алгоритм рандома при котором чем больше число тем ниже шанс его выпадения?

Есть некоторая переменная - поношенность вещи, которая является числом с двумя цифрами после запятой и максимальным значением равным: 99,99, как сделать рандом так, чтобы чем выше это число, тем шанс выпадения был ниже.
Делал через рандом диапазонов:
random(0,1000)
если результат равен от 0 до 500 то рандом от 0 до 70
0 - 500 -> random(0, 70) и так далее, но это не сильно подходит, так как шанс выпадения, к примеру 90 и 99 слишком равен, а прописывать каждое число слишком долго
  • Вопрос задан
  • 1551 просмотр
Решения вопроса 1
kshnkvn
@kshnkvn
yay ✌️ t.me/kshnkvn
У random.choices есть возможность задавать "вес" для элементов. Например:
import random

item_chances = {
    'item_1': 10,
    'item_2': 30,
    'item_3': 50,
    'item_4': 70,
    'item_5': 90
}

selected = random.choices(
    list(item_chances.keys()), weights=list(item_chances.values()), k=5000)

for item in set(selected):
    print(f'{item}: {selected.count(item)}')

Здесь у item_1 самый маленький вес, то есть самый маленький шанс выпадения этого значения, в то время как у item_5 самый высокий. Аргумент k указывает сколько элементов нужно выбрать. В данном случае 5000 я выбрал для теста. Вывод:
item_1: 175
item_2: 578
item_3: 1001
item_4: 1458
item_5: 1788

Как видишь все сходится и "предметы" выпадали согласно их "весу".
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы