Python移除元音代码出现'String index out of range'错误排查与解决
解决移除元音时的"string index out of range"错误
问题原因
你碰到的索引越界问题,核心是循环过程中直接修改了原字符串phrase。
一开始range(len(phrase))是按输入短语的初始长度生成索引序列,但循环里执行phrase = str(phrase[i]).replace(phrase[i], "")时,直接把phrase改成了空字符串(替换当前元音字符后无剩余内容)。后续循环的索引还在按初始长度推进,比如初始长度是5,循环到i=1时phrase已经是空了,i=2再访问phrase[2]自然就超出字符串的有效索引范围了。
修复代码
正确的思路是新建容器存储过滤后的字符,不要修改原输入字符串:
phrase = input("Input: ") result = "" vowels = {"a", "A", "e", "E", "i", "I", "o", "O", "u", "U"} for char in phrase: if char not in vowels: result += char print(result)
代码优化建议
- 用集合存储元音:集合的成员查询效率远高于列表,短语较长时优势更明显
- 统一大小写判断:把字符转成小写(或大写)后再判断,减少元音的枚举量:
phrase = input("Input: ") result = "" vowels = {"a", "e", "i", "o", "u"} for char in phrase: if char.lower() not in vowels: result += char print(result)
- 列表推导式简化写法:一行完成过滤,简洁且可读性强:
phrase = input("Input: ") vowels = {"a", "e", "i", "o", "u"} result = "".join([char for char in phrase if char.lower() not in vowels]) print(result)
内容的提问来源于stack exchange,提问作者RKSiegel
相关产品推荐
相关产品推荐

