【问题标题】:anti-vowel using Nested loop having index error in python2使用嵌套循环的反元音在python2中具有索引错误
【发布时间】:2025-11-24 03:20:08
【问题描述】:

我正在做 anti_vowel 函数,它基本上从输入中取出所有元音,我有一些错误。 下面是我的代码

def anti_vowel(text):
  vowel="aeiouAEIOU"
  for i in range(len(text)-1):
    for h in range(len(vowel)-1):
      if text[i]==vowel[h]:
        text=text.replace(text[i],"")

  return text      



print anti_vowel("HELLO")

如果我输入“HELLO”,它将成功打印“HLL”。但是如果我将输入更改为“Hey look Words!”, 它显示错误 IndexError: string index out of range。如果有人能帮我解决这个问题,我将不胜感激。

【问题讨论】:

  • 您更改了正在迭代的集合。如果第二个元音在最后一个字符之前,它将失败。试试输入“EEL”这可能会更好:*.com/a/3939381/1766544
  • 整个函数体可以简化为return ''.join(character for character in text if character not in 'aeiouAEIOU')。如果您想学习 Python,请尝试理解这段代码。
  • @Matthias 非常感谢,代码很简单

标签: python indexing error-handling


【解决方案1】:

您遇到的问题是,.replace() 替换了文本中出现的所有实例。因此,当调用.replace("o","") 时,您将替换句子中的所有“o”,从而使您的句子更短。所以出现了IndexError

看看这个:

def anti_vowel(text):
  vowel="aeiouAEIOU"
  for i in range(len(text)-1):
    for h in range(len(vowel)-1):
      print(i,h, text)
      if text[i]==vowel[h]:
        text=text.replace(text[i],"")

  return text      

print(anti_vowel("Heel!"))

输出:

0 0 Heel!
0 1 Heel!
0 2 Heel!
0 3 Heel!
0 4 Heel!
0 5 Heel!
0 6 Heel!
0 7 Heel!
0 8 Heel!
1 0 Heel!
1 1 Heel!
1 2 Hl!
1 3 Hl!
1 4 Hl!
1 5 Hl!
1 6 Hl!
1 7 Hl!
1 8 Hl!
2 0 Hl!
2 1 Hl!
2 2 Hl!
2 3 Hl!
2 4 Hl!
2 5 Hl!
2 6 Hl!
2 7 Hl!
2 8 Hl!
3 0 Hl!

这就是IndexError 出现的时候。正如您在尝试替换第一个“e”时看到的那样,所有“e”都被替换了。

我用另一个 SO-post 标记了您的问题,其中显示了如何成功执行此类操作。

【讨论】:

  • 这可能通过输入“EEL”更容易演示
  • @Nils 感谢您的帮助,我修改了我的程序并成功执行了我的代码。