“列表索引超出范围”错误

时间:2013-10-21 14:17:47

标签: python list range

我正在用Python编写一个程序,它将获取一段二进制文件并根据密钥对其进行加密。如果代码段比密钥短,则必须取密钥的最后一位,因此双反转。当我尝试将最后一段密钥添加到空白列表时,我的问题出现了,它给了我“列表索引超出范围”错误。代码如下:

def OTP(msg,clave):
encList = []
encr = ''
clist = list(clave)
clist.reverse()
cutlist = []
mlist = list(msg)
mlist.reverse()
for i in range(len(msg)):
    cutlist.append(clist[i])
for i in mlist:
    for j in cutlist:
        if i == j:
            encList.append(0)
        if 1 != j:
            encList.append(1)
encList.reverse()
for i in encList:
    encr += str(encList[i])
return encr

clave = '000000010011010010001001000110110011001101010011100101010000101100111110000010100000011010010000101100000101100011010110100000100110001011001101101110110101000010000010100101000101101101010010001100001100100010111111111110010011101110010101110100111110000001101111110010000000101011000101111110100100101000110010111001100110011010100011011001101010011111100101'
msg = '01101000011010000110100001101000'

cript = OTP(msg,clave)
rev = OTP(cript,clave)
print(rev)

我给它的是消息长度的范围,它应该在更长的密钥的范围内。一如往常,任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

问题出现了,因为使用双for循环给了我一个列表,其中包含的项目数等于msg平方的长度,因为它考虑了mlist次中的每个项目cutlist中的每个项目。

这意味着当第二次调用该函数时(解密消息并确认程序工作),msg参数比clave参数长得多,造成错误。要解决此问题,可以使用以for作为参数的单个range(len(msg))循环,并根据encr添加0或1到cutlist[i] == mlist[i]