random模塊是Python/ target=_blank class=infotextkey>Python中一個(gè)用于生成隨機(jī)數(shù)的模塊,其中包含了生成偽代隨機(jī)數(shù)的函數(shù),有助于編寫模擬程序或者生成隨機(jī)輸出的程序。需要注意的是這些數(shù)雖然看起來好像是完全隨機(jī)的,但是他們背后的系統(tǒng)是可以預(yù)測的。如果要用于加密或者完全相關(guān)的功能,則應(yīng)該使用os模塊中的urandom。
random模塊
random模塊中一些重要的函數(shù)如下表所示:
函數(shù) |
描述 |
random() |
返回一個(gè)0~1(含)的隨機(jī)實(shí)數(shù) |
getrandbits(n) |
以長整數(shù)的方式返回n個(gè)隨機(jī)的二進(jìn)制位 |
uniform(a, b) |
返回一個(gè)a~b(含)的隨機(jī)實(shí)數(shù) |
randrange([start], stop, [step]) |
從range(start, stop, step)中隨機(jī)地選擇一個(gè)數(shù) |
choice(seq) |
從序列seq中隨機(jī)地選擇一個(gè)元素 |
shuffle(seq[, random]) |
就地打亂序列seq |
sample(seq, n) |
從序列seq中隨機(jī)地選擇n個(gè)值不同的元素 |
random.random():random模塊中最基本的函數(shù)之一,也是最常用的函數(shù),它返回一個(gè)0~1(包含)的偽隨機(jī)數(shù)。
random.getrandbits():以一個(gè)整數(shù)的方式返回指定數(shù)量的二進(jìn)制位。
random.uniform():它返回一個(gè)a~b(含)的隨機(jī)(均勻分布的)實(shí)數(shù)。例如,如果你需要一個(gè)隨機(jī)角度,可使用uniform(0, 360)。
random.randrange():是生成隨機(jī)整數(shù)的標(biāo)準(zhǔn)函數(shù)。為指定這個(gè)隨機(jī)整數(shù)所在的范圍,你可像調(diào)用range那樣給這個(gè)函數(shù)提供參數(shù)。
random.choice():從給定的序列中隨機(jī)地選擇一個(gè)元素。
random.shuffle():隨機(jī)地打亂一個(gè)可變序列中的元素,并確保每種可能的排列順序出現(xiàn)的概率相同。
random.sample():從給定序列中隨機(jī)(均勻)地選擇指定數(shù)量的元素,并確保所選擇元素的值各不相同。
上面關(guān)于介紹的random模塊中的函數(shù)的實(shí)例用法如下my_random.py程序所示:
my_random.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import random
# random()函數(shù),返回一個(gè)0~1(包含)的隨機(jī)實(shí)數(shù)
rand_num = random.random()
print('rand_num = {}'.format(rand_num))
rand_num = random.random()
print('rand_num = {}'.format(rand_num))
# getrandbits()函數(shù)
print(random.getrandbits(10))
# uniform()函數(shù),返回一個(gè)a~b(包含)的隨機(jī)實(shí)數(shù)
uni_rand_num = random.uniform(1, 10)
print('uni_rand_num = {}'.format(uni_rand_num))
# randrange()函數(shù),從指定的范圍中隨機(jī)選擇一個(gè)數(shù)。
rand_range_num = random.randrange(1, 10)
print('rand_range_num = {}'.format(rand_range_num))
# choice()函數(shù),從給定的序列中隨機(jī)選擇一個(gè)數(shù),與randrange()函數(shù)類似。
sequence = list(range(1, 10))
print('sequence = {}'.format(sequence))
rand_choice = random.choice(sequence)
print('rand_choice = {}'.format(rand_choice))
# shuffle()函數(shù),隨機(jī)打亂給定的可變序列的元素索引位置
sequence = list(range(1, 20))
print('sequence = {}'.format(sequence))
random.shuffle(sequence)
print('sequence = {}'.format(sequence))
# sample()函數(shù),從給定的序列中隨機(jī)選擇指定數(shù)量的元素,各個(gè)元素只不同
sequence = list(range(1, 36))
print('sequence = {}'.format(sequence))
samp_rand_nums = random.sample(sequence, 5)
print('samp_rand_nums = {}'.format(samp_rand_nums))
程序執(zhí)行結(jié)果如下所示:
rand_num = 0.4080611438222771
rand_num = 0.4686116506011688
911
uni_rand_num = 8.889564467939781
rand_range_num = 5
sequence = [1, 2, 3, 4, 5, 6, 7, 8, 9]
rand_choice = 8
sequence = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
sequence = [2, 17, 10, 19, 12, 4, 9, 14, 7, 5, 3, 11, 6, 18, 8, 15, 16, 1, 13]
sequence = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35]
samp_rand_nums = [27, 30, 1, 17, 7]