random 库是进行随机运算的标准库,所谓标准库就是python语言内置的函数库不需要第三方安装。使用random库的目的是生成随机数,才用的是梅森旋转算法生成伪随机数列
常用函数:
seed(a=None) 初始化随机数种子,默认值为当前系统时间
random() 随机生成一个[0.0,1.0)之间的小数
randint(a,b) 随机生成一个[a,b]之间的整数
randrange(start,stop,step)随机生成一个范围在[start,stop),以step为步长的整数
getrandbits(k) 随机生成一个k比特长度的整数
uniform(a,b) 随机生成一个[a,b]之间的小数
choice(seq) 从序列类型中随机返回一个元素
shuffle(seq) 将序列类型的元素随机排序,返回一个随机排序的列表
sample(pop,k) 从pop类型中随机选取k个元素,以列表形式返回
>>> import random
>>> random.random()
0.8407924895042552
>>> random.randint(1,10)
10
>>> random.randrange(1,10,5)
1
>>> random.randrange(1,10,5)
6
>>> random.getrandbits(5)
24
>>> random.uniform(1,10)
6.844525081612232
>>> list = [1,2,3,4,5,6]
>>> random.choice(list)
4
>>> random.shuffle(list)
>>> list
[4, 6, 3, 5, 2, 1]
>>> random.sample(list,2)
[1, 3]
>>> list
[4, 6, 3, 5, 2, 1]
>>>
随机数种子相同生成的随机数也是相同的
>>> random.seed(10) #随机数种子一般为整数
>>> random.random()
0.5714025946899135
>>> random.random() #未定义随机数种子生成随机数
0.4288890546751146
>>> random.seed(10) #再次定义随机种子为10生成的随机数
>>> random.random()
0.5714025946899135
可以看出第一个随机数和最后一个随机数完全相同
利用random随机数的库做一个密码生成器
#随机密码生成。编写程序在26个字母大小写和9个数字组成的列表中随机生成5个6位数密码
思路:
1.先写列表
2.随机生成则需要考虑random库
3.生成10个6为密码则需要循环
import random
s = "123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM"
ls = list(s)
for i in range(5): #循环控制生成的个数
secert = ""
for j in range(6): #控制密码的位数
secert += random.choice(ls)
print(secert)
输出结果:
NNUrLZ
pK4ZvE
poI6Dd
nuyTtF
hpJJin
进阶玩法:
import random
for i in range(5):
for j in range(6):
a=chr(random.randint(48,57)) #0-9的Unicode十进制编码范围
b=chr(random.randint(97,122)) #a-z的Unicode十进制编码范围
c=chr(random.randint(65,90)) #A-Z的Unicode十进制编码范围
if j < 5: #不换行打印前五位的密码
print(random.choice([a, b, c]), end='')
else: #打印第六位密码并换行输出
print(random.choice([a, b, c]))
输出结果:
98AP55
QiWJ10
zA3Ny2
0hUHvm
WDP1E1
模拟斗地主洗发牌——3人54张牌,逐个发牌玩法
思路:
1.先准备54张牌并放到一个序列类型中
2.再进行洗牌,由于随机洗牌则可以使用shuffle函数
3.然后发牌则可以用上述的循换每个玩家生成17张牌
import random
poke = [] #扑克牌堆
play1 = [] #玩家1牌堆
play2 = [] #玩家2牌堆
play3 = [] #玩家3牌堆
last = [] #底牌牌堆
flowers = ("♥","♠","♣","♦") #花色元组
nums = ("2","3","4","5","6","7","8","9","10","J","Q","K","A") # 点数元组
king = {
"big":"大王","small":"小王"} # 大小王
for flower in flowers: #遍历花色
for num in nums: #遍历点数
poke.append("%s%s"%(flower,num)) #将花色和点数的结合体存到poke牌堆列表中,为了好看将元组格式化了一下
poke.append(king["big"]) #将大王存入poke牌堆列表中
poke.append(king["small"]) ##将小王存入poke牌堆列表中
random.shuffle(poke) #洗牌
#一个接着一个发牌
for i in range(17): #每人17张牌循环17次
play1.append(poke.pop(0)) #从随机排序的poke列表中取出第一个元素,抛给play1玩家列表
play2.append(poke.pop(0)) #list.pop(i)函数是从list列表中取出序号为i的值
play3.append(poke.pop(0)) #这样3条语句就实现了一个一个的发牌
last = poke #将剩下的3张牌抛给底牌
#打印每个玩家的牌
print("玩家1:")
for poke1 in play1: #也可以直接打印play1列表,但返回的是一个列表格式,不是很好看
print(poke1,end=" ")
print("\n玩家2:") #“\n”作用是换行,为了输出格式漂亮
for poke2 in play2:
print(poke2,end=" ")
print("\n玩家3:")
for poke3 in play3:
print(poke3,end=" ")
print("\n底牌:")
for last in last:
print(last,end=" ")
输出结果:
玩家1:
♦K ♥A ♣6 ♠6 ♥7 ♠8 ♦8 ♣A ♠10 ♣3 ♠A ♥8 ♥3 ♠4 ♦4 ♥Q ♠K
玩家2:
小王 ♦J ♠5 ♣Q ♦6 ♦3 大王 ♦10 ♥4 ♣2 ♥6 ♠7 ♠Q ♥5 ♥K ♥J ♠2
玩家3:
♠9 ♣J ♥9 ♣5 ♦2 ♠J ♦9 ♥10 ♣10 ♣4 ♦A ♦Q ♠3 ♣K ♣8 ♦5 ♥2
底牌:
♣7 ♣9 ♦7
谁是地主??底牌给谁??
思路:试试random库中的choice()函数,打印输出时给出判断(if-else的简洁用法参考篇python从入门都入魔第六天——分支结构与循环结构),哪个玩家的条件成立就把底牌给谁,不会的私信我!!
下一篇分享海龟画图的库!!