python 简单密码校验

# 判断字符串长度是否在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
        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位的子串重复
        # 注意本函数当发现包含重复的4位以上的子串时返回的时False


def check_rep(pwd):
    n = len(pwd)
    # 通过循环依次取出4个字符组成的子串
    # 只要它后面的字符串包含有一个这样的字串,重复就为真
    for i in range(n - 4):
        # 取4个字符组成子串str1
        str1 = pwd[i:i + 4]
        # 取在str1后面剩余的所有字符作为str2
        str2 = pwd[i + 4::]
        # 如果str2 中存在一个str1,说明重复
        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('退出程序.....')
        # 调用函数检查密码的位数
        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('密码正确')
        break

1.代码开头定义了check_len()、check()和check_rep()三个函数,check_len函数用于检测密码长度是否超过或等于8位。check()函数用于检测密码是否由大小写字母、数字和其他符号组成,该函数运用islower()、isupper()、isdigit()和isspace()等函数判断每个字符的性质,一旦有字符符合某个条件,就把该函数生成的一个列表变量check

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

posted @ 2022-08-20 23:05  剑尊  阅读(1265)  评论(0编辑  收藏  举报