La pregunta lo solicitado (la manera de recorrer el alfabeto) no es la misma pregunta que el problema que estamos tratando de resolver (cómo contar la frecuencia de las letras de una cadena).
Usted puede utilizar string.lowercase, como otros críticos han sugerido:
import string
allTheLetters = string.lowercase
Para hacer las cosas de la forma en que está "acostumbrado a", el tratamiento de las letras como números, se puede utilizar el "ord" y funciones "chr".No hay absolutamente ninguna razón para nunca hacer exactamente esto, pero tal vez se acerca más a lo que en realidad está tratando de averiguar:
def getAllTheLetters(begin='a', end='z'):
beginNum = ord(begin)
endNum = ord(end)
for number in xrange(beginNum, endNum+1):
yield chr(number)
Se puede decir que hace lo correcto, porque este código imprime True
:
import string
print ''.join(getAllTheLetters()) == string.lowercase
Pero, para resolver el problema en realidad se está tratando de resolver, que desea usar un diccionario y recoger las cartas sobre la marcha:
from collections import defaultdict
def letterOccurrances(string):
frequencies = defaultdict(lambda: 0)
for character in string:
frequencies[character.lower()] += 1
return frequencies
uso de este modo:
occs = letterOccurrances("Hello, world!")
print occs['l']
print occs['h']
Esto imprimirá '3' y '1' respectivamente.
Tenga en cuenta que esto funciona para Unicode, así:
# -*- coding: utf-8 -*-
occs = letterOccurrances(u"héĺĺó, ẃóŕĺd!")
print occs[u'l']
print occs[u'ĺ']
Si se va a probar el otro enfoque en Unicode (incrementando a través de cada personaje) que estaría esperando mucho tiempo; hay millones de caracteres Unicode.
para implementar su función original (imprimir los cargos de cada letra en orden alfabético) en cuanto a esto:
def alphCount(text):
for character, count in sorted(letterOccurrances(text).iteritems()):
print "%s: %s" % (character, count)
alphCount("hello, world!")
Excelente tutorial! – Ber
realmente debería usar string.ascii_lowercase en lugar de escribir su propia getAllTheLetters. ¡también, ese es un nombre terriblemente antipático para una función! – hop
Su función letterOccurrances() también contará el espacio en blanco y la puntuación, tal vez no intencionalmente. – mhawke