Проверить все ли символы в строке являются заглавными
Учусь немного программированию на сайте: 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 шт):
Можно не городить многоуровневое 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)))
Ну вообще-то достаточно такого. Проходит все проверки. %)
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