Подсчитайте прописные буквы в строке


Я пытаюсь понять, как я могу считать прописные буквы в заявлении.

Мне удалось найти только строчные буквы:

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))
6 16

6 ответов:

Вы можете сделать это с помощью sum, A выражение генератора , и 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
>>>

Используя len и filter :

import string
value = "HeLLo Capital Letters"
len(filter(lambda x: x in string.uppercase, value))
>>> 5

Вы можете использовать re:

import re
string = "Not mAnY Capital Letters"
len(re.findall(r'[A-Z]',string))

5

from string import ascii_uppercase
count = len([letter for letter in instring if letter in ascii_uppercase])
Это не самый быстрый способ, но мне нравится, как он читается. Другим способом, без импорта из string и с аналогичным синтаксисом, было бы:
count = len([letter for letter in instring if letter.isupper()])

Это работает

s = raw_input().strip()
count = 1
for i in s:
    if i.isupper():
        count = count + 1
print count

Самый (слегка) быстрый метод для этого на самом деле, кажется, тестирование членства в frozenset

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