Непонятная ошибка. HELP!

-1mag1Neee

Новичок
Пользователь
Авг 29, 2021
5
0
1
Вообщем, написал простенькую функция которая проверяет пароль на требования!
Она выдала непонятную ошибку( Ошибка: 'bool' object is not callable )
В итоге, скопировал код с книжки и все-равно таже ошибка.
Код:
Python:
def create_password():
    password = input('Введите пароль: ')
    validation = valid_password(password)
    if validation():
        print('Пароль успешно создан!')
    else:
        print('Пароль не подходит требованиям!\nПопробуйте снова!')
        main()

def valid_password(password):
    correct_length  =  False
    has_uppercase  =  False
    has_lowercase  =  False
    has_digit  =  False
    if  len(password)  >=  7:
        correct_length  =  True
        for  ch  in  password:
            if ch.isupper():
                has_uppercase = True
            if ch.islower():
                has_lowercase = True
            if ch.isdigit():
                has_digit = True

    if correct_length  and  has_uppercase  and  \
        has_lowercase  and  has_digit:
        is_valid = True
    else:
        is_valid = False
    return is_valid


create_password()
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 583
457
83
код явно не полный, он не работает...
где функция main()?

ошибку выдает в if validation(): так как у вас нет такой функции, validation - это переменная, и ее нужно писать без скобок, то есть вот так
if validation:

вот так работает... но код кривой
Python:
def create_password():
    password = input('Введите пароль: ')
    validation = valid_password(password)
    if validation:
        print('Пароль успешно создан!')
    else:
        print('Пароль не подходит требованиям!\nПопробуйте снова!')
        create_password()


def valid_password(password):
    correct_length = False
    has_uppercase = False
    has_lowercase = False
    has_digit = False
    if len(password) >= 7:
        correct_length = True
        for ch in password:
            if ch.isupper():
                has_uppercase = True
            if ch.islower():
                has_lowercase = True
            if ch.isdigit():
                has_digit = True

    if correct_length and has_uppercase and \
            has_lowercase and has_digit:
        is_valid = True
    else:
        is_valid = False
    return is_valid


create_password()
 
Последнее редактирование:
  • Мне нравится
Реакции: -1mag1Neee

-1mag1Neee

Новичок
Пользователь
Авг 29, 2021
5
0
1
Точно, там не функция, а переменная.
На счет кривого кода не согласен. Это код из книги Тони Гедиса. По мне книга достойна внимания.
И спасибо за ответ!
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 583
457
83
Это код из книги
это не значит, что код хороший...
скорее он сильно упрощен для понимания...
можно было бы сделать лаконичнее
 

-1mag1Neee

Новичок
Пользователь
Авг 29, 2021
5
0
1
Понял, спасибо за помощь
 

Форум IT Специалистов