需要复杂条件下密码验证器的帮助

Need help for password validator with complex conditions

我刚开始 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")

根据Python documentation

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


Return the lowest index in s where the substring sub is found such that sub is wholly contained in s[start:end]. Return -1 on failure. Defaults for start and end and interpretation of negative values is the same as for slices.


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

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

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): Whosebug
No Caps
Entrez un mot de passe (Doit contenir 10 caractères avec 2 majuscules, 2 minuscules et 2 caractères spéciaux): Whosebug
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!