Cuente las letras mayúsculas en una cadena con Python

Estoy tratando de averiguar cómo puedo contar las letras mayúsculas en una cadena.

Solo he podido contar letras minúsculas:

def n_lower_chars(string): return sum(map(str.islower, string)) 

Ejemplo de lo que estoy tratando de lograr:

 Type word: HeLLo Capital Letters: 3 

Cuando bash cambiar la función anterior, produce errores:

 def n_upper_chars(string): return sum(map(str.isupper, string)) 

Puedes hacer esto con la sum , una expresión generadora y str.isupper :

 message = input("Type word: ") print("Capital Letters: ", sum(1 for c in message if c.isupper())) 

Vea una demostración a continuación:

 >>> message = input("Type word: ") Type word: aBcDeFg >>> print("Capital Letters: ", sum(1 for c in message if c.isupper())) Capital Letters: 3 >>> 

Usando len y filter :

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

Puedes usar re :

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

5

 from string import ascii_uppercase count = len([letter for letter in instring if letter in ascii_uppercase]) 

Esta no es la forma más rápida, pero me gusta lo legible que es. Otra forma, sin importar desde una cadena y con una syntax similar, sería:

 count = len([letter for letter in instring if letter.isupper()]) 

Esto funciona

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

El método (ligeramente) más rápido para esto realmente parece ser la prueba de membresía en un 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