fartgeek
fartgeek

Reputation: 168

How to add dice depending on a variable?

(Title is a work in progress. If you have any better suggestions, let me know.)

I am working on a Risk (board game) probability calculator. I have a generator which goes through every possible dice configuration to analyze it. I have an issue. I would like my code to be flexible enough that it can analyze many different amounts of dice. However, in order to do that, I would need to manually add a for loop for every extra die, to generate its rolls. My solution is such:

def generate_dice(dice_needed):
    # there are always at least two dice
    for first in range(1, 7):
        for second in range(1, 7):

            # if there are more, we keep going
            if dice_needed != 2:
                for third in range(1, 7):
                    if dice_needed != 3:
                        for fourth in range(1, 7):
                            if dice_needed != 4:
                                for fifth in range(1, 7):
                                    yield first, second, third, fourth, fifth
                            yield first, second, third, fourth
                    yield first, second, third
            yield first, second

There are two issues with this approach:

Is there a better way to add dice amount flexibility into my code?

Upvotes: 1

Views: 32

Answers (1)

BrokenBenchmark
BrokenBenchmark

Reputation: 19253

You can use itertools.product():

from itertools import product

dice_needed = 2
for result in product(list(range(1, 7)), repeat=dice_needed):
    print(result)

This outputs (only first three / last three lines of output are shown below):

(1, 1)
(1, 2)
(1, 3)
...
(6, 4)
(6, 5)
(6, 6)

Upvotes: 1

Related Questions