random模块
random模块介绍
Python random 模块主要用于生成随机数。
random 模块实现了各种分布的伪随机数生成器。
真正意义上的随机数(或者随机事件)在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结果是不可预测的,是不可见的。而计算机中的随机函数是按照一定算法模拟产生的,其结果是确定的,是可见的。我们可以这样认为这个可预见的结果其出现的概率是100%。所以用计算机随机函数所产生的“随机数”并不随机,是伪随机数。
计算机的伪随机数是由随机种子根据一定的计算方法计算出来的数值。所以,只要计算方法一定,随机种子一定,那么产生的随机数就是固定的。
只要用户或第三方不设置随机种子,那么在默认情况下随机种子来自系统时钟。
Python的这个库在底层使用通用的算法,经过长久的考验,可靠性没得说,但绝对不能用于密码相关的功能。
要使用 random 模块必须先导入:
import random
查看 random 模块中的内容:
>>> import random
>>> dir(random)
['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', '_Sequence', '_Set', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_accumulate', '_acos', '_bisect', '_ceil', '_cos', '_e', '_exp', '_floor', '_inst', '_log', '_os', '_pi', '_random', '_repeat', '_sha512', '_sin', '_sqrt', '_test', '_test_generator', '_urandom', '_warn', 'betavariate', 'choice', 'choices', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'lognormvariate', 'normalvariate', 'paretovariate', 'randbytes', 'randint', 'random', 'randrange', 'sample', 'seed', 'setstate', 'shuffle', 'triangular', 'uniform', 'vonmisesvariate', 'weibullvariate']
随机整数
randrange(start,stop,step)
Python random.randrange() 方法返回指定范围内的随机数。
语法
random.randrange(start, stop, step)
参数说明:
start -- 可选, 一个整数,指定开始值,默认值为 0。
stop -- 必需, 一个整数,指定结束值,不包含该数。
step -- 可选, 一个整数,指定步长,默认值为 1。
返回值
返回指定范围内的整数,start<=返回值<stop。
实例
以下实例返回一个 1 到 9 之间的数字(大于等于 1,小于 9 ):
# 导入 random 包 import random # 返回一个 1 到 9 之间的数字 print(random.randrange(1, 9)) # 返回一个 1 到 9 之间的奇数 print(random.randrange(1, 9, 2))
输出结果:
6 5
randint(a, b)
Python random.randint() 方法返回指定范围内的整数。
randint(start, stop) 等价于 randrange(start, stop+1)。
语法
random.randint(start, stop)
参数说明:
start -- 必需, 一个整数,指定开始值。
stop -- 必需, 一个整数,指定结束值,包含结束值。
返回值
返回指定范围内的整数,start<=返回值<=stop。
实例
以下实例返回一个 1 到 9 之间的数字(大于等于 1,小于等于 9 ):
# 导入 random 包 import random # 返回一个 1 到 9 之间的数字 print(random.randint(1, 9))
输出结果:
8
随机小数
random()-0~1之间的随机小数
random() 方法返回随机生成的一个实数,它在半开放区间[0,1) 范围内。
语法
import random random.random()
参数
- 无
返回值
返回随机生成的一个实数,它在半开放区[0,1) 范围内,0<=返回值<1。。
实例
import random # 第一个随机数 print ("random() : ", random.random()) # 第二个随机数 print ("random() : ", random.random())
以上实例运行后输出结果为:
random() : 0.09690599908884856 random() : 0.8732120512570916
uniform(x, y)-x~y之间的随机小数
uniform() 方法将随机生成下一个实数,它在 [x,y] 范围内。
语法
import random random.uniform(x, y)
参数
x -- 随机数的最小值,包含该值。
y -- 随机数的最大值,包含该值。
返回值
返回一个浮点数 N,取值范围为如果 x<y 则 x <= N <= y,如果 y<x 则y <= N <= x。
实例
import random print ("uniform(5, 10) 的随机浮点数 : ", random.uniform(5, 10)) print ("uniform(7, 14) 的随机浮点数 : ", random.uniform(7, 14))
以上实例运行后输出结果为:
uniform(5, 10) 的随机浮点数 : 7.054602800254241 uniform(7, 14) 的随机浮点数 : 12.552229882744296
choice(lis)-随机地取一个值
choice() 方法返回一个列表,元组或字符串的随机项。
语法
import random random.choice( seq )
参数
- seq -- 可以是一个列表,元组或字符串。
返回值
返回随机项。
实例
import random print ("从 range(100) 返回一个随机数 : ",random.choice(range(100))) print ("从列表中 [1, 2, 3, 5, 9]) 返回一个随机元素 : ", random.choice([1, 2, 3, 5, 9])) print ("从字符串中 'Runoob' 返回一个随机字符 : ", random.choice('Runoob'))
以上实例运行后输出结果为:
从 range(100) 返回一个随机数 : 68 从列表中 [1, 2, 3, 5, 9]) 返回一个随机元素 : 2 从字符串中 'Runoob' 返回一个随机字符 : u
以下是一个随机密码生成器的简单实现:
import random
import string
def generate_password(length):
# 定义密码可用字符集合
chars = string.ascii_letters + string.digits + string.punctuation
# 随机选择字符生成密码
password = ''.join(random.choice(chars) for _ in range(length))
return password
random_pwd = generate_password(6) # 输出长度为 6
print(random_pwd)
以上实例中 generate_password() 函数接受一个整数参数 length,表示要生成的密码长度,然后利用 Python 标准库中的 random 和 string 模块生成随机密码。
- string.ascii_letters :包含所有字母(大写和小写),
- string.digits :包含所有数字,
- string.punctuation :包含所有标点符号。
random.choice(chars) 会从字符集chars中随机选择一个字符,然后 join() 方法会将生成的字符拼接在一起形成密码。
以上实例运行后输出结果为:
R?u|<K
shuffle(lis)-随机排序
shuffle() 方法将序列的所有元素随机排序。
语法
import random random.shuffle (lst )
参数
- lst -- 列表。
返回值
返回 None。
实例
import random list = [20, 16, 10, 5]; random.shuffle(list) print ("随机排序列表 : ", list) random.shuffle(list) print ("随机排序列表 : ", list)
以上实例运行后输出结果为:
随机排序列表 : [20, 5, 16, 10] 随机排序列表 : [5, 20, 10, 16]
该用法是对lis的原数据执行打乱操作,本身无返回值,lis将被随机打散,原数据再也回不来了。
seed() -固定某个随机结果
seed() 方法改变随机数生成器的种子,可以在调用其他随机模块函数之前调用此函数。
语法
import random random.seed ( [x] )
我们调用 random.random() 生成随机数时,每一次生成的数都是随机的。但是,当我们预先使用 random.seed(x) 设定好种子之后,其中的 x 可以是任意数字,如10,这个时候,先调用它的情况下,使用 random() 生成的随机数将会是同一个。
参数
x -- 改变随机数生成器的种子seed。
参数x可以为整型、浮点型、甚至为字符串。其本身没有任何意义,只作区分本次标记用。如果你不了解其原理,你不必特别去设定seed,Python会帮你选择seed。
返回值
- 本函数没有返回值。
实例
import random random.seed() print ("使用默认种子生成随机数:", random.random()) print ("使用默认种子生成随机数:", random.random()) random.seed(10) print ("使用整数 10 种子生成随机数:", random.random()) random.seed(10) print ("使用整数 10 种子生成随机数:", random.random()) random.seed("hello",2) print ("使用字符串种子生成随机数:", random.random()) random.seed("hello",2) print ("使用字符串种子生成随机数:", random.random())
以上实例运行后输出结果为:
使用默认种子生成随机数: 0.11522087168875184 使用默认种子生成随机数: 0.8311863508127583 使用整数 10 种子生成随机数: 0.5714025946899135 使用整数 10 种子生成随机数: 0.5714025946899135 使用字符串种子生成随机数: 0.3537754404730722 使用字符串种子生成随机数: 0.3537754404730722
使用random.seed(n)可以将接下来的随机操作结果固定下来,如果后面的代码调用该seed,将复现本次的随机操作,使两次随机结果相同。 因此要注意,每个seed值对应的随机结果是唯一的。
模拟考题
考题1 单选题
以下程序的功能是?( )
import random
a=""
for i in range(4):
c=random.randint(0,9)
if random.randint(0,1):
d=random.randint(97,122)
else:
d=random.randint(65,90)
a=a+str(c)+chr(d)
print(a)
A. 输出4C2f2D8g
B. 生成大小写字母的混合密码
C. 生成8位随机的密码,包含字母和数字
D. 生成8位随机数字的混合密码
答案:C
解析:生成8位随机的密码,包含字母和数字。
考题2 单选题
编写Python程序实现:随机生成输出一个1-100之间的整数。
import random
—————
print(num)
下列语句不可以完善程序,实现相关功能的是?( )
A. num=int(random.random()*99)+1
B. num=int(random.uniform(1,100))
C. num=random.randint(1,100)
D. num=random.choice(range(1,101))
答案:A
解析:random.randint()函数的功能。
考题3 单选题
Python的random库中,random.choice()命令的功能是?( )
A. 返回时间值
B. 返回随机产生的一个字符串
C. 获取随机整数
D. 随机获取一个元素并返回
答案:D
解析:Python中的random库应用。
考题4 单选题
Python中可以实现随机生成1-100之间浮点数的语句是?( )
A. print(random.uniform(1,100))
B. print(random.randint(1,100))
C. print(random.sample(1,100))
D. print(random.shuffle(1,100))
答案:A
解析:Python random.uniform(a, b),用于生成一个指定范围内的随机浮点数,两个参数其中一个是上限,一个是下限