"Unsupported operand type(s) for ^: 'str' and 'str'" 二进制在 Python 3.x
"Unsupported operand type(s) for ^: 'str' and 'str'" with Binary in Python 3.x
我目前正在做一个关于二元运算符的项目。现在我有两个列表,其中包含一系列带有 8 位 1 和 0 的字符串。假设我有这段代码(表示创建两个数组时生成的内容):
arr1 = ['0b01110101', '0b00001111', '0b01001101']
arr2 = ['0b10010100', '0b00000101', '0b00111001']
arr3 = []
我想 运行 一个循环,在该循环中我对每个值执行 XOR 二元运算符。到目前为止,这是我的循环:
for i in len(arr1):
arr3[i] = arr1[i] ^ arr2[i]
当我 运行 此代码时,我收到此错误消息:
Unsupported operand type(s) for ^: 'str' and 'str'
我试过这样做:
arr3[i] = bin(arr1[i]) ^ bin(arr2[i])
它 returns 这个错误信息:
TypeError: 'str' object cannot be interpreted as an integer
我该如何解决这个问题?
编辑 1:这与评论中标记的内容不重复。我不是在寻找如何执行正常的 XOR 二进制函数。我知道该怎么做。我正在寻找一种方法将这些字符串转换为二进制数,以便我可以对它们使用 XOR 运算符。
bin
是整数的字符串表示。您不能对字符串进行 XOR。
只是做一个整数转换,基数2,转换理解整数,有0b
或没有它:
for a1,a2 in zip(arr1,arr2):
print(bin(int(a1,2) ^ int(a2,2)))
结果:
0b11100001
0b1010
0b1110100
您可以取消引用列表
arr1 = ['0b01110101', '0b00001111', '0b01001101']
arr2 = ['0b10010100', '0b00000101', '0b00111001']
arr3 = []
并修复循环中的错误并使用 append
和 range
进行迭代。
for i in range(len(arr1)): # xrange for Pyhon2
arr3.append(int(arr1[i], 2) ^ int(arr2[i], 2))
试试这个:
arr1 = ['0b01110101', '0b00001111', '0b01001101']
arr2 = ['0b10010100', '0b00000101', '0b00111001']
arr3 = []
for i, _ in enumerate(arr1):
xor = int(arr1[i], 2) ^ int(arr2[i], 2)
arr3.append("0b{0:08b}".format(xor))
输出:
['0b11100001', '0b00001010', '0b01110100']
我目前正在做一个关于二元运算符的项目。现在我有两个列表,其中包含一系列带有 8 位 1 和 0 的字符串。假设我有这段代码(表示创建两个数组时生成的内容):
arr1 = ['0b01110101', '0b00001111', '0b01001101']
arr2 = ['0b10010100', '0b00000101', '0b00111001']
arr3 = []
我想 运行 一个循环,在该循环中我对每个值执行 XOR 二元运算符。到目前为止,这是我的循环:
for i in len(arr1):
arr3[i] = arr1[i] ^ arr2[i]
当我 运行 此代码时,我收到此错误消息:
Unsupported operand type(s) for ^: 'str' and 'str'
我试过这样做:
arr3[i] = bin(arr1[i]) ^ bin(arr2[i])
它 returns 这个错误信息:
TypeError: 'str' object cannot be interpreted as an integer
我该如何解决这个问题?
编辑 1:这与评论中标记的内容不重复。我不是在寻找如何执行正常的 XOR 二进制函数。我知道该怎么做。我正在寻找一种方法将这些字符串转换为二进制数,以便我可以对它们使用 XOR 运算符。
bin
是整数的字符串表示。您不能对字符串进行 XOR。
只是做一个整数转换,基数2,转换理解整数,有0b
或没有它:
for a1,a2 in zip(arr1,arr2):
print(bin(int(a1,2) ^ int(a2,2)))
结果:
0b11100001
0b1010
0b1110100
您可以取消引用列表
arr1 = ['0b01110101', '0b00001111', '0b01001101']
arr2 = ['0b10010100', '0b00000101', '0b00111001']
arr3 = []
并修复循环中的错误并使用 append
和 range
进行迭代。
for i in range(len(arr1)): # xrange for Pyhon2
arr3.append(int(arr1[i], 2) ^ int(arr2[i], 2))
试试这个:
arr1 = ['0b01110101', '0b00001111', '0b01001101']
arr2 = ['0b10010100', '0b00000101', '0b00111001']
arr3 = []
for i, _ in enumerate(arr1):
xor = int(arr1[i], 2) ^ int(arr2[i], 2)
arr3.append("0b{0:08b}".format(xor))
输出:
['0b11100001', '0b00001010', '0b01110100']