元音序列计数
这不是一个作业问题,而是一个考试准备的问题。
我需要定义一个函数 syllables(word)
,用来计算一个单词中的音节数量,具体规则如下:
• 一串元音字母算作一个音节;
• 单词结尾的e不算作音节(也不算它所包含的元音串)。
我不需要处理任何特殊情况,比如一个音节的单词结尾的e(例如,‘be’或‘bee’)。
>>> syllables(’honour’)
2
>>> syllables(’decode’)
2
>>> syllables(’oiseau’)
2
我应该在这里使用正则表达式,还是直接用列表推导式呢?
9 个回答
1
我觉得正则表达式在这里不是个好办法。
把每个字符串当成一个列表来处理,这样写起来似乎很简单。
2
使用正则表达式(regex)——大多数编程语言都允许你计算一个字符串中正则表达式匹配的次数。
然后,针对特殊情况“终止-e”,你可以检查最右边的匹配组。
3
我觉得用正则表达式来解决这个问题很自然。(我认为如果不用正则,代码会写得更多。我用了两个字符串方法,'lower'和'endswith',这样答案会更清晰。)
import re
def syllables(word):
word = word.lower()
if word.endswith('e'):
word = word[:-1]
count = len(re.findall('[aeiou]+', word))
return count
for word in ('honour', 'decode', 'decodes', 'oiseau', 'pie'):
print word, syllables(word)
这段代码的输出是:
honour 2
decode 2
decodes 3
oiseau 2
pie 1
注意到'decodes'比'decode'多了一个音节(这有点奇怪,但符合你的定义)。
问题是,这对你有什么帮助呢?学习问题的重点不是让你自己去解决吗?如果你在提问时分享一个失败的尝试,可能会让你在未来学到更多,帮助你明确自己哪里不足。