Исходя из вашей текущей реализации, я предполагаю, что вы набираете общее количество слов, которые содержат только заглавных букв.
def is_caps(word):
return word.isupper() and word.isalpha()
def get_capital_prop(data):
return len([word for words in data for word in words if is_caps(word)])
isupper()
вернет True
, если строка содержит хотя бы одну букву, а каждая буква в верхнем регистре. При этом игнорируются любые цифры, символы или специальные символы, которые не имеют верхнего или нижнего регистра. Вспомогательная функция is_caps
проверяет, является ли слово полностью заглавными и содержит только буквы алфавита, возвращая True
, если это так, или False
в противном случае.
Вот краткий пример, который я включил:
В:
some_text = '''
This is just some EXAMPLE TEXT that
I have put together. Hopefully this ANSWER
is helpfuL!! 123AA'''
rem = ',!?.\'"()' # Symbol characters removed from the start and end of words
data = [[word.strip(rem) for word in words.split(' ')] for words in some_text.split('\n')]
Из:
>>>print(data) # Only 4 fully capitalized words: EXAMPLE, TEXT, I and ANSWER
[[''], ['This', 'is', 'just', 'some', 'EXAMPLE', 'TEXT', 'that'], ['I', 'have', 'put', 'together', '', 'Hopefully', 'this', 'ANSWER'], ['is', 'helpfuL', '123AA']]
>>>print(get_capital_prop(data))
4
Если вы хотите включить в свой ответ заглавные слова с апострофами, такими как «НЕ» или «НЕ ДОЛЖНО» , вы можете легко изменить логику внутри is_caps()
вспомогательная функция в зависимости от того, что вы хотите.