我正在尝试创建一个要求您输入密码的系统.如果它全部较低,则较高或数字则打印较弱,如果是两个条件,那么它是med,如果所有条件都满足则很强.它似乎没有用.
然而,媒介没有弱势和强势的工作.
我不知道我哪里出错了.
def password():
print ('enter password')
print ()
print ()
print ('the password must be at least 6, and no more than 12 characters long')
print ()
password = input ('type your password ....')
weak = 'weak'
med = 'medium'
strong = 'strong'
if len(password) >12:
print ('password is too long It must be between 6 and 12 characters')
elif len(password) <6:
print ('password is too short It must be between 6 and 12 characters')
elif len(password) >=6 and len(password) <= 12:
print ('password ok')
if password.lower()== password or password.upper()==password or password.isalnum()==password:
print ('password is', weak)
elif password.lower()== password and password.upper()==password or password.isalnum()==password:
print ('password is', med)
else:
password.lower()== password and password.upper()==password and password.isalnum()==password
print ('password is', strong)
Run Code Online (Sandbox Code Playgroud)
ePi*_*314 23
Holá
最好的方法是使用正则表达式搜索
这是我目前使用的函数
def password_check(password):
"""
Verify the strength of 'password'
Returns a dict indicating the wrong criteria
A password is considered strong if:
8 characters length or more
1 digit or more
1 symbol or more
1 uppercase letter or more
1 lowercase letter or more
"""
# calculating the length
length_error = len(password) < 8
# searching for digits
digit_error = re.search(r"\d", password) is None
# searching for uppercase
uppercase_error = re.search(r"[A-Z]", password) is None
# searching for lowercase
lowercase_error = re.search(r"[a-z]", password) is None
# searching for symbols
symbol_error = re.search(r"[ !#$%&'()*+,-./[\\\]^_`{|}~"+r'"]', password) is None
# overall result
password_ok = not ( length_error or digit_error or uppercase_error or lowercase_error or symbol_error )
return {
'password_ok' : password_ok,
'length_error' : length_error,
'digit_error' : digit_error,
'uppercase_error' : uppercase_error,
'lowercase_error' : lowercase_error,
'symbol_error' : symbol_error,
}
Run Code Online (Sandbox Code Playgroud)
编辑:
在这里提出Lukasz的建议是对特殊符号条件验证的更新
symbol_error = re.search(r"\W", password) is None
Run Code Online (Sandbox Code Playgroud)
password.isalnum()
返回一个布尔值,因此password.isalnum()==password
将始终为False
。
只需省略==password
部分:
if password.lower()== password or password.upper()==password or password.isalnum():
# ...
Run Code Online (Sandbox Code Playgroud)
其次,它永远不能同时是所有上限和下限,也不能是全部上限和下限,也不能全部都是下限和下限,因此第二个条件(中)是不可能的。也许您应该寻找一些大写,小写和数字的出现?
但是,首先要解决的另一个问题。您正在测试密码是否为字母数字,仅由字符和/或数字组成。如果只想测试数字,请使用.isdigit()
。
您可能需要熟悉字符串方法。有方便的.islower()
和.isupper()
可用的方法,你可能会想尝试,例如:
>>> 'abc'.islower()
True
>>> 'abc123'.islower()
True
>>> 'Abc123'.islower()
False
>>> 'ABC'.isupper()
True
>>> 'ABC123'.isupper()
True
>>> 'Abc123'.isupper()
False
Run Code Online (Sandbox Code Playgroud)
与使用相比password.upper() == password
,这些方法更快捷,更省力,以下将对其进行测试:
if password.isupper() or password.islower() or password.isdigit():
# very weak indeed
Run Code Online (Sandbox Code Playgroud)
您要学习的下一个技巧是遍历字符串,以便可以测试各个字符:
>>> [c.isdigit() for c in 'abc123']
[False, False, False, True, True, True]
Run Code Online (Sandbox Code Playgroud)
如果将其与any()
函数结合使用,则可以测试是否有一些数字字符:
>>> any(c.isdigit() for c in 'abc123')
True
>>> any(c.isdigit() for c in 'abc')
False
Run Code Online (Sandbox Code Playgroud)
我认为您在测试密码强度时会发现这些技巧很方便。
归档时间: |
|
查看次数: |
58552 次 |
最近记录: |