Python实现删除字符串辅音功能时循环索引越界报错求解决
报错根因
- 遍历索引基于字符串初始长度生成,你在循环过程中直接修改了字符串
stri的长度,字符串持续缩短后,后续迭代的i值会超过当前字符串的最大索引,直接触发IndexError - 功能逻辑完全颠倒:需求为删除所有辅音(保留元音),你的代码逻辑是匹配到元音就执行删除操作,和需求完全相反
- 字符删除逻辑存在错误:最后一位字符的删除语句逻辑错误,即使解决索引问题也无法得到预期结果
修复方案
建议直接通过字符筛选生成新字符串,不修改原遍历对象,完全规避索引问题,实现逻辑更简洁稳定:
input_str = input("enter a string: ") def change(stri): vowels = {'a','e','i','o','u','A','E','I','O','U'} # 筛选所有元音字符拼接,等价于删除所有辅音 return ''.join([char for char in stri if char in vowels]) output_str = change(input_str) print(output_str)
如果一定要沿用循环修改原字符串的写法,需要调整为倒序遍历,倒序删除靠后的字符不会影响前面未遍历的索引,不会触发越界问题。
内容的提问来源于stack exchange,提问作者Legend_recalls
相关产品推荐
相关产品推荐

