找出输入的密码强度等级

您的任务是创建一个功能,在注册过程中检查密码的质量。 密码可以是任何长度,由大写字母、小写字母和数字组成。-如果密码包含大写字母、小写字母和数字,则密码被视为“强”。-如果密码包含两个可能的字符选项,则为“中等”质量。-如果密码仅由其中一个字符选项组成,则为“弱”。 该函数应返回以下字符串之一,具体取决于输入密码的质量。-“强”,-“中等”-“弱”


def check_password(inPassword):
    # fill your codes after this line
    


    # end of your codes

# do not modify
if __name__ == "__main__":
    inPassword = input()
    print(check_password(inPassword))

不使用正则表达式,直接对字符串做按字符判断,当已满足强等级则不再判断,否则继续判断。
代码如下,如果有用,望采纳,谢谢!

def check_password(inPassword):
    # fill your codes after this line
    s=[0,0,0]
    for c in inPassword:
        if c >= '0' and c <= '9':
            s[0]=1
        if c >= 'A' and c <= 'Z':
            s[1]=1
        if c >= 'a' and c <= 'z':
            s[2]=1
        if sum(s) == 3:
            break
    if sum(s) == 3:
       return '强'
    if sum(s) == 2:
       return '中等'
    return '弱'
    # end of your codes
# do not modify
if __name__ == "__main__":
    inPassword = input()
    print(check_password(inPassword))

img

img

def check_password(inPassword):
    haveUpper = False
    haveLowwer = False
    havaDig = False
    for i in inPassword:
        if i.isdigit():
            havaDig = True
        elif i.isupper():
            haveUpper = True
        elif i.islower():
            haveLowwer = True

    pingfen = 0
    if haveUpper:
        pingfen += 1
    if haveLowwer:
        pingfen += 1
    if havaDig:
        pingfen += 1

    if pingfen == 0 or pingfen == 1:
        return "密码强度弱"
    elif pingfen == 2:
        return "密码强度中"
    else:
        return "密码强度高"


# fill your codes after this line
# end of your codes
# do not modify
if __name__ == "__main__":
    inPassword = input()
    print(check_password(inPassword))

一个简单的方法,数字,小写字母,大写字母的ascii码范围是不同的,利用这一点,密码强度初始为0,遍历密码串,发现小写字母加一,发现数字再加一,发小大写字母再加一,到3或密码串结束即可输出强度,小于等于1若,2为中,3为强,再扩展一下,可以在增加特殊字符等等,进一步提高强度。

很简单的一个检测函数,在用户输入时检测密码是否有数字、小写字母、大写字母、特殊符号,根据输入判断密码强度。
其中使用了事件:oninput 、 onpropertychange 来监听输入框值变化。

/**
 * @param input (密码框)
 * @param notice (文本提示)
 * 检测密码强度  供参考
**/
function checkPasswordStrength(input,notice){
    var str = ['密码强度:弱','密码强度:中','密码强度:强'],
    getStrength = function(str){
        var strength = 0;
        if (str.length < 6) return strength;
        if (/\d/.test(str)) strength++; //数字            
        if (/[a-z]/.test(str)) strength++; //小写            
        if (/[A-Z]/.test(str)) strength++; //大写             
        if (/\W/.test(str)) strength++; //特殊字符
        switch (strength) {
            case 1:
                return 1;
            break;
            case 2:
                return 2;
            break;
            case 3:
            case 4:
                return str.length < 12 ? 3 : 4
            break;
        }                   
    },
    strong;
    input.oninput = input.onpropertychange = function(){
        strong = getStrength(input.value);
        switch (strong){
            case 0:
                notice.innerHTML = '';  
            break;
            case 1:
            case 2:
                notice.innerHTML = str[0];  
            break;
            case 3:
                notice.innerHTML = str[1];  
            break;
            case 4:
                notice.innerHTML = str[2];  
            break;
        }
    }
}
 
//use
var input = document.getElementById('password'), notice = document.getElementById('notice');    
checkPasswordStrength(input,notice);        }

功能实现代码:


#!/usr/bin/env python
# -*- coding: utf-8 -*-


"""
一 校验规则

规则1 密码长度8位以上

规则2 密码需包含数字

规则3 密码需包含大小写字母

规则4 密码需包含特殊字符['+', '-', '*', '/', '_', '&', '%', ',']

规则5 校验5次不通过则强制退出
"""

import time as tm


