在Python中对两个块执行XOR操作

3
我是一个新手,正在学习Python编程……我想在这里实现两个块之间的XOR运算。以下是我的代码:
def XorBlock(block1, block2):
    l = len(block1);
    if (l != len(block2)):
        raise ValueError, "XorBlock arguments must be same length"
    return [(block1[j]+block2[j]) % 2 for j in xrange(l)];

但是当我打电话时,它给了我一个问题。
TypeError: not all arguments converted during string formatting

所以请任何人帮助我找出这段代码中的错误...提前感谢


确保两个列表的元素都是数字,而不是字符串。 - georg
当我将其转换为整数时,它会给出这个TypeError:类型为'sage.rings.integer.Integer'的对象没有len()方法。 - rana tamer
2个回答

0
也许这就是你在寻找的内容:
def XorBlock(block1, block2):
    l = len(block1)
    if l != len(block2):
        raise ValueError
    #         |-> Converting into int
    return [(int(block1[j])+int(block2[j])) % 2 for j in xrange(l)]
    #                        |-> Converting into int


if __name__ == '__main__':
    print XorBlock("12345", "23456")

>>> XorBlock("010101", "108734")
[1, 1, 0, 0, 1, 1]

我决定将这两个参数都保留为字符串是最好的选择,因为在二进制中,你可能需要在任何具有值的数字之前添加一些“0”。

请问一下,如果代码中出现了 name == 'main' 这个条件判断语句,它的含义是什么? - rana tamer
@ranatamer 嗯,这就像C++中的main函数一样。基本上,如果Python正在运行当前文件,那么文件的__name__就会变成__main__。在这个例子中,你实际上不需要使用它,你只需输入XorBlock("12345", "23456"),它就能正常工作。 - Games Brainiac
@ranatamer请查看这个链接,它解释得比我更清楚。 - Games Brainiac

0
这部分有问题,请看一下:
(block1[j]+block2[j]) % 2

两个项目都是字符串,因此结果也是一个字符串。简而言之,Python将你的%2视为字符串格式化命令。

"string"%something

将期望的字符串用来指定它应该格式化的位置something。如果没有指定任何内容,将引发当前的TypeError。您可能需要类似这样的东西:

return[(int(block1[j])+int(block2[j])) % 2 for j in xrange(l)]
#This converts it to integers, then xor it.

希望这能帮到你!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接