You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python文本编解码代码出现builtins.IndexError: string index out of range错误的解决求助

修复文本编码解码代码中的索引越界错误

首先,咱们得先明确编码的核心逻辑:你写的编码是把原字符串的偶数索引(从0开始)字符收集到pares,奇数索引字符收集到impares,然后拼接成pares + impares作为编码结果。那解码必须是这个过程的逆操作,而你原来的解码逻辑完全偏离了这个逆过程,这才导致了索引越界和功能失效。

错误根源拆解

  1. 解码逻辑完全错误:原解码代码只是重新拆分了编码字符串的奇偶位,完全没有还原原字符串的交替结构,反而用impares2 = impares2 + texto[i-1]重复取字符,逻辑完全不符合编码的逆过程。
  2. 索引越界隐患:当编码后的字符串长度为奇数时,原代码的循环处理没有考虑到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)

修复说明

  1. 解码逻辑重构:根据编码规则,先把解码字符串拆分为pares_part(原偶数索引字符)和impares_part(原奇数索引字符),然后交替拼接这两部分,完美还原原字符串的结构。
  2. 处理长度差异:当原字符串长度为奇数时,pares_part会比impares_part多1个字符,最后单独补上这个字符,彻底避免索引越界问题。
  3. 写法优化:用+=代替字符串拼接,比直接pares = pares + ...更高效;用zip遍历两个部分的字符,自动匹配最短的长度,避免手动索引带来的错误。

内容的提问来源于stack exchange,提问作者Rui Ribeiro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 00:52:42