Python random模块及用法
random 模块主要包含生成伪随机数的各种功能变量和函数。
在 Python 的交互式解释器中先导入 random 模块,然后输入 random.__all__ 命令(__all__ 变量代表了该模块开放的公开接口),即可看到该模块所包含的全部属性和函数:
<pre class="brush:html;toolbar:false">>>> 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']</pre>在 random 模块下提供了如下常用函数:
random.seed(a=None, version=2):指定种子来初始化伪随机数生成器。
random.randrange(start, stop[, stop]):返回从 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。
下面程序示范了 random 模块中常见函数的功能和用法:
运行上面程序,可以看到如下输出结果:
<pre class="brush:html;toolbar:false">0.7097266660597923 6.4845555071809535 9.707899380000603 2 70 Python ['Swift', 'Python', 'Kotlin'] [20, 10, 30, 50]</pre><span style="color: rgb(68, 68, 68); font-family: "Helvetica Neue", 微软雅黑, "Microsoft Yahei", Helvetica, Arial, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">实际上,使用 random 模块中的随机函数可以做很多很有趣的事情。比如下面程序:</span>
<pre class="brush:html;toolbar:false">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)</pre>运行上面程序,可以看到如下输出结果:<span style="color: rgb(68, 68, 68); font-family: "Helvetica Neue", 微软雅黑, "Microsoft Yahei", Helvetica, Arial, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);"></span>
您可能感兴趣的文章:
python怎么导入random
一文带你读懂Python中的模块
Python random模块及用法
python随机数模块怎么导入
Python之random模块详解
python 随机函数可以生成字符串吗
python如何打乱list
python中如何随机分配
Python中随机数的使用
python随机数如何求和