第47期-验证码验证

1 问题描述

用户登录网站经常需要输入验证码,验证码包含大小写字母和数字,随机出现。用户输入验证码时不区分大小写,只要各字符出现顺序正确即可通过验证。   
请写一个程序完成验证码的匹配验证,随机生成四位数的验证码如Qs2X(生成数字概率为1/5,大写字母和小写字母概率各为2/5) 
如果用户输入验证码正确,输出“验证码正确”,输入错误时输出“验证码错误,请重新输入”,再重新生成验证码让用户输入,输入五次错误时输出“您已用光了验证机会”。

网站上的验证码的作用是保护网站安全,一般网站都要通过验证码来防止机器大规模注册,机器暴力破解数据密码等危害。
手机的短信和语音验证码是要确定这个手机是用户自己的。
其实最后都是为了验证,这个操作是个人在做而不是机器,证明我是我的过程

2 解题思路

  • 第一步: 由于有生成概率,所以需要使用random模块
  • 第二步: 五次输入机会,需要使用for循环

3 解题方法

'''用户登录网站经常需要输入验证码,验证码包含大小写字母和数字,随机出现。
用户输入验证码时不区分大小写,只要各字符出现顺序正确即可通过验证。   
请写一个程序完成验证码的匹配验证,随机生成四位数的验证码如Qs2X(生成数字概率为1/5,大写字母和小写字母概率各为2/5) 
如果用户输入验证码正确,输出“验证码正确”,输入错误时输出“验证码错误,请重新输入”,再重新生成验证码让用户输入,
输入五次错误时输出“您已用光了验证机会”。'''
import random
n = 0
def verify2():
    a = []
    for _ in range(4):
        x = random.random()
        if x <= 0.4:
            a.append(random.choice(
                ['Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', 'L', 'K', 'J', 'H', 'G', 'F', 'D', 'S', 'A', 'Z',
                 'X', 'C', 'V', 'B', 'N', 'M']))
        elif x <= 0.8:
            a.append(random.choice(
                ['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', 'l', 'k', 'j', 'h', 'g', 'f', 'd', 's', 'a', 'z',
                 'x', 'c', 'v', 'b', 'n', 'm']))
        else:
            a.append(random.choice(['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']))
    return str(''.join(a))
def code():
    global n
    a = verify2()
    verify = input(f'请输入验证码{a}:')
    if verify.lower() == a.lower():
        print('验证码正确')
    else:
        n += 1
        if n == 5:
            print('您已用光了验证机会')
        else:
            print('验证码错误,请重新输入')
            code()
code()
View Code

第1行: 引入random随机模块
第2行: 定义变量n=0,用于计算输入错误的次数
第3行: 创建函数verify2,用于随机生成验证码
第4行: 创建列表a,用于存放验证码的字符
第5行: for循环,用来循环五次
第6行: 定义变量x并为之赋值0~1的随机小数
第7-10行: 当x<=0.4时,即出现概率为4/10即0.4,随机选择大写字母中的一个
第11-14行: 当0.4<x<=0.8时,即出现概率为4/10即0.4,随机选择小写字母中的一个
第15-16行: 其他情况下即x>0.8时,即出现概率为2/10即0.2,随机选择一个数字
第17行: 将字符连在一起并返回给函数值
第18行: 创建函数code
第20行: 定义变量a并用verify2函数为之随机赋值一个验证码
第21行: 使用input函数提示用户输入验证码并赋值给verify
第22-23行: 判断输入的验证码小写是否与随机出现的验证码小写状态一样,若是一样,则打印验证码正确
第24-25行: 若是不一样,给全局变量n加一
第26-27行: 当n等于5的时候,代表以及输错了五次,打印您已用光了验证机会
第28-30行: 若还未输入五次错误,让用户重新输入验证码,并重新开始判断
第31行: 使用code函数开始运行代码

代码运行结果为:
image.jpg

posted @ 2022-01-06 17:58  LG03  阅读(344)  评论(0编辑  收藏  举报