首页 > 解决方案 > 需要复杂条件下的密码验证器的帮助

问题描述

我刚开始使用 python,我正在尝试为密码构建一个简单的 python 验证。我希望密码包含 2 个大写字母、2 个小写字母和 2 个特殊字符。密码的最小长度必须为 10。这是我目前所拥有的。该代码没有给我任何错误,但我无法得到一个好的结果。非常感谢您的帮助,因此我可以理解我在这里做错了什么。

def motdepasse(motdepasse):
majuscule = 'ABCDEFGHIJKLMNOPQRSTUVXYZ'
minuscule = 'abcdefghijklmnopqrstuvxyz'
char = '[@_!#$%^&*()<>?/\|}{~:]'

while True:
    motdepasse = input("Entrez un mot de passe (Doit contenir 10 caractères avec 2 majuscules, 2 minuscules et 2 caractères spéciaux): ")
    valid = 0

    if len(motdepasse) < 10:
        print("Entrez un mot de passe valide!")

        continue

    elif not (motdepasse.find(majuscule)) >= 2  :
        print("Entrez un mot de passe valide!")

        continue

    elif not (motdepasse.find(minuscule)) >= 2:
        print("Entrez un mot de passe valide!")

        continue

    elif not (motdepasse.find(char)) >= 2 :
        print("Entrez un mot de passe valide!")

        continue

    else:
        valid = True
        break
if valid == 0:
    print("Mot de passe valide")

标签: pythonpasswords

解决方案


根据Python 文档

string.find(s, sub[, start[, end]]


返回 s 中找到子字符串 sub 的最低索引,使得 sub 完全包含在 s[start:end] 中。失败时返回 -1。开始和结束的默认值以及负值的解释与切片相同。


使它成为工作的错误工具。

您正在检查整个majuscule,minusculechar字符串是否在密码中并返回它们所在的索引。
您想要做的是迭代字符并计算密码字符串中的匹配项。这样的事情应该做

majuscule = 'ABCDEFGHIJKLMNOPQRSTUVXYZ'
minuscule = 'abcdefghijklmnopqrstuvxyz'
char = '[@_!#$%^&*()<>?/\|}{~:]'

while True:
    motdepasse = input("Entrez un mot de passe (Doit contenir 10 caractères avec 2 majuscules, 2 minuscules et 2 caractères spéciaux): ")
    valid = 0

    if len(motdepasse) < 10:
        print("Invalid Length")
        continue

    elif not len([x for x in motdepasse if x in majuscule]) >= 2:
        print("No Caps")
        continue

    elif not len([x for x in motdepasse if x in minuscule]) >= 2:
        print("Invalid lowercase")
        continue

    elif not len([x for x in motdepasse if x in char]) >= 2 :
        print("Invalid specials")
        continue

    else:
        valid = True
        break
if valid == 0:
    print("Mot de passe valide")

输出:

λ python run.py
Entrez un mot de passe (Doit contenir 10 caractères avec 2 majuscules, 2 minuscules et 2 caractères spéciaux): Stack
Invalid Length
Entrez un mot de passe (Doit contenir 10 caractères avec 2 majuscules, 2 minuscules et 2 caractères spéciaux): stackoverflow
No Caps
Entrez un mot de passe (Doit contenir 10 caractères avec 2 majuscules, 2 minuscules et 2 caractères spéciaux): StackOverflow
Invalid specials
Entrez un mot de passe (Doit contenir 10 caractères avec 2 majuscules, 2 minuscules et 2 caractères spéciaux): Stack@Overflow!

推荐阅读