如何得到Python中两个变量的异或逻辑?

  • 回答 (2)
  • 关注 (0)
  • 查看 (1209)

如何得到Python中两个变量的逻辑异或?

例如,我有两个变量,我希望是字符串。我想测试它们中只有一个包含True值(不是None或空字符串):

str1 = raw_input("Enter string one:")
str2 = raw_input("Enter string two:")
if logical_xor(str1, str2):
    print "ok"
else:
    print "bad"

该^运营商似乎是按位,并在所有对象没有定义:

>>> 1 ^ 1
0
>>> 2 ^ 1
3
>>> "abc" ^ ""
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for ^: 'str' and 'str'
少女女先疯队长少女女先疯队长提问于
HKC

红客学院 · 创始人 (已认证)

道可道 非常道 名可名 非常名回答于

您始终可以使用xor的定义从其他逻辑运算中进行计算:

(a and not b) or (not a and b)

但是这对我来说有点过于冗长,乍一看不是很清楚。另一种方法是:

bool(a) ^ bool(b)

两个布尔值上的异或运算符是逻辑异或(不同于整数,它是按位)。这是有道理的,因为bool只是一个子类int,但实现只有值0和1。而逻辑xor相当于当域被限制到0和时,按位异或1。

所以这个logical_xor函数会被执行如下:

def logical_xor(str1, str2):
    return bool(str1) ^ bool(str2)
秋之夕颜清念念不忘,必有回响回答于

如果你已经把输入标准化为布尔值,那么!=是xor。

bool(a) != bool(b)

扫码关注云+社区

领取腾讯云代金券