元音序列计数

4 投票
9 回答
2981 浏览
提问于 2025-04-16 06:34

这不是一个作业问题,而是一个考试准备的问题。

我需要定义一个函数 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'多了一个音节(这有点奇怪,但符合你的定义)。

问题是,这对你有什么帮助呢?学习问题的重点不是让你自己去解决吗?如果你在提问时分享一个失败的尝试,可能会让你在未来学到更多,帮助你明确自己哪里不足。

撰写回答