random
概述
随机现象在生活中经常中十分常见,例如支付宝锦鲤抽奖就是利用随机数进行抽选。
随机数在计算机应用中十分普遍。由于是程序控制的,我们一般也称为伪随机数,主要是利用梅森旋转算法(Mersenne twister)生成的(伪)随机序列的元素。
在 Python 中,常用 random 库生成各种分布的伪随机数序列,可用于除随机性要求更高的加解密算法外的大多数工程应用。
引入
引入方式同其他库一样,在此不再赘述。
使用
random 库中的随机函数分为两类:基本随机函数seed(a)
和random()
和一系列基于这两个函数所拓展的随机数函数。
基本随机数函数
与其他编程语言类似,Python 语言中随机数的生成基于随机数“种子”,每个种子作为输入,利用算法生成一系列随机数,构成伪随机序列。
seed(a=None)
:初始化给定的随机数种子,默认为当前系统时间
random() 函数是随机数函数的最基本函数,其余函数均可由其扩展而得。
random()
:生成一个[0.0,1.0)之间的随机小数
扩展随机数函数
randint(a,b)
:生成一个[a,b]之间的整数randrange(a,b,c)
:生成一个[a,b)之间以c为步长的随机整数getrandbits(k)
:生成一个k比特长度的随机整数uniform(a,b)
:生成一个[a,b]之间的小数choice(seq)
:从序列类型中随机返回一个元素shuffle(seq)
:将序列类型中的元素随机排列,返回新序列sample(pop,k)
:从 pop 类型中随机选取k个元素,以列表类型返回
示例
雪景艺术绘图
让我们尝试着用一些简单的标准库画一幅美丽的黑夜雪景图吧(虽说雪只有一种颜色,但五颜六色岂不是更酷炫???)。代码如下:
# -*-coding:utf-8-*-
from random import *
from turtle import *
def drawSnow():
hideturtle()
pensize(2)
for i in range(100):
r,g,b = random(),random(),random()
pencolor(r,g,b)
pu()
setx(randint(-350,350))
sety(randint(1,270))
pd()
dens = randint(8,12)
snowsize = randint(10,14)
for j in range(dens):
fd(snowsize)
bk(snowsize)
right(360/dens)
def drawGround():
hideturtle()
for i in range(400):
pensize(randint(5,10))
x = randint(-400,350)
y = randint(-280,-1)
r,g,b = -y/280,-y/280,-y/280
pencolor((r,g,b))
pu()
goto(x,y)
pd()
fd(randint(40,100))
setup(800,600,200,200)
tracer(False)
bgcolor("black")
drawSnow()
drawGround()
done()