создание надежного пароля [Python] - PullRequest
0 голосов
/ 13 ноября 2018

Нужно создать функцию, которая проверяет надежность моего пароля, возникли проблемы с третьим вопросом.

  1. Оба введенных пароля идентичны.
  2. Пароль имеет длину> = 8 символов.

3.Если первые и последние символы пароля являются алфавитными, то первый символ пароля должен отличаться от буквенного алфавита до последнего символа пароля независимо от регистра.например, 1-ый символ - A, поэтому последний символ не может быть A или a.

def validate_password(first_pwd, second_pwd):
    #Checks if password are same
    if first_pwd == second_pwd:
        #Checks if password is greater or equal to 8 characters
        if len(first_pwd) >= 8:
            #Checks if last and first character are alphabetic 
            if first_pwd[0].islower() and first_pwd[-1].isupper() or first_pwd[0].isupper() and first_pwd[-1].islower():
                return True
            else:
                return False


print(validate_password("Abcd1234","Abcd1234"))

Как игнорировать цифры в конце пароля и смотреть на ближайшую буквенную букву, которая будет d.

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Я не эксперт, но как человек, который пытается постоянно совершенствоваться в python, рекомендуется писать слова вместо использования сокращений.

также проверяются функции проверки надежности пароля, только если пароль был таким же, как предыдущий, поэтому убедитесь, что вы взяли длину больше 8 из первой проверки

Вещи, на которые стоит обратить внимание:

islower, isalpha ЗДЕСЬ

с нижним () ЗДЕСЬ

и я рекомендую вам использовать регулярные выражения, потому что это сложная концепция, imo

import re

def validate_password(first_password, second_password):
    if first_password == second_password:
        # Cannot be the previous password
        return False

    letters = "".join(re.findall("[a-zA-Z]+", first_password))
    first_letter = letters[0]
    last_letter = letters[-1]
    if len(first_password) >= 8:
        if first_letter.lower() == last_letter.lower():
            # First character can't be the same as last character
            return False
        else:
            # Every test passed
            return True
    else:
        # password too short
        return False

print(validate_password("Abcd1234","Abcd1234"))
0 голосов
/ 13 ноября 2018

Вы можете попытаться решить это с помощью регулярного выражения.Это проверяет, равно ли первое вхождение буквы (без учета регистра) последнему вхождению буквы.

Вы должны адаптировать регулярное выражение или предложение if, если вы действительно хотите проверить первый символстрока или последняя.
Вы также можете сделать дополнительную проверку, чтобы увидеть, равен ли последний символ в pwd последней букве в списке символов ниже.

import re

def validate_password(first_pwd, second_pwd):
# Checks if password are same
if first_pwd == second_pwd:
    # Checks if password is greater or equal to 8 characters
    if len(first_pwd) >= 8:
        # get only the letters of the password
        chars = re.findall(r'[A-Za-z]', first_pwd)
        # compare first and last occurrence of letters in pwd
        if chars[0].islower() and chars[-1].isupper() or chars[0].isupper() and chars[-1].islower():
            return True
        else:
            return False


print(validate_password("Abcd1234","Abcd1234"))

Я тоже думаю, что может быть достаточно только проверить

if chars[0].upper() == chars[-1].upper(): # optional if needed: and first_pwd[-1].upper() == chars[-1].upper()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...