day5模块学习--random模块
Python中的random模块用于生成随机数
下面具体介绍random模块的功能:
1.random.random()
#用于生成一个0到1的浮点数 随机浮点数:0<= n < 1.0
>>> import random
>>> random.random()
0.10014889182317255
>>> random.random()
0.9318386759483899
>>> random.random()
0.7933067981427825
2.random.uniform(a,b)
#用于生成一个指定范围内的随机浮点数,两个参数其中一个是上限,一个是下限。如果a > b,则生成随机数n:a <= n <= b。如果a < b,则b <= n <= a。
>>> random.uniform(1,4)
3.1024302829110297
>>> random.uniform(4,1)
3.604505878728916
>>> random.uniform(2,3)
2.987738694261377
>>> random.uniform(3,3)
3.0
3.random.randint(a, b)
#用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n:a <= n <= b
>>> random.randint(1,3)
2
>>> random.randint(3,3)
3
4.random.randrange([start], stop[, step])
#从指定范围内,按指定基数递增的集合中,获取一个随机数
random.randrange(10,30,2),结果相当于从[10,12,14,16,...,28]序列中获取一个随机数。random.randrange(10,30,2)在结果上与random.choice(range(10,30,2)等效。
一直以为random.randrange()与random.randint()功能类似,只是randint()包含下限,而random.randrange()不包含下限,原来random.randrange()可以指定步长,说明这是一个区域其实,random.randint()在上下限随机去一个值,random.randrange()是在数列中随机去一个数。
>>> random.randrange(2,10,3)
5
>>> random.randrange(2,10)
3
>>> random.randrange(2,10,3)
8
5.random.choice(sequence)
#参数sequence表示一个有序类型。从序列中获取一个随机元素,sequence在Python不是一种特定的类型,而是泛指一系列类型。list,tuple,字符串(str)都属于sequence。
random.chocice是从sequence中随机取一个元素,如列表,字符串,元组中随机取一个元素。
>>> name = "alexssb"
>>> names = ("alex","250","is")
>>> x = list(range(2,8))
>>> random.choice(name) #从字符串中取值
'a'
>>> random.choice(names) #从元组中随机提取元素
'alex'
>>> random.choice(names)
'is'
>>> random.choice(x) #从列表中随机提取元素
4
6.random.shuffle(x[, random])
#用于将一个列表中的元素打乱,即将列表内的元素随机排列。
>>> random.shuffle(x)
>>> x
[3, 4, 7, 5, 6, 2]
random.shuffle(list)用于将列表里面的元素随机打乱。
7.random.sample(sequence, k)
#从指定序列中随机获取指定长度的片断并随机排列。sample函数不会修改原有序列。
>>> names = ["alex","tenglan","chunyun","geng","aoi","cang"]
>>> random.sample(names,4)
['chunyun', 'alex', 'geng', 'aoi']
>>> names
['alex', 'tenglan', 'chunyun', 'geng', 'aoi', 'cang']
random.sample(sequence,k)从列表中随机获取一个元素
下面现在用random模块来写一个随机验证码。我们知道,随机验证码有大小写字母组成。也包含数字。下面来看看如何生成一个随机验证码。
import random def verification_code(): '''生成一个随机验证码''' lists = list(range(65,91)) code = "" '''大写字母对应的数字编码''' '''定义一个空的列表,用于存放大小写字母对应的值''' for num in range(97,123): '''小写字母对应的数字编码,凭借到一块''' lists.append(num) for i in range(6): random_num = random.randint(1,6) #随机值,当随机值与循环值相等的时候是字母,不相等的时候是数字,这样就生成了字母加数字的随机验证码 if i == random_num: string = chr(random.choice(lists)) else: string = str(random.randint(0,9)) code += string return code x = verification_code() print(x)
上面代码生成一个6位数的随机验证码。
也可以生成一个随机验证码,让每次里面都包含数字和字母。如下:
import random def verification_code(): '''生成一个随机验证码''' '''生成一个65-90,97-122的序列''' numbers = list(range(65,123)) for num in range(91,97): numbers.remove(num) '''把序列进行打乱''' random.shuffle(numbers) random_strs = random.sample(numbers,2) '''生成两个随机数''' random_nums = [] '''存放随机验证码''' for random_str in random_strs: random_nums.append(chr(random_str)) for random_num in range(0,2): random_nums.append(str(random.randint(1,9))) code = "".join(random_nums) return code x_code = verification_code() print(x_code)
上面代码生成一个随机验证码,每次都包含字母,不会只有数字或者之后字母的情况发生。