python实例 第1章 第4节 简单密码校验

1.4.1 编程要点密码校验主要用到判断字符性质的函数:

        1)vbool=str.isdigit()函数判断字符串或字符是否是数字,其中str是字符或字符串,返回值vbool是布尔变量,如果str是数字返回True,否则返回False

        2)vbool=str.isalpha()函数判断字符串或字符是都是字母

        3)vbool=str.isspace()函数判断字符串或字符是否是空格

        4)vbool=str.isupper()函数判断字符串或字符是否是大写字母

        5)vbool=str.islower()函数判断字符串或字符是否是小写字母

1.4.2 代码实现

#判断字符串是否在8位以上
def check_len(pwd):
    if len(pwd)>=8:
        return True
    else:
        return False
#检查字符串是否是由大小写字母、数字、其他符号组成
def check (pwd) :
    #初始化一个列表变量
    check = [0, 0, 0, 0]
    for char in pwd:
        #如果字符是小写,将check[0]的值置为1
        if char.islower():
            check[0]=1
        #如果字符大写,将check[1]置为1
        if char.isupper():
            check[1]=1
        #如果字符是数字,将check[2]的值置为1
        if char.isdigit():
            check[2]=1
        #如果字符是其他字符,也就是字母、数字或空白字符之外的符号,将check[3]的值置为1
        if not (char.isalpha()|char.isdigit()|char.isspace()):
            check[3]=1
    print(check)
    #当列表中4个元素项的值都是1,也就是各项和位4,
    #说明字符串符合四个条件(由大小写字母、数字和其他符号组成)
    #当列表中4个元素项的和小于4,说明不全符合条件
    if sum(check)<4:
        return False
    else:
        return True
    #检查字符串是否包含重复的、4位以上的子串,
    #这里只判断4位的子串是否有重复,
    #考虑到密码组成规则,当4位以上的子串重复时,必定有4位的子串重复
def check_rep(pwd):
    n=len(pwd)
    for i in range (n-4):
        str1=pwd[i:i+4]
        str2=pwd[i+4::]
        if str1 in str2:
            return False
    return True
if __name__=='__main__':
    msg='''
    请设置密码,密码要求符合以下条件
    1.密码长度不小于8位
    2.密码必须由大小写字母、数字、其它符号组成
    3.密码中不能重复包含长度超过4的子串
    '''
    print(msg)
    while True:
        #提示录入密码
        pwd=input('请输入密码:')
        #如果录入q,退出程序
        if pwd=='q':
            print('退出程序...')
            break
        #调用函数检查密码的位数
        vcheck1=check_len(pwd)
        if not vcheck1:
            print('密码长度不够8位!请重新录入\n')
            continue
        #调用函数检查密码是否是由大小写字母、数字和其他符号组成
        vcheck2=check(pwd)
        if not vcheck2:
            print('密码必须由大小写字母、数字和其他符号组成!请重新录入\n')
            continue
        #调用函数检查密码是否有重复子串
        vcheck3=check_rep(pwd)
        if not vcheck3:
            print('密码包含两个以上重复子串(4位以上的子串)!请查看并重新录入\n')
            continue
        print('密码正确')


1.4.3 总结

        代码定义了三个函数:

        1)check_len()函数检测密码的长度是否大于大于8位

        2)check()函数用于检测密码是否由大小写字母、数字和其他符号组成

        3)check_rep()函数检测密码是否包含子串

主函数main调用三个函数对密码一次检测,如果密码不能通过校验,则给出提示信息,让用户重新录入,直至密码符合要求,提示“密码正确”,退出程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值