密码强度检查器python

时间:2017-09-01 01:16:28

标签: python

我写了一个脚本,检查未来用户提供的密码是否正确(一个大写和一个小写字母,一个数字,所有字符都是字母数字:

def check(password):
    word = list(password)
    war = 0
    if len(password) > 8 and len(password) < 24:
        war += 1
    if password.isalnum():
        war += 1
    for x in range ( 0, len(word)):
        if word[x] == word[x].upper() and word[x].isalpha():
            war += 1
            break
    for x in range ( 0, len(word)):
        if word[x] == word[x].lower() and word[x].isalpha():
            war += 1
            break
    for x in range ( 0, len(word)):
        if word[x].isdigit():
            war += 1
            break
    return war == 5

我想知道如何让它更短更简单,哪些python工具,关键字可以帮助? 在此先感谢,我是python的先生,并没有阅读文档

3 个答案:

答案 0 :(得分:1)

word = list(password)后跟for x in range(0, len(word)):之类的内容实际上并不是必需的。您可以轻松地执行for character in password:,跳过转换为列表,跳过创建索引等。然后比较变为if character.isalpha() and character == character.upper():之类的内容。使用零作为range()的第一个参数也是多余的。绝对值得花时间浏览python教程,因为所有这些都非常接近开头。

答案 1 :(得分:1)

您使用变量“war”来检查密码的强度,然后如果它等于5则返回True也是多余的。

如果任何条件不为True,您可以使用if语句,其中包含任何会取消密码资格的条件,并返回False。然后你可以在函数结束时返回True,因为只有在没有运行其他return语句时才会执行,即所有条件都为True。

例如:

if not password.isalnum():
    return False
if len(password) not in range(8, 25):
    return False
...
return True

答案 2 :(得分:0)

首先,不必像将密码转换为列表然后在列表的索引上进行迭代一样,您可以像这样遍历密码的每个字符-

for char in password:

下一步,因为即使单个条件为假,密码也会被取消资格,因此如果第一个条件为假,则无需检查所有其他条件。

因此,除了更新war变量之外,您还可以将if条件更改为会使密码无效的内容,并在其下方更改return False,以便在密码不合格之前跳过所有其他条件。 。最后return True,因为只有在没有其他return语句运行且密码合格的情况下,此命令才会运行。

此代码-

if not password.isalnum():
    return False

if len(password) not in range(8, 25):
    return False

return True