Python:
Generating random numbers
How to:
Python provides the random
module that helps in generating random numbers for various uses. Here’s how to get started:
Importing the module
import random
Generating a Random Integer Between any two numbers.
random_integer = random.randint(1, 10) print(random_integer)
Sample output:
7
Generating a Float Between 0 and 1.
random_float = random.random() print(random_float)
Sample output:
0.436432634653
If you need a float in a different range, multiply:
random_float_range = random.random() * 5 # 0 to 5 print(random_float_range)
Sample output:
3.182093745
Picking a Random Element from a List
greetings = ['Hello', 'Hi', 'Hey', 'Hola', 'Bonjour'] print(random.choice(greetings))
Sample output:
Hola
Shuffling a List Perfect for card games or any application needing to randomize order.
numbers = list(range(10)) random.shuffle(numbers) print(numbers)
Sample output:
[2, 5, 0, 4, 9, 8, 1, 7, 6, 3]
Deep Dive
The random
module in Python uses a pseudorandom number generator (PRNG), specifically the Mersenne Twister algorithm, which is good for general-purpose applications but not suitable for cryptographic purposes due to its predictability if enough outputs are observed. The secrets
module, introduced in Python 3.6, offers a better alternative for generating cryptographically strong random numbers, especially useful in security-sensitive applications. For example, generating a secure, random token for a password reset link:
import secrets
token = secrets.token_hex(16)
print(token)
Historically, generating random numbers that are truly random has been a challenge in computing, with early methods relying on physical phenomena or manually entered seeds. The development and adoption of algorithms like Mersenne Twister (used by default in Python’s random
module until at least my last knowledge update in 2023) marked significant progress. However, the ongoing search for more secure and efficient algorithms has led to the inclusion of the secrets
module for cryptography-related tasks. This evolution reflects the growing importance of security in software development and the need for more robust randomness in applications ranging from encryption to secure token generation.