在Python中找到单词的第一个元音

时间:2019-03-05 20:23:30

标签: python python-3.x

所以我很难找到输入字符串的第一个元音的索引。当输入字符串“ elephant”,“ hello”,“ spa”时,它们可以正常工作,但是当我输入“ spam”时,它不能工作,它返回的是数字3而不是2。我很难找到为什么它满足else语句,但不是初始if条件。我还试图提出一个条件,如果字符串中没有元音,那么它应该打印出字符串中最后一个字符的索引。下面是我的代码:

def find_first_vowel(word):
    i = 0   
    while i < len(word):
        i+= 1
        if word[i] in vowels:
            return i
        else:
            return len(word)-1
    return i

print(find_first_vowel("spam"))   

3 个答案:

答案 0 :(得分:2)

如果位置std::any上的字符不是元音,您的代码将始终返回std::variant。同样,len(word)-1不起作用,而1也仅由于我提到的错误而起作用,它返回elephant,即spa,而不是找到的元音的索引。尝试逐行调试代码,您会很快发现它。

这可能是一个工作代码,如果没有元音,则返回2,否则返回找到的第一个元音的索引。

len(word)-1

编辑

如果您想在没有元音的情况下返回最后一个字符,只需将-1更改为def find_first_vowel(word): i = 0 while i < len(word): if word[i] in vowels: return i i += 1 return -1 。在这里:

return -1

答案 1 :(得分:1)

您应该使用enumerate为您处理跟踪索引

Picks.aggregate([
    { 
        "$group": { 
            _id: "$user.uid", 
            name: { 
                $first: "$user.name" 
            }, 
            total: { 
               $sum: "$total" 
            },
        } 
    }, 
    { 
        "$sort": { 
            "total": -1 
        } 
    }, 
    { 
        "$limit": 10 
    }
])

答案 2 :(得分:0)

任何一个return语句都会立即跳出while循环,而无需查看其余单词。另一个问题:由于您从i += 1开始,该函数甚至不会查看第一个字符,即word[0]

我认为您的主要问题是,如果else循环完成并退出而没有找到元音,则意味着要执行while语句。但是,如前所述,它是if循环中while语句的一部分,只要第二个字符不是元音就执行。您想要更多类似这样的东西:

i = 0
while i < len(word):
    if word[i] in vowels:
        return i
    i += 1

然后,如果单词没有元音,则您希望函数返回什么。