二十一、Python函数小作业--密码强度检测

用户密码复杂度验证 (封装成函数)
长度超过8位(必须) +1分
包括大、小写字母.数字.其它符号,以上四种至少三种 +1分
不能有长度超过或等于3的子串重复 +1分
密码的评分等级,默认2分,以上条件满足一条加1分
返回密码的评分等级,及要改进的点:
如 return 3, ['长度小于8', '密码没有由3种以上字符组成'
password = input("Please input your password: ")
score = 2
reason=[]
def verify_len(str):
    if len(str)>8:
        global score
        score += 1
    else:
        reason.append('长度小于8')
def verify_kind(str):
    num = 0
    for i in str:
        if i.isdigit():
            num += 1
            break
    for i in str:
        if i.isupper():
            num += 1
            break
    for i in str:
        if i.islower():
            num += 1
            break
    for i in str:
        if i.isdigit() == False and i.isalpha() == False:
            num += 1
            break
    if num > 2:
        global score
        score += 1
    else:
        reason.append('密码由3种以下字符组成')
def cut2(s: str):
    global results
    results = []
    # x + 1 表示子字符串长度
    for x in range(len(s)):
        # i 表示偏移量
        for i in range(len(s) - x):
            if x == 0:
                results.append(s[i:i + x + 1])
            elif x < 2:
                for j in range(len(s) - x - i):
                    results.append(s[i] + s[j + x + i])
            else:
                for j in range(len(s) - x - i):
                    results.append(s[i:i+x] + s[j + x + i])
def verify_son():
    cut2(password)
    num = 0
    for i in results:
        if len(i)>2:
            if results.count(i)>1:
                print(i)
                reason.append("有超过长度为2的子串重复")
                num = 1
                break
    if num == 0 and len(password) >8:
        global  score
        score += 1


verify_len(password)
verify_kind(password)
verify_son()
print(score)
print(reason)

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值