Python:从列表中计算元音

时间:2016-02-13 06:53:24

标签: python

我是python的新手,在解决我的脚本时遇到一些困难。

我的任务是创建一些接受字符串列表的函数,并返回整个列表中的元音数。

我试图遵循的游戏计划是:

  1. 将列表元素合并为单个字符串
  2. 创建一个测试字符串元素是否为元音的循环
  3. 使用计数器变量跟踪字符串
  4. 中的元音
  5. 完成循环
  6. 后打印计数器变量的值

    我的代码不优雅,但也不起作用。

    def vowelCounter(listName):
        new = ''.join(listName)
        n = len(new)
        count = 0
        vowels = 'aeiouAEIOU'
        i = 0
        for i in range(0,n):
            while i < n:
                if new[i] in vowels:
                    count += 1
                    i += 1
                    return
                print count
                return
            return
        return
    
    print(vowelCounter(["terrapin","station","13points"]))
    

    请原谅我可能遇到的任何愚蠢错误。我一定会感谢您提供的任何帮助!

4 个答案:

答案 0 :(得分:2)

首先,我们有一些一般的语法问题。

  1. return立即退出该功能;它不仅仅是#34;结束循环&#34;。
  2. 在循环上方初始化i0没有意义。 for循环本身只会自动将i设置为range()返回的列表中的当前值。
  3. while i < n是不必要的;没有必要为列表中的每个字符再次遍历字符串。
  4. 无需手动增加i; for会自动为您执行此操作。
  5. 您{{}} print函数内部的值,但您还尝试打印函数的返回值(但它不会返回任何内容!)。< / LI>

    所以,如果我们解决了这些问题,我们就会有这样的事情:

    def vowelCounter(listName):
        vowels = 'aeiouAEIOU'
        new = ''.join(listName)
        count = 0
    
        for i in range(0, len(new)):
            if new[i] in vowels:
                count += 1
    
        return count
    

    但Python也允许for循环遍历字符串的每个字符,因此我们根本不需要range()len()

    def vowelCounter(listName):
        vowels = 'aeiouAEIOU'
        count = 0
    
        for char in ''.join(listName):
            if char in vowels:
                count += 1
    
        return count
    

    但我们可以通过List Comprehensionssum()功能让这更加精彩!

    def vowelCounter(listName):
        vowels = 'aeiouAEIOU'
        count = sum([1 for char in ''.join(listName) if char in vowels])
        return count
    

    我们在这里基本上做的是为每个作为元音的字母制作1的列表(如果它不是元音,我们不会在我们的任何字母中添加任何内容新名单)。然后我们使用sum()将列表中的所有数字(1&#39; s)相加,这是我们的元音总数。

    或者我们甚至可以将其作为一个单行:

    def vowelCounter(listName):
        return sum([1 for char in ''.join(listName) if char in 'aeiouAEIOU'])
    

答案 1 :(得分:1)

您提供的分步逻辑是正确的 但是,您发布的代码不遵循逻辑并且不正确。

请尝试使用以下代码:

def vowelCounter(listName):
    string = ''.join(listName)
    count = 0
    vowels = 'aeiouAEIOU'
    for ch in string:
        if ch in vowels:
            count += 1
    return count

print(vowelCounter(["terrapin","station","13points"]))

答案 2 :(得分:0)

代码基本上没问题......但是

  • for i in ...自动递增i,因此不需要i += 1
  • for执行循环...不需要在其中放置另一个while循环
  • return退出该函数,您应该只在最后使用它来回馈使用return count
  • 计算的结果

答案 3 :(得分:0)

>>> import re
>>> vowels = re.compile('[AEIOU]', re.IGNORECASE)
>>>
>>> def vowelCounter(listName):
...     return len(vowels.split("".join(listName)))-1
...
>>> vowelCounter(["terrapin","station","13points"])
8
>>> vowelCounter(["terrapin","station","13pOInts"])
8