Тут на лицо распределение по весам.
Нечто подобное я на питоне делал:
wt - входной массив с весами, например [60,30,10] или [60,30,10,5] - сумма не обязательно должна быть равна 100 или какой-то другой величине. Это все учитывается.
Задача выдать индекс в массиве wt с вероятностью пропорциональной весу в этой позиции.
from random import random
wt = [60,30,10] # массив весов
cw = 0 # тут будем накапливать веса
rv = random() * sum(wt) # берем рандом от 0 до 1 и приводим к масштабу (сумма весов)
for j in range(len(wt)): # проходим по всем весам
cw += wt[j] # прибавляем к аккумулятору вес
if cw > rv: # проверяем не превысил ли накопленный вес случайное значение?
break # если превысил, значит в диапазон этого веса мы и попали.
print(j) # печатаем найденный индекс