Coding Challenge
⚔️ Challenge: Given an integer d
representing the number of digits. How to create a random number with d
digits in Python?
Here are three examples:
my_random(2)
generates12
my_random(3)
generates389
my_random(10)
generates8943496710
I’ll discuss three interesting methods to accomplish this easily in Python—my personal favorite is Method 2!
Shortest Solution with randint()
Let’s start with an easy hand-coded observation:
The easiest way to create a random number with two digits is to use random
‘s randint(10, 99)
, with three digits is randint(100,999)
, and with four digits is randint(1000,9999)
.
Here’s the same example in Python code:
from random import randint # Create random number with two digits (d=2): print(randint(10, 99)) # Create random number with three digits (d=3): print(randint(100, 999)) # Create random number with three digits (d=3): print(randint(1000, 9999))
This solution can be generalized by using the one-liner random.randint(int('1'+'0'*(d-1)), int('9'*d))
that generates the start and end values on the fly, based on the number of digits d
.
I used simple string arithmetic to define the start and end index of the random range:
int('1'+'0'*(d-1))
creates the start index such as 100 ford=3
.int('9'*d))
creates the end index that’s included inrandint()
such as999
ford=3
.
Here’s the basic Python example:
import random def my_random(d): ''' Generates a random number with d digits ''' return random.randint(int('1'+'0'*(d-1)), int('9'*d)) for i in range(1, 10): print(my_random(i)) ''' Output: 8 82 296 5909 90957 227691 1348638 61368798 160959002 '''
Cleanest Solution with randrange()
The cleanest solution is based on the randrange()
function from the random
module that takes the start and end index as input and generates a random number in between.
Unlike randint()
, the end index is excluded in randrange()
, so we have an easier way to construct our range for the d
-digit random number problem: random.randrange(10**(d-1), 10**d)
.
Here’s an example:
import random def my_random(d): ''' Generates a random number with d digits ''' return random.randrange(10**(d-1), 10**d) for i in range(1, 10): print(my_random(i)) ''' Output: 7 64 872 2440 39255 979369 6897920 83589118 707920991 '''
An Iterative Solution Aggregating Outputs of Single-Digit Random Function Calls
You can also use a one-liner to repeatedly execute the random.randint()
function for each digit. To combine the digits, you convert each digit to a string, pass them into the string.join()
function to get one string with d
characters, and convert this string back to an integer:
int(''.join(str(random.randint(0,9)) for _ in range(d)))
Here’s this exact approach in a Python code snippet:
import random def my_random(d): ''' Generates a random number with d digits ''' return int(''.join(str(random.randint(0,9)) for _ in range(d))) for i in range(1, 10): print(my_random(i)) ''' Output: 6 92 135 156 95865 409722 349673 31144072 439469934 '''
Summary
Thanks for reading through the whole article—I hope you got some value out of it.
Here’s again a summary of how to best generate a random number with d
digits in Python:
random.randint(int('1'+'0'*(d-1)), int('9'*d))
random.randrange(10**(d-1), 10**d)
int(''.join(str(random.randint(0,9)) for _ in range(d)))
Personally, I like Method 2 the most because it’s short, concise, and very efficient!

While working as a researcher in distributed systems, Dr. Christian Mayer found his love for teaching computer science students.
To help students reach higher levels of Python success, he founded the programming education website Finxter.com that has taught exponential skills to millions of coders worldwide. He’s the author of the best-selling programming books Python One-Liners (NoStarch 2020), The Art of Clean Code (NoStarch 2022), and The Book of Dash (NoStarch 2022). Chris also coauthored the Coffee Break Python series of self-published books. He’s a computer science enthusiast, freelancer, and owner of one of the top 10 largest Python blogs worldwide.
His passions are writing, reading, and coding. But his greatest passion is to serve aspiring coders through Finxter and help them to boost their skills. You can join his free email academy here.