#Day22 - Cheatsheet for the Random Module in Python
Tags: 100daysofcode, codenewbie, python, programming
Published: 2021-04-12 03:42:05

The Random Module is a pretty popular module in Python. Its most common use is to generate random integers. However, it has various other use cases. We will discuss some of them below

- Random()
- Seed
- Generating a Random Integer
- Generating a Random Multiple of an Integer
- Choosing a random element from an iterable
- Shuffling a List
- Pick n random elements from an iterable
- Generate a random GUID

To use any of the functions below, we will first need to import the random module. It is a built-in module in Python

### Random()
This is used to generate a random floating point between 0 and 1
```python
import random

for _ in range(5):
  print(random.random())

'''
OUTPUT
0.49871134487223123
0.06941111334065919
0.02980186878132185
0.06790566062222614
0.6563380053516832
'''
```
### Seed
We can set the seed for the random module. Although the integer, float, element from the list will be random. During each run, it'll be the same random value. However, if you use the random module multiple times in a program, it will return a different random value for each call.

```python
random.seed(12)
```

### Generating a Random Integer
This is probably the most popular use case of the random module. 
```python
import random

for _ in range(5):
  print(random.randint(0,20))

'''
OUTPUT
8
13
4
5
20
'''
```
The first argument is the start number and the second argument is the end number. It is inclusive,i.e randint() might return the start number or end number as well

### Generating a Random Multiple of an Integer
Suppose, we want to generate a random multiple of 10. There are 2 ways to do this
#### Method 1
We use the randint() function and simply multiply the returned value with 10
```python
import random

for _ in range(5):
  print(random.randint(0,20)*10)

'''
OUTPUT
130
20
170
100
200
'''
``` 

#### Method 2
We can use randrange().  We can adjust the start number and end number as needed. It is similar to the randint() function but it takes an additional parameter. It takes the step size. So if we set the step size to 10, it will randomly choose from (0,10,20,30.....)
```python
import random

for _ in range(5):
  print(random.randrange(0,100,10))

'''
OUTPUT
130
20
170
100
200
'''
```

### Choosing a random element from an iterable
We can use the random library to chose a random element from an iterable. Note: It will only work with dictionaries if the dictionary has an integer as a key. Read below to find out why

```python
import random

lst = ["hello" , "world" , "!!!" , "Python" , "Medium" , "Hashnod" , "Twitter"]

tpl = ("hello" , "world" , "!!!" , "Python" , "Medium" , "Hashnod" , "Twitter")

dictionary = {idx: val for idx,val in enumerate(lst)}

print(random.choice(lst))
print(random.choice(tpl))
print(random.choice(dictionary))

'''
OUTPUT
world
Hashnod
Medium
'''
```
The way it works is the following
- First random generates a random integer between 0 and len(iterable)
- It used the generated integer as the index and returns iterabel[index]
As a result of this, it works with dictionaries only if the dictionary has an integer as it's key

### Shuffling a List
We can use the shuffle() function to shuffle a list. The function can NOT be used with a non-mutable object like a tuple. It is an in-place method, i.e it updates the original list.
```python
import random

lst = ["hello" , "world" , "!!!" , "Python" , "Medium"]
for _ in range(5):  
  random.shuffle(lst)
  print(lst)


'''
OUTPUT
['hello', 'Medium', 'world', 'Python', '!!!']
['world', 'hello', 'Medium', 'Python', '!!!']
['!!!', 'world', 'hello', 'Python', 'Medium']
['Python', 'Medium', '!!!', 'hello', 'world']
['!!!', 'hello', 'Medium', 'world', 'Python']
'''
```

### Pick n random elements from an iterable
This is similar to calling the choice() function in a loop n times. Although, this method doesn't work with dictionaries irrespective of whether they have integers as keys or not
```python
import random

lst = ["hello" , "world" , "!!!" , "Python" , "Medium" , "Hashnod" , "Twitter"]

tpl = ("hello" , "world" , "!!!" , "Python" , "Medium" , "Hashnod" , "Twitter")

dictionary = {idx: val for idx,val in enumerate(lst)}

print(random.sample(lst,3))
print(random.sample(tpl,3))


'''
OUTPUT
['!!!', 'Twitter', 'Medium']
['Hashnod', 'Python', '!!!']
'''
```

### Generate a random GUID
We won't be using the random module anymore, instead, we will use the uuid module
```python
import uuid
print(str(uuid.uuid4()))
print(len(str(uuid.uuid4())))

'''
OUTPUT
6dc2ad9b-2707-45ba-b5e8-5e2eb8a1dfe9
36
'''
```
uuid4() returns an object of type UUID but we can use str() to typecast it. By default, it produces a 32 character string. We can use string operations to modify the GUID. 
```python
import uuid
print(str(uuid.uuid4())[0:16])
print(len(str(uuid.uuid4())[0:16]))

'''
OUTPUT
4bde04c7-d749-40
16
'''
```
The above code generates a 16 character GUID.