Given the same inputs, most computer programs generate the same outputs every time, so they are said to be deterministic. Determinism is usually a good thing, since we expect the same calculation to yield the same result. For some applications, though, we want the computer to be unpredictable. Games are an obvious example, but there are more.
Making a program truly nondeterministic turns out to be not so easy, but there are ways to make it at least seem nondeterministic. One of them is to use algorithms that generate pseudorandom numbers. Pseudorandom numbers are not truly random because they are generated by a deterministic computation, but just by looking at the numbers it is all but impossible to distinguish them from random.
random module provides functions that generate pseudorandom numbers (which I will simply call "random" from here on).
random returns a random float between 0.0 and 1.0 (including 0.0 but not 1.0). Each time you call
random, you get the next number in a long series. To see a sample, run this loop:
import random for i in range(10): x = random.random() print(x)
This program produces the following list of 10 random numbers between 0.0 and up to but not including 1.0.
0.11132867921152356 0.5950949227890241 0.04820265884996877 0.841003109276478 0.997914947094958 0.04842330803368111 0.7416295948208405 0.510535245390327 0.27447040171978143 0.028511805472785867
Exercise 1: Run the program on your system and see what numbers you get. Run the program more than once and see what numbers you get.
random function is only one of many functions that handle random numbers. The function
randint takes the parameters
high, and returns an integer between
high (including both).
>>> random.randint(5, 10) 5 >>> random.randint(5, 10) 9
To choose an element from a sequence at random, you can use
>>> t = [1, 2, 3] >>> random.choice(t) 2 >>> random.choice(t) 3
random module also provides functions to generate random values from continuous distributions including Gaussian, exponential, gamma, and a few more.