web-dev-qa-db-fra.com

Compter les lettres majuscules dans une chaîne avec Python

J'essaie de comprendre comment je peux compter les lettres majuscules dans une chaîne. 

Je n'ai pu compter que des lettres minuscules:

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

Exemple de ce que j'essaie d'accomplir:

Type Word: HeLLo                                        
Capital Letters: 3

Lorsque j'essaie de retourner la fonction ci-dessus, des erreurs se produisent:

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

Vous pouvez le faire avec sum , une expression generator et str.isupper :

message = input("Type Word: ")

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

Voir une démonstration ci-dessous:

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

Utiliser len et filter:

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

Vous pouvez utiliser re:

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

5

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

Ce n'est pas le moyen le plus rapide, mais j'aime sa lisibilité. Une autre façon, sans importer de chaîne et avec une syntaxe similaire, serait:

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

Cela marche

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

La méthode (légèrement) la plus rapide pour cela semble en fait être le test d’adhésion dans 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
0
benbo