我正在尝试制作一个密码强度模拟器,要求用户输入密码,然后给出一个分数。
我正在使用:
islanum()
isdigit()
isupper()
尝试查看输入的密码有多好。
我不想返回布尔值,而是要评估密码的每个字符,然后程序将所有“True”值加起来并将其转换为分数。示例代码:
def upper_case():
points = int(0)
limit = 3
for each in pword:
if each.isupper():
points = points + 1
return points
else:
return 0
任何帮助将不胜感激!!谢谢!
答案 0 :(得分:3)
.isalnum()
,.isupper()
,.isdigit()
和朋友是Python中str
类型的方法,并且这样调用:
>>> s = "aBc123"
>>> s[0].isalnum()
True
>>> s[1].isupper()
True
>>> s[3].isdigit()
True
简单getscore()
功能:
s = "aBc123@!xY"
def getscore(s):
score = 0
for c in s:
if c.isupper():
score += 2
elif c.isdigit():
score += 2
elif c.isalpha():
score += 1
else:
score += 3
return score
print getscore(s)
<强>输出:强>
13
更好的版本:
s = "aBc123@!xY"
def getscore(s):
return len(s) + len([c for c in s if c.isdigit() or c.isupper() or not c.isalpha()])
print getscore(s)
<强>输出:强>
17
答案 1 :(得分:0)
您可以使用类似
的内容password = "SomePa$$wordYouWantToTest"
score = len([char for char in password if str(char).isupper() or str(char).isdigit() or not str(char).isalnum()])
这将计算password
中所有上部字符,所有数字和所有非字母数字字符,给出一个整数
测试结果:
>>>score
8
答案 2 :(得分:0)
使用正则表达式解决另一种解决方法:
#!/usr/bin/python
import re
def password_strength(p):
score = 0
if re.search('\d+',p):
score = score + 1
if re.search('[a-z]',p) and re.search('[A-Z]',p):
score = score + 1
if re.search('[$#@!]', p):
score = score + 1
return score
print password_strength('Jac@kpasswor01')