标准库:一些最爱
random
random模块包括返回随机数的函数,可以用于模拟或者用于任何产生随机输出的程序。
事实上,所产生的数字都是伪随机数,它们以一个可预测的系统作为基础,除非是为了强加密的目标,否则这些随机数还是足够随机的。如果真的需要随机性,可以使用os模块的urandom函数。
重要函数
函数 |
描述 |
random() |
返回0<=n<1之间的随机实数n,其中0<n<=1 |
getrandbits(n) |
以长整型形式返回n个随机位(二进制数) |
uniform(a,b) |
返回随机实数n,其中a<=n<b |
randrange([start],stop,[step]) |
返回range(start,stop,step)中的随机数 |
choice(seq) |
从序列seq中返回随意元素 |
shuffle(seq[,random]) |
原地指定序列seq |
sample(seq,n) |
从序列seq中选择n个随机且独立的元素 |
random.getrandbits以长整型形式返回给定的位数(二进制数)。如果处理的是真正的随机事务(比如加密),这个函数尤为有用。
>>> import random
>>> random.random()
0.21811083216655824
>>> random.getrandbits(2)
3L
>>> random.getrandbits(2)
3L
>>> random.getrandbits(2)
0L
>>> random.uniform(1,4)
3.511648764533735
>>> random.uniform(1,9)
6.00895159575027
>>> random.randrange(5,100,21)
5
>>> random.randrange(5,100,21)
26
>>> random.randrange(5,100,21)
68
>>> random.randrange(5,100,21)
47
>>> random.randrange(10)
4
>>> random.randrange(10)
3
>>> random.choice((5,6,9))
6
>>> random.choice([5,6,9])
6
>>> random.choice(‘signjing‘)
‘j‘
因为random.shuffle函数原地移位序列,因此要求序列一定是可变的。
>>> a=[‘a‘,‘b‘,‘c‘]
>>> random.shuffle(a)
>>> a
[‘b‘, ‘a‘, ‘c‘]
>>> random.shuffle(a)
>>> a
[‘c‘, ‘b‘, ‘a‘]
>>> random.sample(a,2)
[‘a‘, ‘c‘]
>>> random.sample(a,2)
[‘c‘, ‘b‘]
练习 获取随机数
脚本内容
$ cat random-example-1.py
#File : random-example-1.py
import random
for i in range(5):
print random.random(),
print random.uniform(10,20),
print random.randint(100,1000),
print random.randrange(100,1000,2)
执行结果
$ python random-example-1.py
0.370761541392 17.2201292256 839 342
0.808063846391 12.0582042123 224 910
0.855181475123 13.6575143789 406 510
0.713555346237 14.0263174291 306 698
0.637399405203 13.3270555599 799 540
练习 随机序列中的元素
脚本内容
$ cat random-example-2.py
#File : random-example-2.py
import random
for i in range(5):
print random.choice([1,2,3,5,9])
执行结果
$ python random-example-2.py
2
2
2
5
9
练习 洗牌
脚本内容
$ cat random-example-4.py
#File : random-example-4.py
import random
try:
shuffle=random.shuffle
except AttributeError:
def shuffle(x):
for i in xrange(len(x)-1,0,-1):
j=int(random.random()*(i+1))
x[i],x[j]=x[j],x[i]
cards=range(52)
shuffle(cards)
myhand=cards[:5]
print myhand
执行结果
$ python random-example-4.py
[20, 44, 17, 14, 0]
$ python random-example-4.py
[8, 17, 27, 13, 42]
练习 高斯随机数
脚本内容
$ cat random-example-3.py
#File : random-example-3.py
import random
histogram=[0]*20
for i in range(25):
i=int(random.gauss(5,1)*2)
histogram[i]=histogram[i]+1
m=max(histogram)
for v in histogram:
print "*" * (v * 50 / m)
执行结果
$ python random-example-3.py
******
******
*************************
*******************************
**************************************************
************
******************
******