Top.Mail.Ru
Ответы

Где косяк в коде?

Не срабатывает в неизвестном мне примере.

1234567891011
 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) в пароле есть хотя бы одна строчная буква, хотя бы одна прописная и хотя бы одна цифра

В ответе вывести +, если пароль соответствует всем требованиям, и -, если не соответствует.

По дате
По Рейтингу
Аватар пользователя
Новичок
12
 AbCdEfGh
+ 

А по условию должна быть хотя бы одна цифра.

Аватар пользователя
Высший разум

isalnum проверяет что строка состоит из ЛЮБЫХ букв - греческих, кириллических, арабских - не важно.

Проще всего использовать регулярное выражение.

12345
 import re
if re.math(r'^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[A-Za-z0-9_]{8,}$', input()):
  print('+')
else:
  print('-') 

Но если хочешь вручную, то:

12345678910
 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('-') 
Аватар пользователя
Оракул
123456789101112131415161718192021
 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 некорректно проверяется