您现在的位置是:网站首页>Python编程Python编程

儿童python教程213:Python random模块及用法

少儿编程网2019-12-02 22:16:21Python编程 人已围观 来源:少儿编程 -用户投稿

简介事实上,所产生的随机数都是伪随机数,换句话说,这些随机数看似随机,但实际上,它们是以一个可预测的系统作为基础。不过由于这个系统模块在伪装随机方面十分优秀,因此也就不必对此过多担心啦。

random 模块包括返回随机数的函数,可以用于模拟或者任何产生随机输出的程序。

事实上,所产生的随机数都是伪随机数,换句话说,这些随机数看似随机,但实际上,它们是以一个可预测的系统作为基础。不过由于这个系统模块在伪装随机方面十分优秀,因此也就不必对此过多担心啦。gfA少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
gfA少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
儿童<a href=http://www.pxcodes.com/Python/ target=_blank class=infotextkey>python</a>教程213:Python random模块及用法gfA少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

在 Python 的交互式解释器中先导入 random 模块,然后输入 random.__all__ 命令(__all__ 变量代表了该模块开放的公开接口),即可看到该模块所包含的全部变量和函数:

>>> random.__all__gfA少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
['Random', 'seed', 'random', 'uniform', 'randint', 'choice', 'sample', 'randrange', 'shuffle', 'normalvariate', 'lognormvariate', 'expovariate', 'vonmisesvariate', 'gammavariate', 'triangular', 'gauss', 'betavariate', 'paretovariate', 'weibullvariate', 'getstate', 'setstate', 'getrandbits', 'choices', 'SystemRandom']gfA少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

开发者同样不需要完全记住这些属性和函数的含义,在使用时可参考https://docs.python.org/3/library/random.html。gfA少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
gfA少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
在 random 模块下提供了表 1 所示的常用函数。gfA少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
 
表 1 random模块常用函数
random模块常用函数 功能描述
random.seed(a=None, version=2) 指定种子来初始化伪随机数生成器。
random.randrange(start, stop[, step]) 返回从 start 开始到 stop 结束、步长为 step 的随机数。其实就相当于 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。
gfA少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
关于生成伪随机浮点数的函数,Python 还提供了 random.triangular(low, high, mode)、random.gauss(mu, sigma) 等,它们用于生成呈对称分布、高斯分布的随机数。由于这种随机数需要一些数学知识来理解它们,而且平时开发并不常用,因此这里就不深入展开介绍了。gfA少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
gfA少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
下面程序示范了 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.7097266660597923gfA少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
6.4845555071809535gfA少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
9.707899380000603gfA少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
2gfA少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
70gfA少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
PythongfA少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
['Swift', 'Python', 'Kotlin']gfA少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
[20, 10, 30, 50]gfA少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

实际上,使用 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']gfA少儿编程网-Scratch_Python_教程_免费少儿编程学习平台
0.45gfA少儿编程网-Scratch_Python_教程_免费少儿编程学习平台

从上面的输出结果来看,在第一次抽取的 6 个元素中 Kotlin 完全没有被抽取到,这是因为它的被抽取比例太低了。

相关文章:

支持一下 ( )查看更多相似文章

儿童python教程213:Python random模块及用法

      匿名评论
    • 评论
    人参与,条评论
    儿童python教程213:Python random模块及用法

客服在线

服务时间

周一至周日 9:00-21:00