Python random Module Overview
The random module is a built-in Python module for working with pseudo-random values.
Beginners often use it to:
- generate random numbers
- choose a random item from a list
- shuffle a list
- pick several random items
It is useful for games, simple scripts, testing, and practice programs.
It is not the right tool for passwords, secure tokens, or anything security-related. For that, use the secrets module instead.
Quick example
import random
print(random.randint(1, 10))
items = ["apple", "banana", "cherry"]
print(random.choice(items))
Use randint() for a random whole number in a range, and choice() to pick one item from a list.
What the random module is
Python’s random module is part of the standard library, so you do not need to install anything.
It gives you functions for:
- random numbers
- random choices from sequences
- random sampling
- shuffling lists
The values are pseudo-random. That means they are produced by an algorithm, but they behave randomly enough for most beginner programs.
Use random for:
- small games
- classroom examples
- simple automation
- testing with sample data
Do not use it for:
- passwords
- authentication tokens
- security-sensitive code
When beginners use it most
Beginners usually use random when they want to:
- pick a random number in a range
- choose a random item from a list
- shuffle a list into a new order
- pick multiple random items
- create simple game behavior
For example, you might:
- roll a die
- choose a random student name
- shuffle quiz questions
- build a number guessing game
Functions to know first
These are the most common functions in the random module.
random.random()
Returns a floating-point number from 0.0 up to but not including 1.0.
import random
print(random.random())
Possible output:
0.472918374
Use this when you want a random decimal value.
random.randint(a, b)
Returns a random whole number from a to b, including both ends.
import random
print(random.randint(1, 6))
Possible output:
4
This is a common choice for dice rolls and number guessing games.
If you want a deeper explanation, see random.randint() explained.
random.randrange(start, stop[, step])
Works like range(), but returns one random value from that range.
import random
print(random.randrange(0, 10))
print(random.randrange(0, 10, 2))
Possible output:
7
4
Important detail:
random.randrange(0, 10)can return0through9- it does not include
10
This is one of the main differences from randint().
random.choice(seq)
Returns one random item from a sequence such as a list, tuple, or string.
import random
fruits = ["apple", "banana", "cherry"]
print(random.choice(fruits))
Possible output:
banana
It also works with strings:
import random
print(random.choice("python"))
Possible output:
t
For more detail, see random.choice() explained.
random.choices(seq, k=n)
Returns multiple random items. Values can repeat.
import random
colors = ["red", "blue", "green"]
print(random.choices(colors, k=5))
Possible output:
['blue', 'red', 'blue', 'green', 'blue']
Use this when repeats are allowed.
random.sample(seq, k=n)
Returns multiple unique random items.
import random
numbers = [1, 2, 3, 4, 5]
print(random.sample(numbers, k=3))
Possible output:
[5, 2, 1]
Use this when you want random items with no duplicates.
random.shuffle(x)
Shuffles a list in place.
import random
data = [1, 2, 3, 4, 5]
random.shuffle(data)
print(data)
Possible output:
[3, 5, 1, 4, 2]
Important: shuffle() changes the original list. It does not create a new one.
For more detail, see random.shuffle() explained.
Important beginner rules
Keep these rules in mind when using random:
- Always import the module first with
import random - Use
choice()only with a non-empty sequence shuffle()changes the original listsample()cannot choose more unique items than the sequence containsrandint()includes both the start and end values
Here is a simple example that combines several functions:
import random
names = ["Ana", "Ben", "Cara", "Drew"]
print("Random name:", random.choice(names))
print("Random number:", random.randint(1, 10))
print("Two unique names:", random.sample(names, k=2))
random.shuffle(names)
print("Shuffled list:", names)
Pseudo-random vs truly random
The random module produces values that look random, but they come from a mathematical process.
For most beginner programs, that is completely fine.
Use random for:
- games
- practice projects
- simulations
- random test data
Use the secrets module instead for:
- passwords
- reset links
- access tokens
- security codes
Common problems and confusion
Here are some common mistakes beginners make with random.
Forgetting to import random
If you use random.randint() without importing the module first, you will get a NameError.
print(random.randint(1, 10))
Fix it by adding:
import random
If needed, read how to fix NameError: name is not defined.
Using choice() with an empty list
This causes an error because there is nothing to choose.
import random
items = []
print(random.choice(items))
Make sure the sequence is not empty before calling choice().
import random
items = ["apple", "banana"]
if items:
print(random.choice(items))
Expecting shuffle() to return a new list
This is a very common mistake:
import random
my_list = [1, 2, 3]
result = random.shuffle(my_list)
print(result)
Output:
None
Why? Because shuffle() changes the original list directly.
Correct version:
import random
my_list = [1, 2, 3]
random.shuffle(my_list)
print(my_list)
Mixing up randint() and randrange()
These two functions are similar, but they do not behave exactly the same.
import random
print(random.randint(1, 10)) # can return 10
print(random.randrange(1, 10)) # cannot return 10
This difference can cause off-by-one mistakes.
Common mistakes
These are some beginner mistakes to watch for:
- Using
random.choice()with an empty list - Writing
random(1, 10)instead ofrandom.randint(1, 10) - Assigning
result = random.shuffle(my_list)and expecting a shuffled list back - Using
randomfor passwords or secure tokens - Forgetting that
randint()includes the end value
If you work with lists a lot, it helps to understand how they behave first. See Python lists explained for beginners.
Useful test commands
You can quickly test the module from the command line:
python --version
python -c "import random; print(random.randint(1, 10))"
python -c "import random; data=[1,2,3]; random.shuffle(data); print(data)"
python -c "import random; print(random.choice(['a','b','c']))"
FAQ
Do I need to install the random module?
No. random is part of Python's standard library.
What is the difference between randint() and randrange()?
randint(a, b) includes both ends.
randrange() works more like range() and usually excludes the stop value.
Why does shuffle() return None?
Because it changes the original list directly instead of creating a new one.
Can random.choice() work with strings?
Yes. A string is a sequence, so choice() can return one random character.
Should I use random for passwords?
No. Use the secrets module for security-related values.
See also
- random.randint() explained
- random.choice() explained
- random.shuffle() explained
- Python lists explained for beginners
- How to fix NameError: name is not defined
- How to fix IndexError: list index out of range
Next, read a focused function page like random.randint() or random.choice(), then try a small beginner project such as a number guessing game.