Python应用之验证码验证

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

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行: 引入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函数开始运行代码

代码运行结果为:

网络异常,图片无法展示
|

目录
相关文章
|
3天前
|
存储 算法 算法框架/工具
Python 数学应用(一)(4)
Python 数学应用(一)
16 1
|
2天前
|
数据采集 文字识别 测试技术
神器!使用Python 轻松识别验证码
本文介绍了使用Python进行验证码识别,主要包括安装Tesseract OCR和相关Python库,如`pytesseract`和`opencv-python`。通过Pillow加载验证码图片,使用`pytesseract`进行简单数字验证码识别。对于数字字母混合的验证码,先进行二值化和降噪处理,然后使用`cv2.findContours`分割字符并分别识别。这种方法适用于自动化测试和爬虫中的验证码处理。
14 2
|
3天前
|
分布式计算 调度 异构计算
Python 数学应用(四)(4)
Python 数学应用(四)
10 4
|
3天前
|
消息中间件 Kafka Python
Python 数学应用(四)(3)
Python 数学应用(四)
21 5
|
3天前
|
存储 传感器 数据可视化
Python 数学应用(四)(2)
Python 数学应用(四)
5 0
Python 数学应用(四)(2)
|
3天前
|
存储 消息中间件 Kafka
Python 数学应用(四)(1)
Python 数学应用(四)
10 2
|
3天前
|
机器学习/深度学习 存储 算法
Python 数学应用(三)(4)
Python 数学应用(三)
10 2
|
3天前
|
存储 算法 决策智能
Python 数学应用(三)(3)
Python 数学应用(三)
9 2
Python 数学应用(三)(3)
|
3天前
|
存储 资源调度 算法
Python 数学应用(三)(2)
Python 数学应用(三)
9 1
|
3天前
|
存储 机器学习/深度学习 前端开发
Python 数学应用(三)(1)
Python 数学应用(三)
12 2