-2

我正在尝试在一个获取两个参数的函数上组合一个 for 循环。我需要在两个参数上运行(它们都是整数列表)。尝试这个对我不起作用:

def xor_bytes (b, a):
    for i in range (b):
    for Z in range (a):
        if b[i]>a[Z]:
            return byte1
        if b[i]<a[Z]:
            return byte2
        if b[i]==a[Z]:
            return 0
4

1 回答 1

2
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
  1. 查看标准库文档zip或在终端尝试一下
  2. 案件很重要。我修复了你的大写zs
  3. 没有必要使用 range 来遍历列表。只需遍历列表。
  4. 此代码实际上不会按预期工作,或者根本不会工作,因为您有未定义的变量

请注意,您的代码实际上只会返回一个字节。您可能想将其用作生成器:

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']

如果不是很明显,这需要两个字节字符串并返回一个字节列表(或技术上,长度为 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'
于 2012-12-12T20:59:34.723 回答