for循环 - .split和int

时间:2012-12-12 16:49:45

标签: python

我写了2个功能很好的功能,但我想改变部分代码以提高效率,使用for循环,每8个图表都有“跳转”。 当我运行verify_checksum时,我得到:

AttributeError: 'int' object has no attribute 'split'

但是当我使用#的行注释运行它时,它可以正常工作。 任何想法如何修改它而不改变代码的其他部分? (有更多的功能与这些功能一起使用,它会造成混乱)。

我的代码:

def xor_bytes(byte1, byte2):
    byte1, byte2=byte1.split(), byte2.split()
    xor=""
    a=0
    for i in byte1:
        for j in i:
            t=int(byte2[0][a])^int(j)
            xor+="".join(str(t))
            a+=1
    return xor


def verify_checksum(datagram):
    datagram=list(datagram)
    org_checksum=datagram[48:56]
    org_checksum="".join(org_checksum)
    x=48
    for i in datagram[48:56]:
        datagram[x]='0'
        x+=1
    datagram="".join(datagram)

    res=xor_bytes(datagram[0:8], datagram[8:16])
    for i in (16,88,8):
        res=xor_bytes(res, i)
    #res=xor_bytes(res,datagram[16:24])
    #res=xor_bytes(res,datagram[24:32])
    #res=xor_bytes(res,datagram[32:40])
    #res=xor_bytes(res,datagram[40:48])
    #res=xor_bytes(res,datagram[48:56])
    #res=xor_bytes(res,datagram[56:64])
    #res=xor_bytes(res,datagram[64:72])
    #res=xor_bytes(res,datagram[72:80])
    #res=xor_bytes(res,datagram[80:88])

    if res==org_checksum:
        return True
    else:
        return False 

输入:

verify_checksum("1111000000001111000011111111000001010101101010101010111001110011001000000110101101101001")

输出:

True

3 个答案:

答案 0 :(得分:2)

你有一个for循环:

for i in (16,88,8):
    res=xor_bytes(res, i)

然后尝试在.split函数中i(这是一个整数)上调用xor_bytes

byte1, byte2=byte1.split(), byte2.split()

i作为byte2传入。

我不确定你要在这里完成什么,所以我无法帮助你解决问题,但这就是它发生的原因。


也许你想要这样的东西:

bytes_range = range(16,89,8)  #make 89 the upper bound so that 88 is included in the range
for start,end in zip(bytes_range[:-1],bytes_range[1:]):
    res = xor_bytes(res,datagram[start:end])

答案 1 :(得分:2)

您的循环看起来不像评论的行那样 任何

for i in range(16,88,8):
    res=xor_bytes(res, datagram[i:i + 8])

答案 2 :(得分:1)

在注释掉的行中,您将两个字符串作为参数传递。

在循环中,您将传递一个字符串和一个int作为参数。

错误发生在byte2.split()上,因为它是一个int。传入数据报的一部分,而不是数字位置,你会没事的。