Где косяк в коде?
Не срабатывает в неизвестном мне примере.
password = input()
valid = True
for i in password:
if not (i.isalnum() or i == '_'):
valid = False
break
if valid and len(password) >= 8 and password != password.upper() and password != password.lower():
print('+')
else:
print('-')
Условие:
Пользователь вводит пароль. Программа должна проверить его на корректность и устойчивость к взлому по следующим требованиям:
1) длина пароля не менее 8 символов
2) пароль состоит только из латинских букв, цифр и нижнего подчёркивания, другие символы не используются
3) в пароле есть хотя бы одна строчная буква, хотя бы одна прописная и хотя бы одна цифра
В ответе вывести +, если пароль соответствует всем требованиям, и -, если не соответствует.
AbCdEfGh
+
А по условию должна быть хотя бы одна цифра.
isalnum проверяет что строка состоит из ЛЮБЫХ букв - греческих, кириллических, арабских - не важно.
Проще всего использовать регулярное выражение.
import re
if re.math(r'^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[A-Za-z0-9_]{8,}$', input()):
print('+')
else:
print('-')
Но если хочешь вручную, то:
s = input()
def a(x): return 'A' <= x <= 'Z' # большая латинская буква
def b(x): return 'a' <= x <= 'z' # малая латинская буква
def c(x): return '0' <= x <= '9' # цифра
if (len(s) >= 8 and
all(map(lambda x: a(x) or b(x) or c(x) or x == '_', s)) and
any(map(a, s)) and any(map(b, s)) and any(map(c, s))):
print('+')
else:
print('-')
password = input()
valid = True
has_digit = False
has_upper = False
has_lower = False
for i in password:
if i.isdigit():
has_digit = True
elif i.isupper():
has_upper = True
elif i.islower():
has_lower = True
elif i != '_':
valid = False
break
if valid and len(password) >= 8 and has_digit and has_upper and has_lower:
print('+')
else:
print('-')
хотя бы одна цифра
такой проверки в коде нет...
правило 3 некорректно проверяется