Robert Johns | 07 Feb, 2025
Fact checked by Jim Markus

Build a Dice Roll Generator in Python (Step-by-Step Guide)

Want to improve your Python skills while building a fun, interactive project? In this tutorial, we’ll create a Dice Roll Generator that simulates rolling one or two dice.

This project is beginner-friendly and introduces important programming concepts like:

- Using the random module to generate random numbers
- Handling user input validation
- Using loops and conditional statements
- Clearing the screen dynamically with the os module

By the end, you’ll have a working Python dice roller that you can customize for board games, RPGs, or just for fun. Let’s get started! 🚀

Step 1: Setting Up the Project

Before we start coding, let’s set up our Python project:

1. Make sure Python is installed on your computer. If not, download it from the official Python website.
2. Open your favorite code editor or IDE.
3. Create a new Python file, for example, dice_roll.py.

Great, now, let's dive head first into our Python editor to get this build started.

Step 2: Understanding How the Dice Roll Generator Works

The Dice Roll Generator follows these steps:

- The program asks how many dice (1 or 2) the user wants to roll.
- It simulates rolling dice using random.randint(1, 6).
- If rolling two dice, it also calculates the total value.
- The program clears the screen after each roll for a cleaner interface.
- It asks the user if they want to roll again.

Step 3: Importing Required Modules

We need two Python modules:

import random  # For generating random numbers
import os  # To clear the screen

Why Do We Use These Modules?

  • randomPython random generates a random number between 1 and 6, simulating a dice roll.
  • os → Clears the screen between rolls to make the game more readable.

Step 4: Asking the User How Many Dice to Roll

Before rolling, we ask the user whether they want to roll one or two dice.

def num_die():
    while True:
        try:
            num_dice = input('Number of dice (1 or 2): ')
            valid_responses = ['1', 'one', 'two', '2']
            if num_dice not in valid_responses:
                raise ValueError('1 or 2 only')
            else:
                return num_dice
        except ValueError as err:
            print(err)

How It Works

- Uses a while loop to keep asking until a valid input is entered.
- Accepts multiple valid responses ('1', 'one', '2', 'two').
- Raises a ValueError if the input is invalid.

Step 5: Writing the Dice Rolling Function

Now, let’s write the function that simulates rolling the dice.

def roll_dice():
    min_val = 1
    max_val = 6
    roll_again = 'y'

    while roll_again.lower() == 'yes' or roll_again.lower() == 'y':
        os.system('cls' if os.name == 'nt' else 'clear')
        amount = num_die()

        if amount == '2' or amount == 'two':
            print('Rolling the dice...')
            dice_1 = random.randint(min_val, max_val)
            dice_2 = random.randint(min_val, max_val)

            print('The values are:')
            print('Dice One: ', dice_1)
            print('Dice Two: ', dice_2)
            print('Total: ', dice_1 + dice_2)

        else:
            print('Rolling the die...')
            dice_1 = random.randint(min_val, max_val)
            print(f'The value is: {dice_1}')

        roll_again = input('Roll Again? ')

How It Works:

- Clears the screen at the start of every roll.
- Asks how many dice the user wants to roll.
- Generates a random number between 1 and 6 for each dice.
- If rolling two dice, it displays both values and their sum.
- Keeps rolling until the user decides to stop.

The core functionality of our Dice Roll Generator is handled in the roll_dice() function.

There's a lot happening here, with f-strings, error handling, and more, so let's break this down in detail:

Using a while Loop for Continuous Rolling

while roll_again.lower() == 'yes' or roll_again.lower() == 'y':
  • Keeps the game running until the user decides to stop.
  • .lower() ensures that input is case insensitive ("Y", "y", and "yes" all work).

Clearing the Screen for Better Readability

os.system('cls' if os.name == 'nt' else 'clear')
  • Prevents screen clutter by clearing old dice rolls.
  • Works on Windows (cls) and Mac/Linux (clear).

Generating Random Numbers Using random.randint()

dice_1 = random.randint(min_val, max_val)
  • Simulates rolling a dice by generating a number between 1 and 6.
  • If rolling two dice, we generate two separate random numbers.

Using Conditional Statements for Multiple Dice

if amount == '2' or amount == 'two':
    dice_1 = random.randint(min_val, max_val)
    dice_2 = random.randint(min_val, max_val)
    print('Total: ', dice_1 + dice_2)
  • Allows the player to choose between one or two dice.
  • Adds both dice values when rolling two dice.

Handling User Input Validation with Try-Except

When taking user input, we must ensure they enter a valid number of dice with a try-except block.

try:
    num_dice = input('Number of dice: ')
    if num_dice not in valid_responses:
        raise ValueError('1 or 2 only')
  • Ensures the user only enters valid responses.
  • Prevents errors by handling incorrect inputs gracefully.

Step 6: Running the Game

To ensure the game starts correctly, we add:

if __name__ == '__main__':
    roll_dice()

Why Is This Needed?

- Ensures the game runs only when executed directly, not when imported.
- Follows Python best practices for script execution.

Final Code: Dice Roll Generator

import random
import os

def num_die():
    while True:
        try:
            num_dice = input('Number of dice (1 or 2): ')
            valid_responses = ['1', 'one', 'two', '2']
            if num_dice not in valid_responses:
                raise ValueError('1 or 2 only')
            else:
                return num_dice
        except ValueError as err:
            print(err)

def roll_dice():
    min_val = 1
    max_val = 6
    roll_again = 'y'

    while roll_again.lower() == 'yes' or roll_again.lower() == 'y':
        os.system('cls' if os.name == 'nt' else 'clear')
        amount = num_die()

        if amount == '2' or amount == 'two':
            print('Rolling the dice...')
            dice_1 = random.randint(min_val, max_val)
            dice_2 = random.randint(min_val, max_val)
            print('The values are:')
            print('Dice One:', dice_1)
            print('Dice Two:', dice_2)
            print('Total:', dice_1 + dice_2)
        else:
            print('Rolling the die...')
            dice_1 = random.randint(min_val, max_val)
            print(f'The value is: {dice_1}')

        roll_again = input('Roll Again? ')

if __name__ == '__main__':
    roll_dice()

Wrapping Up

Congratulations! You’ve built a Dice Roll Generator in Python!

This project helped you learn:
- Random Number Generation (random.randint())
- User Input Validation (try-except)
- Loops (while) for Continuous Play
- Conditional Statements (if-elif-else)
- Clearing the Screen (os.system())

Next Steps: Improve Your Game!

- Let users set custom dice values (e.g., 8-sided dice).
- Add a multi-player mode.
- Keep score tracking over multiple rolls.

The best way to learn Python is by building fun projects—so keep experimenting!

By Robert Johns

Technical Editor for Hackr.io | 15+ Years in Python, Java, SQL, C++, C#, JavaScript, Ruby, PHP, .NET, MATLAB, HTML & CSS, and more... 10+ Years in Networking, Cloud, APIs, Linux | 5+ Years in Data Science | 2x PhDs in Structural & Blast Engineering

View all post by the author

Subscribe to our Newsletter for Articles, News, & Jobs.

I accept the Terms and Conditions.

Disclosure: Hackr.io is supported by its audience. When you purchase through links on our site, we may earn an affiliate commission.

In this article

Learn More

Please login to leave comments