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))
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
>>>
Utiliser len
et filter
:
import string
value = "HeLLo Capital Letters"
len(filter(lambda x: x in string.uppercase, value))
>>> 5
Vous pouvez utiliser 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])
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()])
Cela marche
s = raw_input().strip()
count = 1
for i in s:
if i.isupper():
count = count + 1
print count
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