This article will outline several methods for generating random numbers and strings in the Python programming language.

Generating random values is a common and important task when programming almost any kind of application of moderate complexity.

Random strings and numbers are used to generate unique identifiers (e.g., for the short URLs in URL shortening services), for identifying unique records in a database, and (most importantly) are frequently used to determine the behavior of gameplay elements in video games (for example, simulating a coin flip, or generating random terrain).

The examples in this article are written for **Python 3**.

## Generating Random Numbers

There are several ways to generate random numbers depending on what kind of random number you want to generate.

Python 3 includes the *random* library, which contains many functions for generating random values, which will be used for the following examples. There’s no need to install anything extra – it comes with Python 3.

## Generating Random Integers with randint()

The **randint()** function generates a random integer and has the following syntax:

randint(start, end)

The function will return an integer number between (and including) the **start** and **end** numbers supplied.

The below example generates a random number between 2 and 6 using the **randint()** function and prints it using the **print()** function:

import random print(random.randint(2, 6))

As a result, a random number between 2 and 6 will be printed.

## Generating a Random Float Value with random()

*A floating-point number is any rational number – it doesn’t have to be an integer, and the decimal place can appear anywhere in the number.*

The **random()** function will generate a random floating-point number between 0 and 1 and has the following syntax:

import random print(random.random())

A random floating-point number will be printed, for example:

0.59654919358

## Picking a Random Integer from a Range of Numbers

Want to pick a random integer from a range of numbers? **randrange()** can do that. The syntax is:

randrange(start, stop[, step])

Note that:

**randrange()**takes two parameters, with a third optional*start*and*stop*must be supplied, and specify the range of integers to pick from- The optional
*step*parameter limits the numbers in the range to those in which the number is either the*start*value or the*start*value plus a multiple of*step.*

For example:

import random print(random.randrange(0, 20, 2))

The above example will pick a number from between the number range **0** to **20** inclusive. However, as the *step* parameter is supplied with a value of **2**, only the value **0** or **even numbers** from the range will be returned.

## Generating Random Bytes/Strings

From Python version 3.9, the **randbytes()** function can be used to generate a series of random bytes of a given length – this can then be used as a randomized string. The syntax for **randbytes()** is:

randbytes(n)

Where *n* is the number of random bytes to generate. Here’s an example:

import random randomString = randbytes(5).decode() print(randomString)

Above, **randbytes** is used to generate random bytes with a length of 5. The **decode()** method is then used to convert the bytes to a string. The default encoding in Python 3 is UTF-8.

## Without randbytes()

If you’re using an older version of Python which doesn’t include the **randbytes()** function, you can generate a random string using the **choice()** function.

The **choice()** function works much like the **randrange()** function described above – it chooses a random value from a list of supplied values.

import random alphabet = string.ascii_letters + string.digits return ''.join(random.choice(alphabet) for i in range(n))

As a few things are happening at once in the above example, I’ll let the comments do the explaining.

## Security

If you want to generate random input for authentication or security purposes, ensure you use functions designed specifically for that purpose. Random input, despite the name, can be predictable. Special libraries exist to ensure that secret data is cryptographically secure (or as secure as possible).

The Python *secrets* library contains functions analogous to the above but with output that can be used in these secure scenarios:

https://docs.python.org/3/library/secrets.html

That said – if you’re building something public-facing, you should not build your own authentication – use a pre-built package made by an expert. Security is too important to wing the implementation using online tutorials.

For more about the *random* library, see the link below: