Пароль может содержать только буквы и цифры - PullRequest
0 голосов
/ 27 октября 2019

Назначение:

Напишите программу на Python, которая предлагает пользователю создать учетную запись пользователя и проверяет допустимость предоставленных имени пользователя и пароля.

Примечание. Пароль должен начинатьсяс буквой и состоит только из букв, цифр и символа подчеркивания "_". Длина должна быть от 8 до 16.

У меня проблемы с "пароль должен начинаться с буквы и состоит только из букв, цифр и символа подчеркивания" _ ".". (Я знаю, что это не самый элегантный код)

username=input("Please enter a username:")
usepass=input("Please enter a password:")
#username
if len(username)<6 or len(username)>12:
    print("Username is incorrect length. Your username must be between 6 and 12 characters.")
if username.isalnum() == False:
        print("Username must only contain letters and numbers.")
username1=username[0]
if username1.isnumeric()== True :
    print ("Your username must start with a letter")
#password
if len(usepass)<8 or len(usepass)>16:
    print("Password is incorrect length. Your password must be between 8 and 16 characters.")
usepass1=usepass[0]
if usepass1.isalpha()==False:
    print("Your password must start with a letter")
if usepass.isalnum()==False:
    print("Your password must only contain numbers, letters and underscores.")

Ответы [ 3 ]

0 голосов
/ 28 октября 2019

Ваша первоначальная реализация сообщила об ошибке, если весь пароль не содержит буквенных символов ИЛИ НЕ содержит подчеркивания. Это не заявленное требование, поскольку не требуется для того, чтобы содержать подчеркивание, просто может содержать его.

Это хороший кандидат для регулярного выражения.

if re.match('^[a-zA-Z][a-zA-Z0-9_]*$', usepass):
    print("It's a match!")
else:
    print("Your password must only contain numbers, letters and underscores.")

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

0 голосов
/ 31 октября 2019

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

rmveudrsre = usepass.replace("_", "")
if rmveudrsre.isalnum()==False:
    print("Your password must only contain numbers, letters and underscores.")
0 голосов
/ 27 октября 2019

Вместо того, чтобы использовать метод isalnum, давайте попробуем решить это самостоятельно. Главное, чего вам не хватает, это петля. Например, если я хочу проверить каждую букву, я могу зациклить буквы и использовать метод ord, чтобы убедиться, что каждая буква находится в правильном диапазоне.

Вы должны структурировать свои методы для проверки каждой буквыиз уникальных условий, как указано в вопросе. Если он прошел все условия, вы можете вернуть true в конце.

def is_valid_user(username):

    # a user name should start with a letter
    is_first_lower = ord('a') <= ord(username[0]) <= ord('z')
    is_first_upper = ord('A') <= ord(username[0]) <= ord('Z')
    if not (is_first_lower or is_first_upper):
        return False

    # only consists of letters and numbers
    for character in username:
        is_lower = ord('a') <= ord(character) <= ord('z')
        is_upper = ord('A') <= ord(character) <= ord('Z')
        is_number = ord('0') <= ord(character) <= ord('9')

        if not (is_lower or is_upper or is_number):
            return False

    # check the other cases like "The length should be between 6 and 12"
    ...

    # All the tests passed so return true
    return True

Теперь вы можете подумать о том, как создать is_valid_password метод. Этот метод должен быть похожим, но иметь несколько разных условий. Бонус : подумайте, как можно использовать другие методы для совместного использования чеков между методами is_valid_user и is_valid_password.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...