索引超出范围,而

2024-06-18 13:11:47 发布

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

有人能帮我吗?为什么这个go索引超出范围。确切的时间是在“如果testo[k]不在vocali:

while k < len(testo):
    if testo[k] == '\n':
        sillaba += testo[k]
        k += 1
        Es.append(sillaba)
        sillaba = ""
    if testo[k] not in vocali:
        sillaba += testo[k]
        k += 1
        if v:
            Es.append(sillaba[:-1])
            k -= 1
            v = False
            sillaba = ""
    else:
        sillaba += testo[k]
        k += 1
        v = True

Tags: infalsegolenifes时间not
2条回答

我的猜测是,在testo的末尾有“\n”,因此if testo[k] == '\n'结果Truek += 1运行,将k的值增加到大于testo长度的值。因此,if testo[k] not in vocali:给出了索引超出范围的错误

简单的修复方法是在增加k之前检查k是否大于testo的长度

似乎Carcigenicate指出了这个问题,但我还不能发表评论,所以我在这里写作。当k的值为len(testo) - 1并且程序进入while循环时,第一个if语句,即if testo[k] == '\n' 为真(假设testo为字符串),则执行进入选择语句,并且k再次递增,这意味着现在k等于len(testo)当执行被传递到第二个if语句时,程序检查条件,发现索引超出范围,因此出现错误



while k < len(testo):
    if testo[k] == '\n':
        sillaba += testo[k]
        k += 1
        Es.append(sillaba)
        sillaba = ""
        continue

    if testo[k] not in vocali:
        sillaba += testo[k]
        k += 1
        if v:
            Es.append(sillaba[:-1])
            k -= 1
            v = False
            sillaba = ""
    else:
        sillaba += testo[k]
        k += 1
        v = True


您可以添加continue语句将执行发送到下一个迭代以避免错误

相关问题 更多 >