Python文本编解码代码出现builtins.IndexError: string index out of range错误的解决求助
修复文本编码解码代码中的索引越界错误
首先,咱们得先明确编码的核心逻辑:你写的编码是把原字符串的偶数索引(从0开始)字符收集到pares,奇数索引字符收集到impares,然后拼接成pares + impares作为编码结果。那解码必须是这个过程的逆操作,而你原来的解码逻辑完全偏离了这个逆过程,这才导致了索引越界和功能失效。
错误根源拆解
- 解码逻辑完全错误:原解码代码只是重新拆分了编码字符串的奇偶位,完全没有还原原字符串的交替结构,反而用
impares2 = impares2 + texto[i-1]重复取字符,逻辑完全不符合编码的逆过程。 - 索引越界隐患:当编码后的字符串长度为奇数时,原代码的循环处理没有考虑到
pares2和impares2的长度差异,容易出现索引访问超出字符串范围的情况。
修复后的完整代码
# 编码部分(已修正变量名和初始化问题) normal = input("请输入要编码的文本: ") pares = "" impares = "" comp = len(normal) for i in range(comp): if i % 2 == 0: pares += normal[i] else: impares += normal[i] encriptado = pares + impares print("编码结果:", encriptado) print("\n") # 解码部分(重构逻辑,修复索引越界) texto = input("请输入要解码的文本: ") comp2 = len(texto) # 计算编码后字符串的前半部分长度(对应原编码的pares) half_length = (comp2 + 1) // 2 pares_part = texto[:half_length] impares_part = texto[half_length:] # 逆过程拼接:交替取pares_part和impares_part的字符 desencriptado = "" for p, i in zip(pares_part, impares_part): desencriptado += p + i # 如果原字符串长度是奇数,pares_part会多一个字符,单独补上 if len(pares_part) > len(impares_part): desencriptado += pares_part[-1] print("解码结果:", desencriptado)
修复说明
- 解码逻辑重构:根据编码规则,先把解码字符串拆分为
pares_part(原偶数索引字符)和impares_part(原奇数索引字符),然后交替拼接这两部分,完美还原原字符串的结构。 - 处理长度差异:当原字符串长度为奇数时,
pares_part会比impares_part多1个字符,最后单独补上这个字符,彻底避免索引越界问题。 - 写法优化:用
+=代替字符串拼接,比直接pares = pares + ...更高效;用zip遍历两个部分的字符,自动匹配最短的长度,避免手动索引带来的错误。
内容的提问来源于stack exchange,提问作者Rui Ribeiro
相关产品推荐
相关产品推荐

