计算单词结尾处的元音

时间:2018-04-28 23:49:24

标签: python python-3.x

编写一个名为vowelEndings的函数,它将字符串text作为参数。

函数vowelEndings返回一个字典d,其中的键是所有元音,它们是文本中某个单词的最后一个字母。字母a,e,i,o和u是元音。没有其他字母是元音。对应于d中每个键的值是以该元音结尾的所有单词的列表。在给定列表中,任何单词都不应出现多次。文本中的所有字母均为小写。

以下是正确输出的示例:

>>> t = 'today you are you there is no one alive who is you-er than you'
>>> vowelEndings(t)
{'u': ['you'], 'o': ['no', 'who'], 'e': ['are', 'there', 'one', 'alive']}

这是我到目前为止所做的:

def vowelEndings(text):
    vowels = 'aeiouAEIOU'
    vowelCount = 0
    words = text.split()

    for word in words:
        if word[0] in vowels:
            vowelCount += 1

    return vowelCount

t = 'today you are you there is no one alive who is you-er than you'
print(vowelEndings(t))

输出:

5

正在做的是计算每个单词开头的元音,但它应该计算每个单词结尾的元音。此外,它应该在问题中打印出元音和元音所指的单词。我需要帮助。

1 个答案:

答案 0 :(得分:3)

你很亲密。缺少的方面是:

  • 要提取最后字母,请使用word[-1]
  • 您需要使用元音键创建字典。
  • 字典值应为set以避免重复。

经典的Python解决方案是使用collections.defaultdict

from collections import defaultdict

t = 'today you are you there is no one alive who is you-er than you'

def vowelEndings(text):
    vowels = set('aeiou')
    d = defaultdict(set)

    for word in text.split():
        final = word[-1]
        if final in vowels:
            d[final].add(word)

    return d

print(vowelEndings(t))

defaultdict(set,
            {'e': {'alive', 'are', 'one', 'there'},
             'o': {'no', 'who'},
             'u': {'you'}})