class FileTool():
    """
      文件工具类
    """
    def __init__(self, filepath):
        self.filepath = filepath

    def write_to_file(self, content):
        with open(self.filepath, 'a') as f:
            f.write(content)

    def read_from_file(self):
        with open(self.filepath, 'r') as f:
            content = f.readlines()
        return content


class PasswordTool():
    """
      密码工具类
    """
    def __init__(self, password):
        self.password = password
        self.strength_level = 0

    def check_number_exist(self):
        """
          判断是否含数字
        """
        has_number = False
        for c in self.password:
            if c.isnumeric():
                has_number = True
                break
        return has_number

    def check_letter_exist(self):
        """
          判断是否含字母
        """
        has_upper_letter = False
        has_lower_letter = False
        for c in self.password:
            if c.isupper():
                has_upper_letter = True
            elif c.islower():
                has_lower_letter = True
            has_both_letter = has_upper_letter and has_lower_letter
            if has_both_letter:
                break
        return has_both_letter

    def check_specialchar_exist(self):
        """
          判断是否包含特殊字符
        """
        has_specialchar = False
        specialchar_list = ['+', '-', '*', '/', '_', '&', '%', ',']
        for c in self.password:
            if c in specialchar_list:
                has_specialchar = True
                break
        return has_specialchar

    def process_password(self):
        """
          判断是否符合规则
        """
        # 规则1:长度至少8位
        if len(self.password) >= 8:
            self.strength_level += 1
        else:
            print('密码长度至少8位')

        # 规则2:必须包含数字
        if self.check_number_exist():
            self.strength_level += 1
        else:
            print('密码需要包含数字')

        # 规则3:必须包含大小写字母
        if self.check_letter_exist():
            self.strength_level += 1
        else:
            print('密码需要包含大小写字母')

        # 规则4:需要包含特殊字符
        if self.check_specialchar_exist():
            self.strength_level += 1
        else:
            print('密码需要包含至少一个特殊字符("+,-,*,/,_")')


def main():
    """
      主函数
    """
    try_times = 5
    pwd_strength_dict = {0: '弱', 1: '较弱', 2: '中', 3: '强', 4: '超强'}
    myfile = FileTool("password_7.0.txt")

    while try_times > 0:
        password = input('请输入密码: ')
        mypwdtool = PasswordTool(password)
        mypwdtool.process_password()

        now_time = tm.strftime("%Y-%m-%d %H:%M:%S", tm.localtime())
        myfile.write_to_file("日期:{} 密码:{} 强度:{}{}\n".format(now_time, password,
                                                                  mypwdtool.strength_level, pwd_strength_dict[mypwdtool.strength_level]))

        if mypwdtool.strength_level >= 4:
            print('恭喜!密码合格')
            break
        else:
            print('密码不合格')
            try_times -= 1
            print()
    if try_times <= 0:
        print('尝试次数过多,密码设置失败!')

    content = myfile.read_from_file()
    print(content)


if __name__ == "__main__":
    main()

结果截图:

请输入密码: 111AAAsdf_/
恭喜!密码合格
['日期:2022-12-22 09:22:55 密码:111AAAsdf_/ 强度:4超强\n']

Process finished with exit code 0

要实现这个功能,需要检查密码中是否包含大写字母、小写字母和数字。可以使用 Python 的内置函数 isupper()、islower() 和 isdigit() 来分别检查字符是否为大写字母、小写字母或数字。然后使用一个计数器来跟踪有多少字符选项出现在密码中。根据计数器的值,就可以返回相应的字符串了。
下面是实现这个功能的 Python 代码:

def check_password(inPassword):
    upper = False
    lower = False
    digit = False
    for ch in inPassword:
        if ch.isupper():
            upper = True
        elif ch.islower():
            lower = True
        elif ch.isdigit():
            digit = True
    
    if upper and lower and digit:
        return "强"
    elif (upper and lower) or (upper and digit) or (lower and digit):
        return "中等"
    else:
        return "弱"

# 测试
print(check_password("Abc123")) # 应输出 "强"
print(check_password("Abcdef")) # 应输出 "中等"
print(check_password("123456")) # 应输出 "弱"

在这段代码中,使用了一个循环来遍历密码中的每个字符。然后使用 isupper()、islower() 和 isdigit() 函数来判断字符是否为大写字母、小写字母或数字。如果是,就将相应的布尔变量设置为 True。最后,检查三个布尔变量的值,根据它们的组合情况返回相应的字符串。

若对你有帮助,望采纳。