def xor_bytes (b, a):
for i,z in zip(b,a):
if i>z:
return byte1
if i<z:
return byte2
if i==z:
return 0
- 標準ライブラリのドキュメントを参照する
zip
か、ターミナルで試してみてください
- 大文字と小文字が重要です。
z
大文字の sを修正しました
- リストを反復処理するために range を使用する必要はありません。リストを反復するだけです。
- 未定義の変数があるため、このコードは実際には意図したとおりに機能しないか、実際にはまったく機能しません
コードは実際には 1 バイトしか返さないことに注意してください。おそらくジェネレーターとして使用したいでしょう:
def xor_bytes (b, a):
for i,z in zip(b,a):
if i>z:
yield i
if i<z:
yield z
if i==z:
yield chr(0)
In [6]: list(xor_bytes('hambone', 'cheesey'))
Out[6]: ['h', 'h', 'm', 'e', 's', 'n', 'y']
代わりにこれが必要になる可能性があります。
In [13]: [chr(ord(a)^ord(b)) for a,b in zip('hambone', 'cheesey')]
Out[13]: ['\x0b', '\t', '\x08', '\x07', '\x1c', '\x0b', '\x1c']
明らかでない場合、これは 2 つのバイト文字列を取り、バイトの各ペアを xor した結果を含むバイト (または技術的には長さ 1 のバイト文字列) のリストを返します。
または:
In [14]: ''.join(chr(ord(a)^ord(b)) for a,b in zip('hambone', 'cheesey'))
Out[14]: '\x0b\t\x08\x07\x1c\x0b\x1c'