0

うまく機能する2つの関数を作成しましたが、8つのグラフごとに「ジャンプ」するforループを使用して、コードの一部を変更して効率を高めたいと考えています。実行する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
4

3 に答える 3

2

あなたのループは、コメント行のようには見えません

for i in range(16,88,8):
    res=xor_bytes(res, datagram[i:i + 8])
于 2012-12-12T16:56:58.367 に答える
2

for次のようなループがあります。

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

次に、関数で.spliton 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])
于 2012-12-12T16:53:45.040 に答える
1

コメント アウトされている行では、2 つの文字列をパラメーターとして渡しています。

ループでは、string と int をパラメーターとして渡しています。

int であるため、エラーは byte2.split() にあります。数値の位置ではなく、データグラムのセクションを渡せば問題ありません。

于 2012-12-12T16:57:24.420 に答える