密码检查(强或弱)

时间:2018-01-25 16:17:00

标签: python function passwords

编写一个确定密码是否良好的函数。我们 将定义一个良好的密码,使其成为至少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

这是我提出的代码。但是,它似乎不起作用,我不知道为什么。有人能解释一下吗?我仍然是编程新手。

4 个答案:

答案 0 :(得分:2)

我会考虑使用内置.isdigit(), .isupper(), and .islower()函数的pythons,这样可以省去一些行来检查这些条件的密码。

此外,您应该将elif替换为if。您的代码现在的方式,如果满足条件,则不会检查其余代码。因此,如果您想要满足所有条件,您需要检查每个条件是否都是真的。

编辑:正如弗雷德在下面提到的,第二部分在技术上并不正确。虽然关于ifelif的陈述是正确的,但由于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