# 第47期-验证码验证

Python是一门需要不断实践练习的编程语言,本文档将AI大学堂学员交流群的Python每周练习进行汇总,希望各位小伙伴能够多进行实践练习,逐渐爱上这门神奇的编程语言,掌握它并在生活中能够使用它。

# 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()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

第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

# 4 视频解析

高清视频讲解,请查看AI大学堂Python基础实战100例 (opens new window)
关注『讯飞AI大学堂』公众号,发送 python100 即可领取Python基础实战100例源代码
AI大学堂公众号.png

更新于: 12/28/2021, 7:43:14 AM