Почему программа дает на выходе None вместо необходимого return`a?

Программа должна проверить пароль, вернуть строку с указанием качества пароля, но самый тупой аргумент в виде "qwerty", который, по идее, должен падать еще на 2 проверке, идет до конца и выдает None. Кто-нибудь понимает, почему? (Проверки достаточно типичные: по типу длинны, состава (цифры и буквы))

def password_level(password):
    if len(password) < 6:
        return 'Недопустимый пароль'
    elif password.isalpha and (password.lower == password or password.upper == password):
        return 'Ненадежный пароль'
    elif not password.isalpha:
        return 'Ненадежный пароль'
    elif any(map(str.isdigit, password)) and (password.upper == password or password.lower == password):
        return 'Слабый пароль'
    elif any(map(str.isdigit, password)) and password.upper != password and password.lower != password:
        return 'Надежный пароль'
print(password_level("qwerty"))

Ответы (2 шт):

Автор решения: R S

Результат None появляется из-за того, что ни одно из условий не выполняется.

Исправленный код:

def password_level(password):
    if len(password) < 6:
        return 'Недопустимый пароль'
    elif password.isalpha and (password.lower() == password or password.upper() == password):
        return 'Ненадежный пароль'
    elif not password.isalpha:
        return 'Ненадежный пароль'
    elif any(map(str.isdigit, password)) and (password.upper() == password or password.lower() == password):
        return 'Слабый пароль'
    elif any(map(str.isdigit, password)) and password.upper() != password and password.lower() != password:
        return 'Надежный пароль'
print(password_level("qwerty"))
→ Ссылка
Автор решения: gil9red

У вас функции lower и upper не вызывались, из-за чего сравнение было ссылки на функцию (например, password.lower) и строки (password)

Теперь работает:

def password_level(password):
    if len(password) < 6:
        return 'Недопустимый пароль'
    elif password.isalpha and (password.lower() == password or password.upper() == password):
        return 'Ненадежный пароль'
    elif not password.isalpha:
        return 'Ненадежный пароль'
    elif any(map(str.isdigit, password)) and (password.upper() == password or password.lower() == password):
        return 'Слабый пароль'
    elif any(map(str.isdigit, password)) and password.upper() != password and password.lower() != password:
        return 'Надежный пароль'
    
print(password_level("qwerty"))
# Ненадежный пароль
→ Ссылка