繁体   English   中英

密码检查(强或弱)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM