题目:生成4位数的随机验证码,包括字符和数字,并且不能出现重复元素
代码:
# 生成四位随机数的验证码
import random
# 用来保存生成的随机数或字母
list = ''
lastList = ''
# @函数作用:判断字符串重复函数
# @函数说明:如果字符串中出现重复字符串,则返回Ture,没有返回False
# @函数参数(str):字符串
# @函数返回值:返回布尔类型值,返回Ture值,或者False
def chongfu(str):
# 对目标字符串进行遍历
for i in str:
# 判断遍历的当前字符在目标字符串出现的次数,如果大于1直接返回Ture
if str.count(i) > 1:
return True
# 遍历所有并且没有进入条件,说明字符串中没有重复元素,返回False
return False
# @函数作用:复制字符串函数
# @函数说明:将目标字符串复制,并且复制后的返回的值的变量的地址跟原来目标字符串不同
# @函数参数(str):字符串
# @函数返回值:返回复制的字符串的值
def copy(str):
# 初始化一个存储复制字符串的变量
copy_str = ''
# 对目标字符串进行遍历
for i in str:
# 将目标字符串拆解后再度拼合成目标字符串
copy_str = copy_str + i
# 返回复制的字符串
return copy_str
# range(x)生成x个随机数的验证码
# 循环条件为验证码字符串的长度<4,目的是为了出现重复字符元素时,可以进行删除重新生成随机值
while len(list) < 4:
# 跟随循环生成一个0-4之间的随机数来决定生成的是大小写字母还是数字
j = random.randrange(0, 4)
# 随机产生的数字是1时,生成数字
if j == 1:
# 生成0-9之间的随机数字,并将其转为字符串连接在list变量后面
list = list + str(random.randrange(0, 10))
# 随机产生的数字是2时,生成大写字母
elif j == 2:
# 生成65-90(对应ASCII码表上的大写字母序号)之间的随机数字,并将其转为字符串连接在list变量后面
list = list + chr(random.randrange(65, 91))
# 随机产生的数字是除了1和2时,生成小写字母
else:
# 生成97-122(对应ASCII码表上的小写字母序号)之间的随机数字,并将其转为字符串连接在list变量后面
list = list + chr(random.randrange(97, 122))
# 检查生成的字符串中有没有重复的元素
if chongfu(list):
# 有重复的元素,则将当前的字符串替换成上一刻的字符串
list = copy(lastList)
# 将新的字符串存入到lastList变量中,作上一刻的字符串
lastList = copy(list)
# 打印输出生成的随机验证码
print(list)