## 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)`

generates`12`

`my_random(3)`

generates`389`

`my_random(10)`

generates`8943496710`

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 for`d=3`

.`int('9'*d))`

creates the end index that’s included in`randint()`

such as`999`

for`d=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.