Подсчитайте заглавные буквы в строке с помощью Python
Я пытаюсь понять, как я могу считать заглавные буквы в строке.
Мне удалось только посчитать строчные буквы:
def n_lower_chars(string):
return sum(map(str.islower, string))
Пример того, что я пытаюсь сделать:
Type word: HeLLo
Capital Letters: 3
Когда я пытаюсь перевернуть функцию выше, она выдает ошибки:
def n_upper_chars(string):
return sum(map(str.isupper, string))
Ответы
Ответ 1
Вы можете сделать это с помощью sum
, выражения генератора и str.isupper
:
message = input("Type word: ")
print("Capital Letters: ", sum(1 for c in message if c.isupper()))
См. демонстрацию ниже:
>>> message = input("Type word: ")
Type word: aBcDeFg
>>> print("Capital Letters: ", sum(1 for c in message if c.isupper()))
Capital Letters: 3
>>>
Ответ 2
Используя len
и filter
:
import string
value = "HeLLo Capital Letters"
len(filter(lambda x: x in string.uppercase, value))
>>> 5
Ответ 3
Вы можете использовать re
:
import re
string = "Not mAnY Capital Letters"
len(re.findall(r'[A-Z]',string))
5
Ответ 4
from string import ascii_uppercase
count = len([letter for letter in instring if letter in ascii_uppercase])
Это не самый быстрый способ, но мне нравится, насколько он читабельен. Другим способом, без импорта из строки и с похожим синтаксисом, было бы следующее:
count = len([letter for letter in instring if letter.isupper()])
Ответ 5
Это работает
s = raw_input().strip()
count = 1
for i in s:
if i.isupper():
count = count + 1
print count
Ответ 6
(немного) самый быстрый метод для этого, по-видимому, является тестированием членства во фризонсете
import string
message='FoObarFOOBARfoobarfooBArfoobAR'
s_upper=frozenset(string.uppercase)
%timeit sum(1 for c in message if c.isupper())
>>> 100000 loops, best of 3: 5.75 us per loop
%timeit sum(1 for c in message if c in s_upper)
>>> 100000 loops, best of 3: 4.42 us per loop