random模块主要包含各种函数变量和生成伪随机数的函数。
在Python的交互式解释器中,先导入random模块,然后输入random.__all__命令(__all__变量代表模块的开放接口),就可以看到模块中包含的所有属性和函数:
>>> random.__all__
['Random', 'seed', 'random', 'uniform', 'randint', 'choice', 'sample', 'randrange', 'shuffle', 'normalvariate',
'lognormvariate', 'expovariate', 'vonmisesvariate', 'gammavariate', 'triangular', 'gauss', 'betavariate',
'paretovariate', 'weibullvariate', 'getstate', 'setstate', 'getrandbits', 'choices', 'SystemRandom']
在 random 模块下提供了如下常用函数:
random.seed(a=None, version=2):指定种子来初始化伪随机数生成器。
random.randrange(start, stop[, stop]):返回一个随机数,从开始到停止的步长。其实相当于choice(range(start, stop, step))的效果,但是实际底层并没有生成区间对象。
random.randint(a, b):生成一个范围为 a≤N≤b 的随机数。其等同于 randrange(a, b+1) 的效果。
random.choice(seq):从 seq 中随机抽取一个元素,如果 seq 为空,则引发 IndexError 异常。
random.choices(seq, weights=None, cum_weights=None, k=1):从seq序列中提取k个元素,通过weights指定每个要提取的元素的权重(代表被提取的概率)。
random.shuffle(x[, random]):对 x 序列执行洗牌“随机排列”操作。
random.sample(population, k):从 population 序列中随机抽取 k 个独立的元素。
random.random():生成一个从 0.0(包括)到 1.0(不包括)的伪随机浮点数。
random.uniform(a, b):生成一个范围为 a≤N≤b 的随机数。
random.expovariate(lambd):生成指数分布的随机数。 lambd 参数(应该是 lambda,但 lambda 是 Python 关键字,所以缩写为 lambd)是 1 除以预期平均值。如果lambd为正,则返回的随机数为0到正无穷;如果lambd为负,则返回的随机数是从负无穷到0。
下面程序示范了 random 模块中常见函数的功能和用法:
import random
#生成范围为0.0≤x<1.0 的伪随机浮点数
print (random.random())
#生成范围为2.5≤x<10.0 的伪随机浮点数
print (random.uniform(2.5, 10.0))
#生成呈指数分布的伪随机浮点数
print (random.expovariate(1/5))
#生成从0 到9 的伪随机整数
print(random.randrange(10))
#生成从0 到100 的随机偶数
print (random.randrange(0, 101 , 2))
#随机抽取一个元素
print (random.choice (['Python','Swift','Kotlin']))
book_list = ['Python','Swift','Kotlin']
#对列表元素进行随机排列
random.shuffle (book_list)
print (book_list)
#随机抽取4 个独立的元素
print (random.sample([10, 20 , 30 , 40 , 50], k=4))
运行上面程序,可以看到如下输出结果:
0.7097266660597923
6.4845555071809535
9.707899380000603
2
70
Python
['Swift', 'Python', 'Kotlin']
[20, 10, 30, 50]
事实上,使用 random 模块中的 random 函数可以做很多有趣的事情。例如下面的程序:
import random
import collections
#指定随机抽取6 个元素,各元素被抽取的权重(概率)不同
print(random.choices(['Python','Swift','Kotlin'], [5, 5, 1], k=6))
#下面模拟从52 张扑克牌中抽取20 张
#在被拍到的20 张牌中,牌面为10(包括J、Q、K的的牌占多大比例
#生成一个16个tens(代表10)和36 个low_cards(代表其他牌)的集合
deck= collections.Counter(tens=16, low_cards=36)
#从52 张牌中随机抽取20 张
seen= random.sample(list(deck.elements()), k=20)
#统计tens 元素有多少个,再除以20
print(seen.count('tens')/20)
运行上面程序,可以看到如下输出结果:
['Swift', 'Swift', 'Swift', 'Swift', 'Python', 'Swift']
0.45
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python pdb的使用方法11/20
- ♥ python函数如何接收参数09/11
- ♥ 为什么要使用 Python 进行人工智能09/13
- ♥ 如何在c中嵌入python12/23
- ♥ 如何在 python 中安装 setuptools09/30
- ♥ python自带的idle如何使用09/21
内容反馈