213 votes

Comment puis-je vérifier si un caractère dans une chaîne est une lettre ? (Python)

Je connais islower et isupper, mais pouvez-vous vérifier si ce caractère est une lettre ? Par exemple :

>>> s = 'abcdefg'
>>> s2 = '123abcd'
>>> s3 = 'abcDEFG'
>>> s[0].islower()
True

>>> s2[0].islower()
False

>>> s3[0].islower()
True

Y a-t-il un moyen de demander si c'est un caractère autre que de faire .islower() ou .isupper() ?

2 votes

Veuillez noter que le "caractère de mots" en programmation fait généralement référence aux lettres, aux chiffres et aux traits de soulignement. Cette question concerne en réalité les "lettres"; si vous devez vérifier si un caractère est un caractère de mot, la meilleure façon que j'ai trouvée est character.isalnum() ou character == "_".

0 votes

Je sais, mais j'ai posé cette question il y a environ 3 ans lorsque j'ai commencé à programmer. N'hésitez pas à le modifier.

320voto

rainer Points 3137

Vous pouvez utiliser str.isalpha().

Par exemple :

s = 'a123b'

for char in s:
    print(char, char.isalpha())

Sortie :

a True
1 False
2 False
3 False
b True

24 votes

S'il vous plaît notez, c'est tellement bon que cela fonctionne également pour divers alphabets : >>> print [x.isalpha() for x in u'Español-'] vous donne [True, True, True, True, True, True, True, False, True, True, True] comme prévu

41voto

Legolas Bloom Points 736
str.isalpha()

Renvoie vrai si tous les caractères de la chaîne sont alphabétiques et s'il y a au moins un caractère, faux sinon. Les caractères alphabétiques sont ceux définis dans la base de données de caractères Unicode comme "Letter", c'est-à-dire ceux dont la catégorie générale est l'une des suivantes : "Lm", "Lt", "Lu", "Ll" ou "Lo". Notez que cela est différent de la propriété "Alphabétique" définie dans la norme Unicode.

En python2.x :

>>> s = u'a1中文'
>>> for char in s: print char, char.isalpha()
...
a True
1 False
中 True
文 True
>>> s = 'a1中文'
>>> for char in s: print char, char.isalpha()
...
a True
1 False
� False
� False
� False
� False
� False
� False
>>>

En python3.x :

>>> s = 'a1中文'
>>> for char in s: print(char, char.isalpha())
...
a True
1 False
中 True
文 True
>>>

Ce code fonctionne :

>>> def is_alpha(word):
...     try:
...         return word.encode('ascii').isalpha()
...     except:
...         return False
...
>>> is_alpha('中国')
False
>>> is_alpha(u'中国')
False
>>>

>>> a = 'a'
>>> b = 'a'
>>> ord(a), ord(b)
(65345, 97)
>>> a.isalpha(), b.isalpha()
(True, True)
>>> is_alpha(a), is_alpha(b)
(False, True)
>>>

4voto

MII Points 37

J'ai trouvé une bonne façon de le faire en utilisant une fonction et un code de base. Ceci est un code qui accepte une chaîne de caractères et compte le nombre de lettres majuscules, de lettres minuscules et également des "autres". Les autres sont classés comme un espace, un signe de ponctuation ou même des caractères japonais et chinois.

def check(count):

    lowercase = 0
    uppercase = 0
    other = 0

    low = 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'
    upper = 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'

    for n in count:
        if n in low:
            lowercase += 1
        elif n in upper:
            uppercase += 1
        else:
            other += 1

    print("Il y a " + str(lowercase) + " lettres minuscules.")
    print("Il y a " + str(uppercase) + " lettres majuscules.")
    print("Il y a " + str(other) + " autres éléments dans cette phrase.")

1 votes

str.isalpha est beaucoup plus facile tho'

0 votes

Avez-vous un avantage par rapport à isalpha?

0 votes

@Samuel isalpha fonctionne pour divers caractères Unicode. Cette solution n'est pas jolie mais autant que je puisse le déterminer, c'est la seule solution qui correspond uniquement à l'alphabet latin défini également en ASCII.

3voto

Chandan Sharma Points 1420

données = "abcdefg hi j 12345"

compte_digits = 0
compte_lettres = 0
compte_autres = 0

pour i dans userinput:

    si i.isdigit():
        compte_digits += 1 
    elif i.isalpha():
        compte_lettres += 1
    else:
        compte_autres += 1

print("Résultat:")        
print("Lettres =", compte_lettres)
print("Chiffres =", compte_digits)

Sortie:

Veuillez entrer des lettres avec des chiffres :
abcdefg hi j 12345
Résultat :
Lettres = 10
Chiffres = 5

En utilisant str.isalpha() vous pouvez vérifier s'il s'agit d'une lettre.

3voto

amalik2205 Points 2482

Cela fonctionne:

any(c.isalpha() for c in 'string')

1 votes

[c.isalpha() for c in ''] est [True, True], tandis que les caractères Han ne sont généralement pas considérés comme des lettres.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X