我是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
所以请任何人帮助我这个代码中的错误在哪里..提前谢谢
答案 0 :(得分: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
s。
答案 1 :(得分: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.
希望这有帮助!