XOR 运算符没有给出预期的结果?
XOR operator is not giving expected results?
我熟悉在 Python 中使用 'and'、'not' 和 'or' 运算符,我刚刚了解了 'XOR' 运算符的工作原理。
但是,当我编码时它似乎不起作用:
a = 2
b = 12
if a == 2 ^ b == 12:
print("You must be broken") # because TRUE XOR TRUE IS FALSE
if a == 10 ^ b > 12:
print("You must also be broken") # because FALSE XOR FALSE IS FALSE
if a < 10 ^ b > 13:
print("This should print because TRUE XOR FALSE IS TRUE")
if a > 3 ^ b == 12:
print("This should print because FALSE XOR TRUE IS TRUE")
程序没有打印出任何东西?
试试这个,你会得到答案:
if (a == 2) ^ (b == 12):
print("You must be broken") # because TRUE XOR TRUE IS FALSE
if (a == 10) ^ (b > 12):
print("You must also be broken") # because FALSE XOR FALSE IS FALSE
if (a < 10) ^ (b > 13):
print("This should print because TRUE XOR FALSE IS TRUE")
if (a > 3) ^ (b == 12):
print("This should print because FALSE XOR TRUE IS TRUE")
发生这种情况是因为那些运营商的想法与您不同。
查看 Grant 在评论中发布的有用 link。
你误会了Python's operator precedence。
这个条件:
a < 10 ^ b > 13
表示
a < (10^b) > 13
这意味着
(a < 10^b) and (10^b > 13)
所以是假的
大概你的意思是:
(a < 10) ^ (b > 13)
你的其他情况也一样。
您错过了括号,请检查 operators precedence,运算符 ^ 比 ==
具有更高的优先级
一个简单的修复:
a = 2
b = 12
if ( a == 2 ) ^ ( b == 12 ):
print("You must be broken") # because TRUE XOR TRUE IS FALSE
if ( a == 10) ^( b > 12 ):
print("You must also be broken") # because FALSE XOR FALSE IS FALSE
if ( a < 10) ^ (b > 13):
print("This should print because TRUE XOR FALSE IS TRUE")
if ( a > 3) ^( b == 12):
print("This should print because FALSE XOR TRUE IS TRUE")
我熟悉在 Python 中使用 'and'、'not' 和 'or' 运算符,我刚刚了解了 'XOR' 运算符的工作原理。
但是,当我编码时它似乎不起作用:
a = 2
b = 12
if a == 2 ^ b == 12:
print("You must be broken") # because TRUE XOR TRUE IS FALSE
if a == 10 ^ b > 12:
print("You must also be broken") # because FALSE XOR FALSE IS FALSE
if a < 10 ^ b > 13:
print("This should print because TRUE XOR FALSE IS TRUE")
if a > 3 ^ b == 12:
print("This should print because FALSE XOR TRUE IS TRUE")
程序没有打印出任何东西?
试试这个,你会得到答案:
if (a == 2) ^ (b == 12):
print("You must be broken") # because TRUE XOR TRUE IS FALSE
if (a == 10) ^ (b > 12):
print("You must also be broken") # because FALSE XOR FALSE IS FALSE
if (a < 10) ^ (b > 13):
print("This should print because TRUE XOR FALSE IS TRUE")
if (a > 3) ^ (b == 12):
print("This should print because FALSE XOR TRUE IS TRUE")
发生这种情况是因为那些运营商的想法与您不同。 查看 Grant 在评论中发布的有用 link。
你误会了Python's operator precedence。
这个条件:
a < 10 ^ b > 13
表示
a < (10^b) > 13
这意味着
(a < 10^b) and (10^b > 13)
所以是假的
大概你的意思是:
(a < 10) ^ (b > 13)
你的其他情况也一样。
您错过了括号,请检查 operators precedence,运算符 ^ 比 ==
具有更高的优先级一个简单的修复:
a = 2
b = 12
if ( a == 2 ) ^ ( b == 12 ):
print("You must be broken") # because TRUE XOR TRUE IS FALSE
if ( a == 10) ^( b > 12 ):
print("You must also be broken") # because FALSE XOR FALSE IS FALSE
if ( a < 10) ^ (b > 13):
print("This should print because TRUE XOR FALSE IS TRUE")
if ( a > 3) ^( b == 12):
print("This should print because FALSE XOR TRUE IS TRUE")