Нужна помощь для проверки пароля со сложными условиями - PullRequest
0 голосов
/ 12 февраля 2020

Я только начинаю с 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")

1 Ответ

0 голосов
/ 12 февраля 2020

Согласно Python документации

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


Возвращает самый низкий индекс в s, где подстрока sub находится так, что sub полностью содержится в s [start: end]. Возвращает -1 при ошибке. Значения по умолчанию для начала и конца и интерпретация отрицательных значений такие же, как для ломтиков.


Делая это неправильным инструментом для работы.

Вы проверяете, все ли строки majuscule, minuscule и char в пароле и возвращая индекс, по которому они находятся.
Вместо этого вам нужно перебирать символы и подсчитывать совпадения в строке пароля. Выход:

λ 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!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...