[英]How to write a python function to check if a user input for a password is not strong?
我需要为赋值编写一个代码,该代码将接受用户输入密码(作为字符串)并让用户知道输入的哪些元素使密码变弱。
要求密码长度至少为 8 个字符,包含大小写字母,并包含数字。 我的代码不需要确定密码是否强,只要弱就为什么弱。
到目前为止,我编写的代码如下:
size = len(password)
if size < 8:
print('not long enough')
if password.isalnum():
pass
else:
for x in password:
if x.isupper():
pass
else:
print('no upper case')
for y in password:
if y.islower():
pass
else:
print('no lower case')
return
在我的测试运行返回多行“无大写”和“无小写”后,我做了一些更改并使用了 .isalnum 运算符。
如果有人能把我推向正确的方向,我将不胜感激,因为这让我有点困惑
没有正则表达式,您可以使用any
和str.isnumeric
if not any(map(str.isnumeric, password):
print('No numbers')
我宁愿 go 与正则表达式。
In [122]: def validate(password):
...: return True if re.match("(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}", password) else False
...:
In [123]: validate("helloas")
Out[123]: False
In [124]: validate("helH12asfgvGh")
Out[124]: True
(其他答案已经给了你很好的答案,所以这不是一个完整的答案,它只是对出了什么问题的解释。)导致问题的代码区域是
for x in password:
if x.isupper():
pass
else:
print('no upper case')
for y in password:
if y.islower():
pass
else:
print('no lower case')
您正在遍历整个密码,检查每个字符是否为大写,如果不是,则打印出“无大写”。 问题是如果单词的单个字符不是大写,“that_character_that_isn't_uppercase”.isupper() 将返回 false,并打印错误语句。 例如,密码 PaSSWORD 将返回一个“非大写”,因为“a”.isupper() 为 False。 密码密码将返回 7 个“非大写”,因为字符 p、a、s、s、w、o、r 都是小写的。 x.islower() 测试也发生了同样的事情,您会看到每个单独的字符是否都是小写的。 我会实现这样的事情:
#password.islower() will return true if all the entire string is lowercase(and thus not uppercase)
if password.islower():
print("No upper case")
elif password.isupper():
print("No lower case")
#Again, password.isupper() sees if all letters are uppercase(which means that there is no lowercase letters).
希望这有帮助!
网上有很多 python 密码检查器,例如: https://www.geeksforgeeks.org/password-validation-in-python/
这是一个快速控制台程序,您可以这样调用:
$ python3 password_checker.py "Testf7788790##$"
Testing password: Testf7788790##$
Password is valid: True
$ python3 password_checker.py "insecurePassword"
Testing password: insecurePassword
Password should contain at least one number
Password is valid: False
password_checker.py
的内容:
#!/usr/bin/python
import sys
def password_check(passwd):
symbols = ['!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '+', '=']
isValid = False
if len(passwd) < 10:
print('Password should be at least 10 characters')
elif not any(char.isdigit() for char in passwd):
print('Password should contain at least one number')
elif not any(char.isupper() for char in passwd):
print('Password should contain at least one uppercase character')
elif not any(char.islower() for char in passwd):
print('Password should contain at least one lowercase character')
elif not any(char in symbols for char in passwd):
print('Password should contain at least one special character from list: ', symbols)
else:
isValid = True
return isValid
arguments = sys.argv
if len(arguments) < 2:
print('No password could be parsed by argv')
valid_password = False
else:
password = arguments[1]
print('Testing password: ', password)
valid_password = password_check(password)
print('Password is valid: ', valid_password)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.