Python random模块
2013-06-13 19:55
375 查看
random模块的作用:实现了多种类型的伪随机生成器。
1 random.random() 返回一个随机的浮点数值:range[0.0,1.0)
2 random.uniform(a,b) 返回一个指定数值区间的数。传入a和b,uniform()会用公式a+(b-a)*random()调整random()生成一个指定区间的浮点数值。其中a可以大于、小于、等于b。当a!=b时,会生成介于两者之间的浮点数,当a=b时,返回a。
重复运行这个程序会生成相同的数字序列。
4 random.randint(a,b) 用来生成一个指定区间的整数值,取值范围[a,b]。其中要求a小于等于b。
5 random.randrange([start],stop[,step])除了开始值(start)和结束值(end),randrange()还支持一个步长(step)参数,所以完全等价于从range(start,stop,step)选择一个随机值。不过randrange()更高效,因为它并没有真正构造区间。从python3.2开始randrange()更复杂的返回一个数,在3.2版本之前,使用像int(random()*n)的样式会产生轻微的不均匀分布。
6 random.choice(seq) 可以在一个序列中随机选择,参数seq表示一个有序类型,并不是一种特定类型,泛指list,tuple,字符串等。
8 random.sample(population,k) 可以从序列中无重复选择k个值,且不会改变原有序列。
9 多个并发生成器
除了模块级函数,random还包括一个Random类来管理多个随机数生成器的内部状态。之前介绍的所有函数都可以作为Random实例的方法得到,而且各个实例可以单独初始化和使用,而不会与其他实例返回的值相互干扰。
0.062 0.183
0.209 0.923
0.663 0.724
same seed:
0.968 0.968
0.535 0.535
0.020 0.020
如果系统上设置了很好的内置随机值种子,不同实例会有惟一的初始状态。不过,如果没有一个好的平台随机值生成器,不同实例往往会用当前时间作为种子,因此会生成相同的值。
1 random.random() 返回一个随机的浮点数值:range[0.0,1.0)
import random for i in range(5): print('%04.3f ' % random.random(), end='') #输出0.964 0.304 0.550 0.519 0.082重复运行这个程序会生成不同的数字序列。
2 random.uniform(a,b) 返回一个指定数值区间的数。传入a和b,uniform()会用公式a+(b-a)*random()调整random()生成一个指定区间的浮点数值。其中a可以大于、小于、等于b。当a!=b时,会生成介于两者之间的浮点数,当a=b时,返回a。
import random print('%04.3f ' % random.uniform(1, 10), end='') print('%04.3f ' % random.uniform(10, 1), end='') print('%04.3f ' % random.uniform(1, 1), end='') # 输出3.653 2.895 1.0003 random.seed() 通过指定种子来生成一个期望的值集。种子(seed)值会控制生成伪随机数所用公式的第一个值,由于公式是确定性的,改变种子后也就设置了要生成的整个序列。seed()参数可以是任意可散列对象。如果没有指定参数,则会使用当前时间。
import random random.seed(0) for i in range(5): print('%04.3f ' % random.random(), end='') # 输出0.844 0.758 0.421 0.259 0.511
重复运行这个程序会生成相同的数字序列。
4 random.randint(a,b) 用来生成一个指定区间的整数值,取值范围[a,b]。其中要求a小于等于b。
import random print('%d ' % random.randint(1, 10), end='') print('%d ' % random.randint(1, 1), end='') print('%d ' % random.randint(10, 1), end='') #输出6 1 error
5 random.randrange([start],stop[,step])除了开始值(start)和结束值(end),randrange()还支持一个步长(step)参数,所以完全等价于从range(start,stop,step)选择一个随机值。不过randrange()更高效,因为它并没有真正构造区间。从python3.2开始randrange()更复杂的返回一个数,在3.2版本之前,使用像int(random()*n)的样式会产生轻微的不均匀分布。
import random print('%d ' % random.randrange(1, 10), end='') # 输出[1,10)之间的任意数 print('%d ' % random.randrange(1, 10, 3), end='') # 输出序列[1,4,7]中一个数
6 random.choice(seq) 可以在一个序列中随机选择,参数seq表示一个有序类型,并不是一种特定类型,泛指list,tuple,字符串等。
import random print(random.choice(range(10))) # 输出2 print(random.choice('hello')) # 输出h print(random.choice(['hello', 'world'])) # 输出hello print(random.choice(('hello', 'world'))) # 输出world下面举一个例子来模拟抛硬币1000次,来统计多少次面朝上,多少次面朝下。
import random outcomes = {'heads':0, 'tails':0} sides = list(outcomes.keys()) for i in range(1000): outcomes[random.choice(sides)] += 1 print('Heads:', outcomes['heads'], end='') print(' Tails:', outcomes['tails'], end='') # 输出Heads: 491 Tails: 5097 random.shuffle(x[,random])用于将序列x打乱。
import random x = ['hello', 'world', 'I', 'love', 'Python'] random.shuffle(x) print(x) # 输出乱序的序列x
8 random.sample(population,k) 可以从序列中无重复选择k个值,且不会改变原有序列。
import random x = ['hello', 'world', 'I', 'love', 'Python'] print(random.sample(x, 2)) # 输出['Python', 'world'] print(x) # 输出['hello', 'world', 'I', 'love', 'Python']
9 多个并发生成器
除了模块级函数,random还包括一个Random类来管理多个随机数生成器的内部状态。之前介绍的所有函数都可以作为Random实例的方法得到,而且各个实例可以单独初始化和使用,而不会与其他实例返回的值相互干扰。
import random import time print('Default initializiation:') r1 = random.Random() r2 = random.Random() for i in range(3): print('%4.3f %4.3f' % (r1.random(), r2.random())) print('same seed:') seed = time.time() r1 = random.Random(seed) r2 = random.Random(seed) for i in range(3): print('%4.3f %4.3f' % (r1.random(), r2.random()))程序运行后的结果:Default initializiation:
0.062 0.183
0.209 0.923
0.663 0.724
same seed:
0.968 0.968
0.535 0.535
0.020 0.020
如果系统上设置了很好的内置随机值种子,不同实例会有惟一的初始状态。不过,如果没有一个好的平台随机值生成器,不同实例往往会用当前时间作为种子,因此会生成相同的值。
相关文章推荐
- Python random模块(获取随机数)常用方法和使用例子
- Python生成随机数与random模块中最常用的几个函数
- Py修行路 python基础 (二十)模块 time模块,random模块,hashlib模块,OS及sys模块
- 16Python标准系列之random模块
- Python中的random模块
- python中的random模块
- Python中的random模块
- python random模块
- Python Random模块
- 学习python之 random 模块
- Python模块:time、datetime、random、os、sys
- python random 模块
- Python模块random
- python random模块整理
- python的random模块及加权随机算法的python实现方法
- 【转】Python random模块常用函数
- python模块:random
- Python3.6 模块学习之random模块
- Python实现简单生成验证码功能【基于random模块】
- Python模块之---random模块