# The dice problem

Suppose I have a box of dice that contains a 4-sided die, a 6-sided die, an 8-sided die, a 12-sided die, and a 20-sided die. If you have ever played Dungeons & Dragons, you know what I am talking about.

Suppose I select a die from the box at random, roll it, and get a 6. What is the probability that I rolled each die?

Let me suggest a three-step strategy for approaching a problem like this.

1. Choose a representation for the hypotheses.

2. Choose a representation for the data.

3. Write the likelihood function.

In previous examples I used strings to represent hypotheses and data, but for the die problem I’ll use numbers. Specifically, I’ll use the integers 4, 6, 8, 12, and 20 to represent hypotheses:

`    suite = Dice([4, 6, 8, 12, 20])`

And integers from 1 to 20 for the data. These representations make it easy to write the likelihood function:

```class Dice(Suite):
def Likelihood(self, data, hypo):
if hypo < data:
return 0
else:
return 1.0/hypo```

Here’s how `Likelihood` works. If `hypo<data`, that means the roll is greater than the number of sides on the die. That can’t happen, so the likelihood is 0.

Otherwise the question is, “Given that there are `hypo` sides, what is the chance of rolling `data`?” The answer is `1/hypo`, regardless of `data`.

Here is the statement that does the update (if I roll a 6):

`    suite.Update(6)`

And here is the posterior distribution:

```4 0.0
6 0.392156862745
8 0.294117647059
12 0.196078431373
20 0.117647058824```

After we roll a 6, the probability for the 4-sided die ...

Get Think Bayes now with the O’Reilly learning platform.

O’Reilly members experience live online training, plus books, videos, and digital content from nearly 200 publishers.