Проверить все ли символы в строке являются заглавными

Учусь немного программированию на сайте: checkio.org. Пошли задания связанные с текстом, символами.


Задание:
Проверить все ли символы в строке являются заглавными. Если строка пустая или в ней нет букв - функция должна вернуть True.

Входные данные: Строка
Выходные данные: Логический тип
Условия: a-z, A-Z, 1-9 и пробелы

Вот заготовленный код:

def is_all_upper(text: str) -> bool:
    # your code here
    return False


if __name__ == '__main__':
    print("Example:")
    print(is_all_upper('ALL UPPER'))

    # These "asserts" are used for self-checking and not for an auto-testing
    assert is_all_upper('ALL UPPER') == True
    assert is_all_upper('all lower') == False
    assert is_all_upper('mixed UPPER and lower') == False
    assert is_all_upper('') == True
    assert is_all_upper('     ') == True
    assert is_all_upper('444') == True
    assert is_all_upper('55 55 5') == True
    print("Coding complete? Click 'Check' to earn cool rewards!")

Вот моя версия кода:

def is_all_upper(text: str) -> bool:
    if (any(x.isupper() or x.islower() or x.isdigit() or x.isspace() for x in text)):
        return True
    else:
        return False

В данном случае проскакивает только первый тест ALL UPPER, дальше all lower не идёт.


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

Автор решения: Kers

Можно не городить многоуровневое or прикручивать ненужные генераторы списков (Списковые включения) и тд...

def is_all_upper(text: str) -> bool:
    if text.upper() == text:
        return True
    elif len(text) == 0:
        return True
    return False

Так будет и читать и понимать легче.

→ Ссылка
Автор решения: Кирилл Малышев
def is_all_upper(text: str) -> bool:
    return all(map(str.isupper, filter(str.isalpha, text)))
→ Ссылка
Автор решения: CrazyElf

Ну вообще-то достаточно такого. Проходит все проверки. %)

def is_all_upper(text: str) -> bool:
    return text == text.upper()
→ Ссылка
Автор решения: Эникейщик

Конечно не проходит. Ваша функция вернет True если в тексте есть хотя бы одна заглавная буква или хотя бы одна строчная (islower(), видимо по ошибке туда попало) или хотя бы один пробел или хотя бы одна цифра. Ее надо просто перевернуть наоборот:

def is_all_upper(text: str) -> bool:
    if not (any(x.islower() for x in text)):
        return True
    else:
        return False
→ Ссылка