Search code examples
pythonplotprobabilitydice

Rolling of Dice probability of getting exactly two 3s in 'k' rolls


Trying to calculate the probability of getting two 3s in 'k' rolls and then bar plot. Prior to me adding the code starting with prob_trials[], it would not return any output. Then when I added the prob_trials[] code, if get the error of tuple not callable.

import random
import pylab

"Calculating probability of getting exactly a 3 in k rolls"

dice=(1,2,3,4,5,6)
one=0
two=0
three=0
four=0
five=0
six=0
for i in range(100):
    result = random.choice(dice)
    if result == 1:
        one +=1
    elif result == 2:
        two +=1
    elif result == 3:
        three +=1
    elif result == 4:
        four +=1
    elif result == 5:
        five +=1 
    elif result == 6:
        six +=1
trial_result = (one, two, three, four, five, six)

prob_trials=[]
for i in range(6):
    a = trial_result(i)/100
    prob_trials.append(a)
    
pltbar(dice,prob_trials)

Solution

  • I would suggest a direct calculation of the probability. The experiment of rolling a dice getting

    1. '3' with probability 1/6
    2. 'not 3' with probability 5/6

    This can be looked as a Bernoulli distribution. Thus, the act of 2 successes in k experiments will be regarded as Binomial distribution. Therefore, the probability of a binomial random variable X to have 2 successes in k attempts will be computed as:

    P(X=2) = (k choose 2)*(1/6)^2 * (5/6)^{k-2}

    Code example for this will be:

    from math import comb
    
    p = 1/6  # probability of success in an experiment
    k = 8    # number of experiments, put any number here
    s = 2    # number of successes, 2 in our case
    
    prob = comb(k, s) * p**s * (1-p)**(k-s)
    
    print(prob)