Как мне генерировать броски костей с разными вероятностями? - PullRequest
1 голос
/ 30 октября 2019

просто работает над домашним заданием, в котором он просит создать программу проката игральных костей, в которой один или два числа могут быть напечатаны с большей вероятностью, чем остальные. Например, 2 и / или 3 могут иметь на 10% или 20% больше вероятности печати, чем другие элементы на кости. Я получил код до того момента, когда смогу распечатать случайное число на кости, но не могу понять, как получить взвешенный результат.

ввод:

  def roll_dice(n, faces = 6):
    rolls = []
    rand = random.randrange

    for x in range (n):

      rolls.append(rand(1, faces + 1 ))

    return rolls

  print (roll_dice(5))

вывод: [5, 11, 6, 7, 6, 5]

Ответы [ 2 ]

1 голос
/ 30 октября 2019
from scipy import stats
values = np.arange(1, 7) 
prob = (0.1, 0.2, 0.3, 0.1, 0.1, 0.2) # probabilities must sum to 1
custm = stats.rv_discrete(values=(values, prob))

for i in range(10):
    print(custm.rvs())

1, 2, 3, 6, 3, 2, 3, 2, 2, 1

Источник: scipy.stats.rv_discrete

0 голосов
/ 31 октября 2019

Если вы на Python 3

import random
rolls = random.choices([1,2,3,4,5,6],weights=[10,10,10,10,10,50], k=10)

rolls
out:[1, 3, 2, 5, 3, 4, 6, 6, 6, 4]
...