How to Get a Random Number in Python

What you’ll build or solve

You’ll generate random integers and floats in Python, pick a random item from a list, and set a seed for repeatable results.

When this approach works best

This approach works best when you need to:

  • Simulate chance in small programs, like dice rolls, coin flips, or simple games.
  • Randomly sample or shuffle data for testing, like picking demo users or shuffling quiz questions.
  • Add variety to output, like choosing a random message or suggestion.

Avoid this approach when:

  • You need security, such as passwords, tokens, or verification codes. Use the secrets module instead.
  • You need reproducible data across teams without managing seeds. Consider storing generated values instead.

Prerequisites

  • Python 3 installed
  • You know how to run Python code
  • You know basic variables and lists

Step-by-step instructions

1) Import the random module

Most random number functions you want are in the random module.

import random

2) Get a random integer

Use randint(a, b) when you want both ends included.

import random

roll = random.randint(1, 6)
print(roll)

This gives a number from 1 to 6, including both 1 and 6.


3) Get a random float

Use random.random() for a float between 0.0 and 1.0.

import random

x = random.random()
print(x)

If you want a float in a specific range, use uniform(a, b).

import random

temp = random.uniform(18.5, 24.0)
print(temp)

4) Pick a random item from a list

Use choice() to select one element.

import random

colors = ["blue", "green", "red"]
pick = random.choice(colors)
print(pick)

If the list is empty, choice() raises an error. Always make sure the list has items.


5) Shuffle a list in place

Use shuffle() to reorder the list itself.

import random

cards = ["A", "K", "Q", "J"]
random.shuffle(cards)
print(cards)

What to look for:

shuffle() returns None. The list changes in place.


6) Get repeatable results with a seed

Set a seed when you want the same “random” sequence each run, such as in tests or demos.

import random

random.seed(123)

print(random.randint(1, 10))
print(random.randint(1, 10))
print(random.randint(1, 10))

With the same seed and the same sequence of random calls, you get the same results.


7) Use randrange() when you need an excluded end

Use randrange(start, stop) when you want stop excluded, which matches how range() works.

import random

n = random.randrange(1, 7)  # 1 to 6
print(n)

What to look for:

If you want numbers from 1 to 6, the stop must be 7 because it is not included.


Examples you can copy

1) Roll two dice and sum them

import random

die1 = random.randint(1, 6)
die2 = random.randint(1, 6)

total = die1 + die2
print("Rolls:", die1, die2)
print("Total:", total)

2) Pick a random daily prompt

import random

prompts = [
    "Write one small function.",
    "Refactor one variable name.",
    "Add one test case.",
    "Fix one warning in your editor.",
]

print(random.choice(prompts))

3) Shuffle questions for a quiz

import random

questions = [
    "What does len() return?",
    "What is a list index?",
    "What does import do?",
    "What is a function?",
]

random.shuffle(questions)

for q in questions:
    print(q)

Common mistakes and how to fix them

Mistake 1: Forgetting to import random

You might write:

n = random.randint(1, 10)
print(n)

Why it breaks:

Python does not know what random is, so you get a NameError.

Correct approach:

import random

n = random.randint(1, 10)
print(n)

Mistake 2: Off-by-one ranges with randrange()

You might write:

import random

n = random.randrange(1, 6)  # expecting 1 to 6
print(n)

Why it breaks:

randrange(1, 6) stops before 6, so you never get 6.

Correct approach:

import random

n = random.randrange(1, 7)  # 1 to 6
print(n)

Mistake 3: Using random for security

You might write:

import random

code = random.randint(100000, 999999)
print(code)

Why it breaks:

The random module is not designed for security-sensitive uses.

Correct approach:

import secrets

code = secrets.randbelow(900000) + 100000
print(code)

Troubleshooting

If you see NameError: name 'random' is not defined, add import random at the top of your file.

If your range never returns the top number, check if you used randrange() and forgot that the end is excluded.

If you get IndexError with choice(), your list is probably empty. Print len(your_list) before calling choice().

If results change between runs in a test, set a seed with random.seed(...) and keep the order of random calls the same.

If you are generating passwords or tokens, switch to secrets instead of random.


Quick recap

  • Use random.randint(a, b) for an integer where both ends are included.
  • Use random.random() for 0.0 to 1.0, or random.uniform(a, b) for a custom float range.
  • Use random.choice(list) to pick one item, and random.shuffle(list) to reorder a list.
  • Use random.seed(value) for repeatable results.
  • Use random.randrange(start, stop) when you want an excluded end, and use secrets for security.