字符串大小写交替转换代码报错:索引越界问题如何修复?
修复字符串大小写交替转换时的索引越界问题
这个问题我之前也碰到过!你的代码核心思路是每两个字符为一组,把第一个转大写、第二个转小写,但忽略了字符串长度为奇数的场景:当循环到最后一个字符时,index+1会超出字符串的最大索引(毕竟字符串索引从0开始),直接触发String index out of range错误。
方法一:兼容奇偶长度的分组处理
我们可以在循环里先处理当前字符,再判断是否存在下一个字符,避免越界:
def skyline(str1): result = '' index = 0 str_length = len(str1) while index < str_length: # 先处理当前索引的字符为大写 result += str1[index].upper() # 只有当存在下一个字符时,才处理为小写 if index + 1 < str_length: result += str1[index + 1].lower() index += 2 return result
这个修改保留了你原本的分组逻辑,同时给访问index+1加了判断,确保不会越界。
方法二:按单个字符的索引奇偶性转换(更稳妥)
其实不需要强行分组,直接遍历每个字符的索引,根据索引的奇偶来决定大小写(比如偶数索引大写,奇数索引小写),这种方式不管字符串长度是奇是偶都能完美处理:
def skyline(str1): result = '' for idx, char in enumerate(str1): if idx % 2 == 0: result += char.upper() else: result += char.lower() return result
如果想更简洁,还可以用列表推导式一行搞定:
def skyline(str1): return ''.join(char.upper() if idx % 2 == 0 else char.lower() for idx, char in enumerate(str1))
这两种方法都能解决索引越界的问题,第二种逻辑更直观,也更不容易出错~
内容的提问来源于stack exchange,提问作者cal17_hogo
相关产品推荐
相关产品推荐

