94 votes

plage sur un caractère en python

Existe-t-il un moyen de passer d'un caractère à l'autre ?

for c in xrange( 'a', 'z' ):
    print c

J'espère que vous pourrez m'aider.

17 votes

Si vous ne voulez que l'alphabet anglais, il y a import string , string.ascii_lowercase .

124voto

Ned Batchelder Points 128913

Il s'agit là d'une excellente utilisation d'un générateur personnalisé :

Python 2 :

def char_range(c1, c2):
    """Generates the characters from `c1` to `c2`, inclusive."""
    for c in xrange(ord(c1), ord(c2)+1):
        yield chr(c)

ensuite :

for c in char_range('a', 'z'):
    print c

Python 3 :

def char_range(c1, c2):
    """Generates the characters from `c1` to `c2`, inclusive."""
    for c in range(ord(c1), ord(c2)+1):
        yield chr(c)

ensuite :

for c in char_range('a', 'z'):
    print(c)

18 votes

Magnifique ! Pour ceux qui vont copier ceci, gardez à l'esprit que range(1,3) itère les valeurs 1 et 2 (et pas trois), mais char_range('a','c') itère 'a', 'b' et 'c' !

0 votes

Vous pouvez également ajouter l'étape facultative arg : def char_range(c1, c2, step=1) ... ord(c1), ord(c2)+1, step

0 votes

@wjandrea, ne fonctionne pas tout à fait pour les étapes négatives, par exemple char_range('g','a',-1) donne ['g', 'f', 'e', 'd', 'c']

105voto

agf Points 45052
import string
for char in string.ascii_lowercase:
    print char

Véase constantes de chaîne de caractères pour les autres possibilités, y compris les majuscules, les chiffres, les caractères dépendant de la langue locale, que vous pouvez regrouper comme suit string.ascii_uppercase + string.ascii_lowercase si vous voulez tous les personnages dans plusieurs jeux.

26voto

glglgl Points 35668

Vous devez convertir les caractères en chiffres et inversement.

for c in xrange(ord('a'), ord('z')+1):
    print chr(c) # resp. print unicode(c)

Pour des raisons d'esthétique et de lisibilité, vous pouvez l'intégrer dans un générateur :

def character_range(a, b, inclusive=False):
    back = chr
    if isinstance(a,unicode) or isinstance(b,unicode):
        back = unicode
    for c in xrange(ord(a), ord(b) + int(bool(inclusive)))
        yield back(c)

for c in character_range('a', 'z', inclusive=True):
    print(chr(c))

Ce générateur peut être appelé avec inclusive=False (par défaut) pour imiter le comportement habituel de Python (bhehaviour) et exclure l'élément final, ou avec inclusive=True (par défaut) pour l'inclure. Ainsi, avec la valeur par défaut inclusive=False , 'a', 'z' couvrirait simplement l'intervalle allant de a a y à l'exclusion de z .

Si l'un des a , b sont unicode, il renvoie le résultat en unicode, sinon il utilise chr .

Il ne fonctionne actuellement (probablement) que dans Py2.

12voto

GreenMatt Points 6301

Il y a d'autres bonnes réponses ici (personnellement, j'utiliserais probablement string.lowercase), mais par souci d'exhaustivité, vous pourriez utiliser map() y chr() sur les valeurs ascii en minuscules :

for c in map(chr, xrange(97, 123)):
   print c

11voto

Dannid Points 147

Si vous disposez d'une courte liste fixe de caractères, il vous suffit d'utiliser le traitement des chaînes de caractères par Python, qui les considère comme des listes.

for x in 'abcd':
    print x

ou

[x for x in 'abcd']

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