密码检查(强或弱)

2024-04-26 07:58:49 发布

您现在位置:Python中文网/ 问答频道 /正文

编写一个函数来确定密码是否正确。我们 将定义一个至少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

这就是我想出的代码。然而,它似乎不起作用,我不知道为什么。有人能解释一下吗?我还是个编程新手。你知道吗


Tags: andinl1forstringlenasciipassword
3条回答

您需要将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不等于num,意思是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)] 下泄=列表(string.ascii\u小写) letup=列表(string.ascii\u大写)你知道吗

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

我想研究一下如何使用python内置的.isdigit(), .isupper(), and .islower()函数,这样可以节省一些代码来检查这些条件下的密码。你知道吗

你也应该用if替换你的elif。现在你的代码是这样的,一旦一个条件被满足,它就不会检查其余的。所以,如果你想满足所有的条件,你需要检查每一个条件是否正确。你知道吗

编辑:正如弗雷德在下面指出的,这篇文章的第二部分在技术上是不正确的。尽管关于ifelif的语句是正确的,但是由于Fred提到的原因,不需要在代码中使用它。你知道吗

相关问题 更多 >