**Randomness**

Many of you may have played

**Lotto 6/49**, where predicting those six valuable numbers is impossible...
even with all the statistics in the world, only

*a stroke of luck!* can lead us to guess them, considering
there are

**13,983,816** possible combinations:

Above are

**6** random numbers between

**1** and

**69**, displayed each time you refresh the page!

*Good luck!*
Similarly, computer games contain

**random numbers**, so each time it seems everything is different,

*a new scenario*, a new set of colors, balls, or enemies appearing from different positions:

**Bot Kyle** from

**CS:GO** ... often snipes you with the

**AWP** from classic positions on the map, doesn't he? Of course, he has certain locations he estimates based on many factors, there are advanced A.I. algorithms, but... he's often in different spots, right?

A

**random number** is essentially one that cannot be predicted by the user. In fact, behind it, there is

**a generator**
(

**a function**) that gives us such a number each time it is called. They are

*pseudo-random* because they are created through

*complex mathematical calculations*.

**Very cool!** The website [

**random.org**] uses

*atmospheric noise* and

*complex calculations* to
generate true random numbers, and the site is used in many fields of activity.

**How do we generate them in Python 3?**

The set of functions that the

**Python** language contains

*by default* is not very large, but it is extended through

**modules** as you have seen in the case of [

**turtle**].

One of these is

**random**, created specifically to

*generate random numbers*.
To use its functions, at the beginning of the program we will write "

**import random**",
which loads the module and gives us access to it:

**IMPORTANT NOTES**
We imported the

**random** module, then printed sets of five random numbers using the

**for** statement for iterations.

To call a function from a module, we write:

**module_name.desired_function**
First, we used the

**random()** function, which generates

*a real number* of type

**float**,
in the range

**[0.0, 1.0)** – the function does not accept parameters.

Of course, these numbers are not very useful to us... How can we display random integers between

**0** and

**100**? Or between

**0** and

**10000**?

**Integers**

If

**0.483421** was generated... Multiplying it by

**100**, we get

**48.3421**,
which then rounded to an integer becomes

**48**.

Multiplying it by

**10000** and rounding it, we get

**4834**...

But from

**1** to

**100**? Simply, we add

**1** to the value generated up to

**99**, as shown below:

**round(random.random() * 99 + 1)**
**Integers from an Interval**

How can we generate integers between

**20** and

**70**, for example?

We can print, as before, numbers between

**0** and

**50**. Just add

**20** to each number:

**round(20 + random.random() * 50)**
*Let's examine other functions of the ***random** module in the following sections.
*Proceed to the next page.*