Проверка пароля ASCII в Python - PullRequest
0 голосов
/ 27 марта 2020

У меня есть задание для моего колледжа (я новичок), которое просит вас подтвердить пароль, используя символы ASCII. Я пытался использовать простой код, и он работал, однако он продолжал пропускать мою часть ASCII. Список требований:

1.4 Вызов функции для получения действительного пароля OUT: пароль
1.4.1 L oop до тех пор, пока пароль не будет действительным 1.4.2 Попросите пользователя ввести пароль 1.4.3 Убедитесь, что первый символ является заглавной буквой (значения ASCII от 65 до 90). 1.4.4 Убедитесь, что последний символ равен #, $ или% (значения ASCII от 35 до 37). 1.4.5 Верните действительный пароль

U = [65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90]
upCase = ''.join(chr(i) for i in U)
print(upCase) #Ensure it is working

def passVal(userPass):
    SpecialSym = ["#", "$", "%"]
    val = True

#Common way to validate password VVV
    if len(userPass) < 8:
        print("Length of password should be at least 8")
        val = False
    if not any(char.isdigit() for char in userPass):
        print("Password should have at least one numeral")
        val = False

#I Tried same with ASCII (and other methods too) but it seemed to be skipping this part VVV
    if not any(upCase for char in userPass):
        print("Password should have at least one uppercase letter")
        val = False


    if not any(char.islower() for char in userPass):
        print("Password should have at least one lowercase letter")
        val = False
    if not any(char in SpecialSym for char in userPass):
        print("Password should have at least on fo the symbols $%#")
        val = False
    if val:
        return val


def password():
    if (passVal(userPass)):
        print("Password is valid")
    else:
        print("Invalid Password !!")

userPass = input("Pass: ")
password()

1 Ответ

0 голосов
/ 27 марта 2020

С Python 3.7 вы можете использовать str.isascii() ...

>>> word = 'asciiString'
>>> word.isascii()
True

В противном случае вы можете использовать:

>>> all([ord(c) < 128 for c in word])
True

Поскольку все символы ASCII имеют порядковый номер ( ord) значение меньше 128 (0 -> 127): https://en.wikipedia.org/wiki/ASCII

Таким образом, ваша логика c будет либо будет (3,7 +):

if word.isascii():
    # string is ascii
...

Или:

if all([ord(c) < 128 for c in word]):
    # string is ascii
else:
    # string contains at least one non-ascii character
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...