编写一个确定密码是否良好的函数。我们 将定义一个良好的密码,使其成为至少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
这是我提出的代码。但是,它似乎不起作用,我不知道为什么。有人能解释一下吗?我仍然是编程新手。
答案 0 :(得分:2)
我会考虑使用内置.isdigit(), .isupper(), and .islower()
函数的pythons,这样可以省去一些行来检查这些条件的密码。
此外,您应该将elif
替换为if
。您的代码现在的方式,如果满足条件,则不会检查其余代码。因此,如果您想要满足所有条件,您需要检查每个条件是否都是真的。
编辑:正如弗雷德在下面提到的,第二部分在技术上并不正确。虽然关于if
与elif
的陈述是正确的,但由于Fred提到的原因,不需要在代码中使用它。
答案 1 :(得分:0)
我相信使用“任何”方法会更好:
Converter<?,?>
答案 2 :(得分:0)
您需要将' num 'int列表转换为字符串列表。因为你无法比较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)])
答案 3 :(得分:0)
在做了一些运行和一些测试后,我进入了一个简单的解决方案,正如其他用户所说,str不等于数字,意思是0!=“0”,所以,你可以将第一个列表转换成这样做包含数字的str列表:
num = [str(i) for i in range(0,10)]
现在您的列表是:
=> ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
最后,当你尝试代码时:
(我改变了一点名称,让自己变得干净)
导入字符串 num = [str(i)for i in range(0,10)] 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