所以我很难找到输入字符串的第一个元音的索引。当输入字符串“ 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"))
答案 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
然后,如果单词没有元音,则您希望函数返回什么。