首页 > 代码库 > python基础教程_学习笔记16:标准库:一些最爱——random

python基础教程_学习笔记16:标准库:一些最爱——random

标准库:一些最爱

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

 

 

 

 

 

 

******

******

*************************

*******************************

**************************************************

************

******************

 

******