Подсчитайте прописные буквы в строке
Я пытаюсь понять, как я могу считать прописные буквы в заявлении.
Мне удалось найти только строчные буквы:
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 ответов:
Вы можете сделать это с помощью
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
Это не самый быстрый способ, но мне нравится, как он читается. Другим способом, без импорта из string и с аналогичным синтаксисом, было бы: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()])
Это работает
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