Python provides a module random that helps with tasks like this. You can take a look at it in the documentation. Here are the key things we can do with it.
The randrange function generates an integer between its lower and upper argument where the lower bound is included, but the upper bound is excluded. So, randrange(1,7) will include numbers from 1-6. If you omit the first parameter it is assumed to be 0 so randrange(10) will give you numbers from 0-9. All the values have an equal probability of occurring (i.e. the results are uniformly distributed).
The random() function returns a floating point number in the range [0.0, 1.0) β the square bracket means βclosed interval on the leftβ and the round parenthesis means βopen interval on the rightβ. In other words, 0.0 is possible, but all returned numbers will be strictly less than 1.0. It is usual to scale the results after calling this method, to get them into a range suitable for your application.
In the case shown below, weβve converted the result of the random() method call to a number in the range [0.0, 5.0). Once more, these are uniformly distributed numbers β numbers close to 0 are just as likely to occur as numbers close to 3, or numbers close to 5. If you continue to press the run button you will see random values between 0.0 and up to but not including 5.0.
It is important to note that random number generators are based on a deterministic algorithm β repeatable and predictable. So theyβre called pseudo-random generators β they are not genuinely random. They start with a seed value. Each time you ask for another random number, youβll get one based on the current seed attribute, and the state of the seed (which is one of the attributes of the generator) will be updated. The good news is that each time you run your program, the seed value is likely to be different meaning that even though the random numbers are being created algorithmically, you will likely get random behavior each time you execute.
Another useful function is random.choice() which requires a sequence type variable as a parameter. Run the activecode below to randomly choose a colour from the list and a character from a string. You will see this function again in class assignments!
Using random numbers in your programming can be a good way to help ensure fairness. If you have a list of students and you want to choose students to give presentations in a class, using a program that randomly picks a student is likely better than starting alphabetically. If all instructors did this alphabetically, the students whose surnames start with an βAβ or βBβ would always get the chance to present and get feedback and students whose surnames begin with a letter later in the alphabet would not receive the same opportunity. Can you think of software programs that you use that have random elements? How would the program be less fair if it didnβt use randomness?
Computers generate random numbers using a deterministic algorithm. This means that if anyone ever found out the algorithm they could accurately predict the next value to be generated and would always win the lottery.
They would just generate the same numbers over and over again.
Correct. We canβt 100% of the time guarantee the fairness using pseudo-random generation. What we can do is be aware of our codeβs limitations, run some statistics on likelihood of fairness (like answer c would suggest) and continuously look for ways to pursue fairness in random numbers and algorithms.