Проверка пароля на соответствие условиям
Прошу помочь в решении задания. По 3 и 4 заданию для самостоятельной проверки выходит сообщение
'Ошибка. Запрещенный спецсимвол'
из кода, хотя должен давать рекомендации для его усиления. Как корректно сравнить символы из введённого пароля со всеми допустимыми символами?
Пробовал через
cond5=all(char in set(password) for char in set(acceptable))
(далее if all(cond5) is False, в коде использовал вариант ниже с result)
или
result=[]
for x in p:
result.append(x in a)
и все равно результат получается False, хотя каждый из символов Q123wer123tY содержится в допустимых символах
password=input('Введите пароль:')
digits='1234567890'
upper_letters='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
lower_letters='abcdefghijklmnopqrstuvwxyz'
symbols='!@#$%^&*()-+'
message="Слабый пароль.Рекомендации:"
acceptable=upper_letters+lower_letters+symbols
cond1=(len(password))>11
cond2=all(char in password for char in symbols)
cond3=all(char in password for char in upper_letters)
cond4=all(char in password for char in digits)
cond5=all(char in set(password) for char in set(acceptable))
rules=[cond1,cond2,cond3,cond4,сond5]
p=set(password)
a=set(acceptable)
result=[]
for x in p:
result.append(x in a)
if all(result) is False:
print('Ошибка. Запрещенный спецсимвол')
elif all(result) is True:
if cond1 is False:
message+=' увеличить число символов -'+" "+str(12-len(password))+','
if cond2 is False:
message+=' '+'добавить 1 спецсимвол,'
if cond3 is False:
message+=' '+'добавить 1 заглавную букву,'
if cond4 is False:
message+=' '+'добавить 1 цифру,'
print(message[:(len(message)-1)])
else:
if all(rules) is True:
print('Сильный пароль')
Ответы (1 шт):
Вы забыли digits включить в acceptable. Ну и с проверками чего-то намудрено.
def check_password(password):
#password = input('Введите пароль:')
digits = '1234567890'
upper_letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
lower_letters = 'abcdefghijklmnopqrstuvwxyz'
symbols = '!@#$%^&*()-+'
acceptable = digits+upper_letters+lower_letters+symbols
passwd = set(password)
if any(char not in acceptable for char in passwd):
print('Ошибка. Запрещенный спецсимвол')
else:
recommendations = []
if len(password) < 12:
recommendations.append(f'увеличить число символов - {12-len(password)}')
for what, message in ((digits, 'цифру'),
(symbols, 'спецсимвол'),
(upper_letters, 'заглавную букву'),
(lower_letters, 'строчную букву')):
if all(char not in what for char in passwd):
recommendations.append(f'добавить 1 {message}')
if recommendations:
print("Слабый пароль. Рекомендации:", ", ".join(recommendations))
else:
print('Сильный пароль.')
#tests
for test in ("qwety", "Qwert_Y", "Q123wer123tY", "A^B@C*D", "@PowerRangers123@"):
print("Password:", test)
check_password(test)
print()
(Оформлено в функцию исключительно ради тестов.)
Password: qwety
Слабый пароль. Рекомендации: увеличить число символов - 7, добавить 1 цифру, добавить 1 спецсимвол, добавить 1 заглавную буквуPassword: Qwert_Y
Ошибка. Запрещенный спецсимволPassword: Q123wer123tY
Слабый пароль. Рекомендации: добавить 1 спецсимволPassword: A^B@C*D
Слабый пароль. Рекомендации: увеличить число символов - 5, добавить 1 цифру, добавить 1 строчную буквуPassword: @PowerRangers123@
Сильный пароль.

