Python 在IF语句中,有没有一种简洁的方法可以对两个条件执行异或运算?

Python 在IF语句中,有没有一种简洁的方法可以对两个条件执行异或运算?,python,binary,logical-operators,xor,Python,Binary,Logical Operators,Xor,我目前正在创建一个二进制计算器,它允许正二进制和负二进制输入。关于我的问题,我有以下代码: if (firstvalue[0] == "-" and not secondvalue[0] == "-") or (secondvalue[0] == "-" and not firstvalue[0] == "-"): invertedbinary.append("-") 所以很明显,如果其中一个数字是负数,但不是两个都是负数,那么最后的字符串将有一个负号。否则,两者都是正数,并且字符串

我目前正在创建一个二进制计算器,它允许正二进制和负二进制输入。关于我的问题,我有以下代码:

if (firstvalue[0] == "-" and not secondvalue[0] == "-") or (secondvalue[0] == "-" and not firstvalue[0] == "-"): 
    invertedbinary.append("-")
所以很明显,如果其中一个数字是负数,但不是两个都是负数,那么最后的字符串将有一个负号。否则,两者都是正数,并且字符串上没有负号

我只是想知道有没有更整洁的方法?我试着使用
^
,但我想它只是一个位运算符

如果firstvalue[0]==“-”^secondvalue[0]==“-”:


我也尝试过异或,以防机会不大,但显然运气不好。有没有关于更简洁的方法的建议?

^
如果使用括号,就可以了:

if (firstvalue[0] == "-") ^ (secondvalue[0] == "-"):

您也可以使用
=
代替
^
。它在这里的工作方式与此完全相同,但可能更清晰一些。

^
如果使用括号,则可以正常工作:

if (firstvalue[0] == "-") ^ (secondvalue[0] == "-"):

您也可以使用
=
代替
^
。它在这里的工作方式完全相同,但可能更清楚一些。

使用
^
需要记住的一件事是,如果任何表达式是非布尔表达式,它将意外地运行:
a^b
不等于
(a和不是b)或(b和不是a)
如果,比如
a=5
b=2


既然异或不能短路,你也可以使用一个函数

from operator import xor as xor_
from functools import reduce

def xor(*args):
    return reduce(xor_, map(bool, args))

if xor(firstvalue[0] == '-', secondvalue[0] == '-'):
    ...

这适用于任意数量的值,也适用于非布尔值,因此您可以执行
xor(1,1,1,1)=0
xor(1,1,1,1,1)=1

^
需要记住的一件事是,如果任何表达式是非布尔表达式,它将异常运行:
a^b
不等于
(a而不是b)或(b而不是a)
if,比如说
a=5
b=2


既然异或不能短路,你也可以使用一个函数

from operator import xor as xor_
from functools import reduce

def xor(*args):
    return reduce(xor_, map(bool, args))

if xor(firstvalue[0] == '-', secondvalue[0] == '-'):
    ...

这适用于任意数量的值,也适用于非布尔值,因此您可以执行
xor(1,1,1,1)=0
xor(1,1,1,1,1)=1

哦,天哪,我真不敢相信我错过了这么明显的事情。谢谢你发现了!天哪,真不敢相信我错过了这么明显的事情。谢谢你发现了!