Python:从Lis中计算元音

2024-04-30 04:24:32 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我要按照计划行事:

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

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

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"]))

请原谅我可能犯的任何愚蠢的错误。我将非常感谢你能提供的任何帮助!在


Tags: 字符串in脚本元素列表newreturncount
3条回答

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

  1. return立即退出函数;它不仅仅是“结束循环”。在
  2. 在循环上方将i初始化为0是没有意义的。for循环本身将自动将i设置为range()返回的列表中的当前值。在
  3. while i < n是不必要的;不需要为列表中的每个字符再次遍历字符串。在
  4. 不需要手动递增ifor将自动为您执行此操作。在
  5. 您正在print操作函数内部的值,但也尝试打印函数的返回值(但它不返回任何内容!)。在

所以,如果我们解决了这些问题,我们会得到这样的结果:

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()和{}:

^{pr2}$

但是我们可以用List Comprehensions^{}函数使它更令人惊叹!在

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

我们在这里基本上要做的是为每一个元音字母列一个1的列表(如果不是元音,我们就不会在新列表中添加任何内容)。然后我们使用sum()将列表中的所有数字(1)相加,这就是元音的总数。在

或者我们甚至可以把它变成一条直线:

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

代码基本上没问题。。。然而

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

您提供的逐步逻辑是正确的。
但是,您发布的代码不符合逻辑,是不正确的。在

请尝试以下代码:

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"]))

相关问题 更多 >