生活中,我们经常使用验证码完成登录、注册等功能,那python中如何随机生成验证码呢?先拿四位验证码练练手,要求如下。 第一位:数字、第二位:大写字母、第三位:小写字母,第四位:随机(数字,大小写字母)。
首先来个常规做法:
import random
def yzma1():
nums = list(range(10))
var1=[]
var2=[]
for i in range (65,91):
var1.append(chr(i))
for i in range(97,123):
var2.append(chr(i))
n1 = str(random.choice(nums))
n2 = random.choice(var1)
n3 = random.choice(var2)
n4 = str(random.choice(nums + var1 + var2))
return n1 + n2 + n3 + n4
nums = list(range(10))生成数字列表
利用字母的ASCII码的范围AZ:(65,91),az:(97,123)
chr(i),把数字i转成字母,并添加到列表中,生成字母列表。
random.choice(列表),在列表中随机选择一个元素。
最后把四个随机元素拼接在一起就可以了。
再来优化一下代码。
import random
def yzma2():
var1=list(range(10))
var2=[chr(i) for i in range(65,91)]
var3=[chr(i) for i in range(97,123)]
n1=random.choice(var1)
n2=random.choice(var2)
n3=random.choice(var3)
n4=random.choice(var1+var2+var3)
return str(n1)+n2+n3+str(n4)
使用列表推导式:不仅能简化代码,更能提高程序运行速度。
要随机生成0~9中的随机整数,还有两种方法:
random.randrange(10) #默认从0开始,区间:左闭又开
random.randint(0,9) #特殊的是:左右都是闭区间
ASCII码和字符相互转换:
ord('a')=97
ord('z')=122
ord(' ')=32 #空格
chr(97)='a'
chr(122)='z'