![](/img/trans.png)
[英]How to write a python function to check if a user input for a password is not strong?
[英]Password check(strong or weak)
编写确定密码是否正确的函数。 我们将一个好的密码定义为至少8个字符长,并且包含至少一个大写字母,至少一个小写字母和至少一个数字的密码。
import string
num = [i for i in range(0,10)]
letdown = list(string.ascii_lowercase)
letup = list(string.ascii_uppercase)
def good_password(password):
l1=[]
l2=[]
l3=[]
for char in password:
if char in num:
l1.append(char)
elif char in letdown:
l2.append(char)
elif char in letup:
l3.append(char)
if len(l1)>=1 and len(l2) >=1 and len(l3) >=1 and len(password) >=8:
return True
else:
return False
这是我提出的代码。 但是,它似乎不起作用,我无法说出原因。 谁能解释我? 我仍然是编程的新手。
我想研究使用内置于.isdigit(), .isupper(), and .islower()
函数中的.isdigit(), .isupper(), and .islower()
这可以为您节省一些行来检查那些条件的密码。
另外,您还应将if
替换为elif
。 您的代码现在是这样,一旦满足条件就不会检查其余代码。 因此,如果您希望满足所有条件,则需要检查每个条件是否正确。
编辑:正如弗雷德在下面指出的,第二部分在技术上不正确。 尽管有关if
vs. elif
的陈述是正确的,但出于Fred提到的原因,它不必在您的代码中使用。
我相信使用“ any”方法会更好:
any(_.islower() for _ in passwrod) # checks that at least 1 character is in lowercase
any(_.isupper() for _ in passwrod) # checks that at least 1 character is in uppercase
any(_.isdigit() for _ in passwrod) # checks that at least 1 character is a number
您需要将int的' num '列表转换为字符串列表。 因为您无法比较int和str
>>> '1' == 1
False
>>> '1' in [1,2]
False
更改
num = [i for i in range(0,10)]
至
num = map(str, [i for i in range(0,10)])
经过一些运行和测试之后,我得到了一个简单的解决方案,正如其他用户所说,str不等于数字,意味着0!=“ 0”,因此,您可以将第一个列表转换为通过执行以下操作来包含数字的str:
num = [str(i) for i in range(0,10)]
现在您的列表是:
=> ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
最后,当您尝试代码时:
(我稍微改了个名字,以使自己动听)
导入字符串num = [范围(0,10)中i的str(i)] letdown = list(string.ascii_lowercase)letup = list(string.ascii_uppercase)
def good_password(password):
hasNum=False
hasUp=False
hasDown=False
for char in password:
if char in num:
hasNum = True
if char in letdown:
hasDown = True
if char in letup:
hasUp = True
return hasNum and hasDown and hasUp and (len(password) >= 8)
good_password("Hoooooola1")
=> True
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.