La question que vous avez posée (comment itérer dans l'alphabet) n'est pas la même que le problème que vous essayez de résoudre (comment compter la fréquence des lettres dans une chaîne).
Vous pouvez utiliser string.lowercase, comme d'autres affiches l'ont suggéré :
import string
allTheLetters = string.lowercase
Pour faire les choses comme vous en avez l'habitude, en traitant les lettres comme des chiffres, vous pouvez utiliser les fonctions "ord" et "chr". Il n'y a absolument aucune raison de faire exactement cela, mais cela se rapproche peut-être de ce que vous essayez de comprendre :
def getAllTheLetters(begin='a', end='z'):
beginNum = ord(begin)
endNum = ord(end)
for number in xrange(beginNum, endNum+1):
yield chr(number)
Vous pouvez dire qu'il fait la bonne chose parce que ce code imprime True
:
import string
print ''.join(getAllTheLetters()) == string.lowercase
Mais, pour résoudre le problème que vous essayez réellement de résoudre, vous devez utiliser un dictionnaire et rassembler les lettres au fur et à mesure :
from collections import defaultdict
def letterOccurrances(string):
frequencies = defaultdict(lambda: 0)
for character in string:
frequencies[character.lower()] += 1
return frequencies
Utilisez comme ça :
occs = letterOccurrances("Hello, world!")
print occs['l']
print occs['h']
Ceci imprimera '3' et '1' respectivement.
Notez que cela fonctionne également pour l'unicode :
# -*- coding: utf-8 -*-
occs = letterOccurrances(u"hélló, wórld!")
print occs[u'l']
print occs[u'l']
Si vous essayiez l'autre approche sur l'unicode (incrémenter chaque caractère), vous attendriez longtemps ; il y a des millions de caractères unicode.
Pour implémenter votre fonction originale (imprimer les comptes de chaque lettre dans l'ordre alphabétique) en termes de ceci :
def alphCount(text):
for character, count in sorted(letterOccurrances(text).iteritems()):
print "%s: %s" % (character, count)
alphCount("hello, world!")