您的任务是创建一个功能,在注册过程中检查密码的质量。 密码可以是任何长度,由大写字母、小写字母和数字组成。-如果密码包含大写字母、小写字母和数字,则密码被视为“强”。-如果密码包含两个可能的字符选项,则为“中等”质量。-如果密码仅由其中一个字符选项组成,则为“弱”。 该函数应返回以下字符串之一,具体取决于输入密码的质量。-“强”,-“中等”-“弱”
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))
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。最后,检查三个布尔变量的值,根据它们的组合情况返回相应的字符串。
若对你有帮助,望采纳。