你问的问题(如何通过迭代字母)并不像你想解决的问题同样的问题(如何计算的字母串的频率)。
您可以使用string.lowercase,如其他海报建议:
import string
allTheLetters = string.lowercase
要做到的事情你“用”的方式,处理字母数字,你可以使用“ORD”和“chr”功能。但绝对没有理由永远做正是这一点,但也许更接近你实际上想弄清楚:
def getAllTheLetters(begin='a', end='z'):
beginNum = ord(begin)
endNum = ord(end)
for number in xrange(beginNum, endNum+1):
yield chr(number)
你可以告诉它做正确的事情,因为这个代码打印True
:
import string
print ''.join(getAllTheLetters()) == string.lowercase
但是,要解决你其实想要解决的问题,要使用字典和收集信件,当您去:
from collections import defaultdict
def letterOccurrances(string):
frequencies = defaultdict(lambda: 0)
for character in string:
frequencies[character.lower()] += 1
return frequencies
使用像这样:
occs = letterOccurrances("Hello, world!")
print occs['l']
print occs['h']
这将分别打印“3”和“1”。
注意这对Unicode以及:
# -*- coding: utf-8 -*-
occs = letterOccurrances(u"héĺĺó, ẃóŕĺd!")
print occs[u'l']
print occs[u'ĺ']
如果你试穿的Unicode(通过每个字符递增),你会等待很长一段时间的另一种方法;有数百万个Unicode字符。
要实现你的原始功能(打印按字母顺序排列的每个字母的计数)在此方面:
def alphCount(text):
for character, count in sorted(letterOccurrances(text).iteritems()):
print "%s: %s" % (character, count)
alphCount("hello, world!")
我觉得里面算你的 “信”()应该是“CHR(字母)” – paxdiablo 2008-10-23 06:37:02
既然你固定它(并没有我的off-by-一个错误导致只检查了为“Y” :-),我已经删除了我的回答和upvoted你。 – paxdiablo 2008-10-23 06:40:38
这看起来好像没什么问题,为什么会得到否决? – 2008-10-23 07:05:10