random — pseudo-random numbers and choices

The random module is a strict subset of the CPython random module. So, code written in CircuitPython will work in CPython but not necessarily the other way around.

Like its CPython cousin, CircuitPython’s random seeds itself on first use with a true random from os.urandom() when available or the uptime otherwise. Once seeded, it will be deterministic, which is why its bad for cryptography.


Numbers from this module are not cryptographically strong! Use bytes from os.urandom directly for true randomness.


Sets the starting seed of the random number generation. Further calls to random will return deterministic results afterwards.


Returns an integer with k random bits.

random.randrange(start, stop, step=1)

Returns a randomly selected integer from range(start, stop, step).

random.randint(a, b)

Returns a randomly selected integer between a and b inclusive. Equivalent to randrange(a, b + 1, 1)


Returns a randomly selected element from the given sequence. Raises IndexError when the sequence is empty.


Returns a random float between 0 and 1.0.

random.uniform(a, b)

Returns a random float between a and b. It may or may not be inclusive depending on float rounding.