Определение вероятности каждого броска костей - PullRequest
2 голосов
/ 09 июля 2020

Когда вы играете в игры, где вам нужно выбросить два d ie, полезно знать шансы каждого броска. Например, вероятность выпадения 12 составляет около 3%, а вероятность выпадения 7 - около 17%.

Вы можете вычислить их математически, но если вы не знаете математику, вы можете напишите программу для этого. Для этого ваша программа должна имитировать бросание двух игральных костей примерно 10 000 раз, а также вычислить и распечатать процент выпавших бросков 2, 3, 4,. . . , 12.

Пространство состояний для броска 2 кубиков

Во-первых, моя проблема связана с процентом вероятности. Учитывая, что только шесть может дать двенадцать в пространстве состояний из 36 возможностей, как получается, что вероятность равна 3?

Из-за этого я не смог завершить свою программу. Ниже я пытаюсь найти решение

from random import randint
dice_roll=[]
outcome =(2,3,4,5,6,7,8,9,10,11,12)
sim =10

for simulations in range(sim):
    first_dice_roll = randint(1,6)
    second_dice_roll = randint(1,6)

    dice_roll.append(first_dice_roll + second_dice_roll)
    sumi = sum(dice_roll)
print(dice_roll,"Dice roll")

Ответы [ 2 ]

1 голос
/ 09 июля 2020

Я немного изменил ваш код. Я заменил список результатов на словарь, в котором ключ - это сумма, а значение - частота возникновения суммы. Вывод кода также вставлен ниже. Ниже вы можете видеть, что вероятности броска кости близки к математически ожидаемым.

Примечание: Python использует генератор псевдослучайных чисел для randint, что является очень хорошим приближением но не случайно

from random import randint
outcome = {2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0} #map of sum:freq
sim =100000

for simulations in range(sim):
    first_dice_roll = randint(1,6)
    second_dice_roll = randint(1,6)
    sum_dice = first_dice_roll + second_dice_roll
    outcome[sum_dice] += 1 
    
for key in outcome.keys():
    print("Percentage for rolling a sum of %s is: %s"%(key,outcome[key]/sim*100))

ВЫХОД

Percentage for rolling a sum of 2 is: 2.775
Percentage for rolling a sum of 3 is: 5.48
Percentage for rolling a sum of 4 is: 8.179
Percentage for rolling a sum of 5 is: 11.029
Percentage for rolling a sum of 6 is: 13.831
Percentage for rolling a sum of 7 is: 16.997
Percentage for rolling a sum of 8 is: 13.846
Percentage for rolling a sum of 9 is: 11.16
Percentage for rolling a sum of 10 is: 8.334999999999999
Percentage for rolling a sum of 11 is: 5.5489999999999995
Percentage for rolling a sum of 12 is: 2.819
0 голосов
/ 09 июля 2020

Мое решение:

from random import randint

probs = {2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0,11:0,12:0}

for i in range(10000):
    diceTotal = randint(1,6)+randint(1,6)
    
    probs[diceTotal] += 1

for key,value in probs.items():
    print(str(key) + " => " + str(value/100) + "%")

Each possible total is a key in a dictionary and its value is incremented whenever that total is the result of the dice rolling.

Вывод:

2 => 2.8%
3 => 5.64%
4 => 7.96%
5 => 11.44%
6 => 13.68%
7 => 16.42%
8 => 13.81%
9 => 11.47%
10 => 8.55%
11 => 5.54%
12 => 2.69%

Результаты довольно близки к вероятностям c theori. Увеличение количества бросков кубиков, конечно, улучшило бы оценку.

...