Rolling an N-sided Dice N times¶

A version of this question came up in class: if you roll an n-sided dice n times, what is the probability that you'll roll a particular side?

You know that the chance of rolling a particular side on the first roll is $\dfrac{1}{n}$. So, you might think that rolling a particular side out of two rolls would be $\dfrac{1}{n} \times \dfrac{1}{n}$. But that is the probability of rolling the same side twice in a row.

Perhaps it is easier to think about the probability of not rolling a side. That would be $\dfrac{5}{6}$, or, in general, $\dfrac{n - 1}{n}$. So the probably of not rolling a particular side twice is:

$\dfrac{n - 1}{n} \times \dfrac{n - 1}{n}$

or for rolling the dice $n$ times:

$\left(\dfrac{n - 1}{n}\right) ^ n$

If we then subtract that from 1 to get the probability of rolling a particular side:

$1 - \left( \dfrac{n - 1}{n} \right) ^ n$

Let's do some simulations to see if this matches what we would expect:

In :
import random

Let's roll a 6-sided dice 6 times:

In :
rolls = [random.randint(1,6) for i in range(6)]
print(rolls)
[5, 6, 2, 1, 4, 4]

And count the number of times it rolled each side:

In :
[rolls.count(i) for i in range(1,7)]
Out:
[1, 1, 0, 2, 1, 1]

And make a function to test, for arbitrary number of sides:

In :
def test(n):
rolls = [random.randint(1,n) for i in range(n)]
print([rolls.count(i) for i in range(1,n + 1)])
In :
test(6)
[1, 2, 0, 0, 0, 3]
In :
test(100)
[0, 1, 3, 4, 0, 0, 2, 0, 2, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 2, 1, 1, 0, 0, 3, 3, 1, 1, 1, 0, 0, 0, 2, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 2, 1, 2, 1, 4, 1, 1, 0, 4, 1, 0, 4, 0, 2, 2, 1, 0, 2, 3, 1, 1, 0, 0, 1, 1, 1, 6, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 3, 0, 0, 3, 1, 0, 1, 0, 3, 0, 1]

Now, let's see how many times it rolled at least one of each number, total those up, and divded by the sides:

In :
def test(n):
rolls = [random.randint(1,n) for i in range(n)]
return sum([1 for count in [rolls.count(i) for i in range(1,n + 1)] if count > 0])/n
In :
test(6)
Out:
0.666666666666667
In :
test(100)
Out:
0.63
In :
test(10000)
Out:
0.6305

Does that match what we would expect?

In :
1 - ((10000 - 1)/10000) ** 10000
Out:
0.63213895356703

Yes, it does! Cool!

In fact, as you make $n$ larger (both experimentally and through the equation) you will see that it gets closer and closer to a particular number.

This is a well-known equivalency:

$\lim_{n \to \infty} ((n - 1)/n) ^ n = 1/e$

So, the probability of rolling a particular side of an n-sided dice after n rolls is:

$1 - 1/e$

In :
import math
print(1 - 1/math.e)
0.632120558829
In [ ]: