Random
Sometimes we want to be able to introduce randomness into a program. For example, if you are writing a game, you may need to have a treasure or a monster appear at random times in the game. If you are writing a password manager, you may want to create random passwords.
Python has a random
module that you can import with import random
.
Random choice
To choose a random item from a list, use random.choice()
:
import random
fruits = ['pear','mango','banana','strawberry','kumquat']
selection = random.choice(fruits)
This will choose a random fruit from the list.
Random integer
To choose a random integer between (and including) a low value and a high value, use random.randint()
:
import random
number = random.randint(1, 10)
Random float
To choose a random float between (and including) 0 and 1, use random.random()
:
import random
number = random.random()
If you want to scale this to be between 0 and some larger number, you can scale it with multiplication. For example, to choose a float between 0 and 100:
import random
number = random.random() * 100
This is particularly useful for doing something with a random probability. For example, if you want your code to do something 20% of the time (or 1 in 5 chances), then:
import random
number = random.random()
if number <= 0.2:
print("This should print one in 5 times.")
else:
print("This should print 4 in 5 times.")
Here is a more complete example:
def apples(size):
result = []
while len(result) < size:
if random.random() < 0.1:
result.append('bananas!')
else:
result.append('apples')
return result
fruits = apples(40)
This will set fruits
to be a list of mostly apples
but 10% of the time bananas!
(more or less, depending on how the random numbers come up).
Random sample
To sample letters from a string, use random.sample()
:
import random
name = 'Washington'
letter = random.sample(name, 2)
This will choose two random letters from Washington
— removing each letter as it is chosen. This means at most you can choose 10 letters from Washington
, with no repeats. If you chose to sample all 10 letters, you would end up with Washington
scrambled.
Example
Write a function that will randomly inject umm
into a sentence at a frequency of about 20%:
def ummify(text):
"""Randomly inject 'umm' into the given text at a frequence of 20%"""
Here is how you might write out an algorithm to solve this problem in English:
- create a new, empty list — result
- loop through all of the words in the input string
- generate a random float
- if the float is <= 0.2, then append
umm
to the result list - append the current word to the result list
- convert the list of words back into a string
- return the new string
Here is a solution that follows this algorithm:
import random
def ummify(text):
"""Randomly inject 'umm' into the given text at a frequence of 20%"""
words = text.split(' ')
result = []
for word in words:
if random.random() < 0.2:
result.append('umm')
result.append(word)
return ' '.join(result)