**by BehindJava**

# What is Math and Random Modules in Python with Syntax and Examples

In this tutorial we are going to learn about Math and Random Modules in Python with Syntax and Examples.

Python comes with a built in math module and random module. In this tutorial we will give a brief tour of their capabilities. Usually you can simply look up the function call you are looking for in the online documentation.

- Math Module
- Random Module We won’t go through every function available in these modules since there are so many, but we will show some useful ones.

**Rounding Numbers**

```
value = 4.35
math.floor(value)
4
math.ceil(value)
5
round(value)
4
```

**Mathematical Constants**

```
Math.pi
3.141592653589793
from math import pi
pi
3.141592653589793
math.e
2.718281828459045
math.tau
6.283185307179586
math.inf
inf
math.nan
nan
```

**Logarithmic Values**

```
math.e
2.718281828459045
# Log Base e
math.log(math.e)
1.0
# Will produce an error if value does not exist mathmatically
math.log(0)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-12-7563e0a48092> in <module>()
----> 1 math.log(0)
ValueError: math domain error
math.log(10)
2.302585092994046
math.e ** 2.302585092994046
10.000000000000002
```

**Custom Base**

```
# math.log(x,base)
math.log(100,10)
2.0
10**2
100
```

**Trigonometrics Functions**

```
# Radians
math.sin(10)
-0.5440211108893698
math.degrees(pi/2)
90.0
math.radians(180)
3.141592653589793
```

# Random Module

Random Module allows us to create random numbers. We can even set a seed to produce the same random set every time.

The explanation of how a computer attempts to generate random numbers is beyond the scope of this course since it involves higher level mathmatics. But if you are interested in this topic check out:

- https://en.wikipedia.org/wiki/Pseudorandom_number_generator
- https://en.wikipedia.org/wiki/Random_seed

### Understanding a seed

Setting a seed allows us to start from a seeded psuedorandom number generator, which means the same random numbers will show up in a series. Note, you need the seed to be in the same cell if you’re using jupyter to guarantee the same results each time. Getting a same set of random numbers can be important in situations where you will be trying different variations of functions and want to compare their performance on random values, but want to do it fairly (so you need the same set of random numbers each time).

```
import random
random.randint(0,100)
62
random.randint(0,100)
10
# The value 101 is completely arbitrary, you can pass in any number you want
random.seed(101)
# You can run this cell as many times as you want, it will always return the same number
random.randint(0,100)
74
random.randint(0,100)
24
# The value 101 is completely arbitrary, you can pass in any number you want
random.seed(101)
print(random.randint(0,100))
print(random.randint(0,100))
print(random.randint(0,100))
print(random.randint(0,100))
print(random.randint(0,100))
74
24
69
45
59
```

**Random Integers**

```
random.randint(0,100)
6
```

**Random with Sequences**
Grab a random item from a list

```
mylist = list(range(0,20))
mylist
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
random.choice(mylist)
12
mylist
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
```

**Sample with Replacement**

Take a sample size, allowing picking elements more than once. Imagine a bag of numbered lottery balls, you reach in to grab a random lotto ball, then after marking down the number, you place it back in the bag, then continue picking another one.

```
random.choices(population=mylist,k=10)
[15, 14, 17, 8, 17, 2, 19, 17, 6, 1]
```

**Sample without Replacement**
Once an item has been randomly picked, it can’t be picked again. Imagine a bag of numbered lottery balls, you reach in to grab a random lotto ball, then after marking down the number, you leave it out of the bag, then continue picking another one.

```
random.sample(population=mylist,k=10)
[17, 19, 11, 14, 1, 3, 4, 10, 5, 15]
```

*Shuffle a list*
Note: This effects the object in place!

```
# Don't assign this to anything!
random.shuffle(mylist)
mylist
[9, 11, 7, 12, 10, 16, 0, 2, 18, 13, 3, 5, 17, 1, 15, 6, 14, 19, 4, 8]
```

**Random Distributions**
*Uniform Distribution*

```
# Continuous, random picks a value between a and b, each value has equal change of being picked.
random.uniform(a=0,b=100)
23.852305703497635
```

*Normal/Gaussian Distribution*

```
random.gauss(mu=0,sigma=1)
-0.21390381464435643
```

**Final Note:** If you find yourself using these libraries a lot, take a look at the NumPy library for Python, covers all these capabilities with extreme efficiency.