出现“列表索引超出范围”错误

时间:2020-01-29 08:48:18

标签: python python-3.x list error-handling

此代码的目标是找到任何给定句子中存在的“ sh”,“ th”,“ wh”和“ ch”图的数量。似乎一切都应该正常运行时,该函数会不断返回“列表索引超出范围”错误。

exsentence = input("Enter a sentence to scan: ")
slist = list(exsentence.lower())
ch = 0
sh = 0
th = 0
wh = 0
i = 0
'''muppets = slist[i] + slist[i+1]'''
while i < len(slist):
    if slist[i] + slist[i+1] == "sh":
        sh += 1
    elif slist[i] + slist[i+1] == "ch":
        ch += 1
    elif slist[i] + slist[i+1] == "th":
        th += 1
    else:
        if slist[i] + slist[i+1] == "wh":
            wh += 1
    i+=1
print("Has {} 'ch' {} 'sh' {} 'th' {} 'wh'".format(ch,sh,th,wh))

任何帮助都是很客气的。谢谢。

3 个答案:

答案 0 :(得分:1)

i+1将超出slist的范围。您需要迭代直到slist大小-1

while i < len(slist) - 1:

请注意,for在这里似乎更合适。删除i = 0i+=1

for i in range(len(slist) - 1):

答案 1 :(得分:1)

使用带范围的for循环:

exsentence = input("Enter a sentence to scan: ")
slist = list(exsentence.lower())
ch = 0
sh = 0
th = 0
wh = 0
i = 0
'''muppets = slist[i] + slist[i+1]'''
for i in range(1,len(slist)):
    if slist[i-1] + slist[i] == "sh":
        sh += 1
    elif slist[i-1] + slist[i] == "ch":
        ch += 1
    elif slist[i-1] + slist[i] == "th":
        th += 1
    elif slist[i-1] + slist[i] == "wh":
        wh += 1

print(f"Has {ch} 'ch' {sh} 'sh' {th} 'th' {wh} 'wh'")

将范围从1开始并以i对i-1进行检查,这样您就不会超出索引范围

答案 2 :(得分:0)

您正在检查当前位置之前的一个位置。因此,您会得到超出范围的错误。

基本上,您要遍历数组的每个位置,但要对照第n + 1个位置检查第n个位置。当您到达最后一个职位时会发生什么?您将其与下一个未定义的位置(否则它将不是最后一个位置)进行检查,从而得到超出范围的错误。

我的建议是不要对下一项进行最后一项检查,因为不再有任何序列。

while i < len(slist) - 1:
if slist[i] + slist[i+1] == "sh":
    sh += 1
elif slist[i] + slist[i+1] == "ch":
    ch += 1
elif slist[i] + slist[i+1] == "th":
    th += 1
else:
    if slist[i] + slist[i+1] == "wh":
        wh += 1
i+=1