Vous pouvez toujours utiliser la définition de xor pour le calculer à partir d'autres opérations logiques:
(a and not b) or (not a and b)
Mais c'est un peu trop verbeux pour moi, et n'est pas particulièrement clair au premier coup d'œil. Une autre façon de le faire est:
bool(a) ^ bool(b)
L'opérateur xor sur deux booléens est logique xor (contrairement à l'ints, où c'est au niveau du bit). Ce qui est logique, puisqu' bool
est juste une sous-classe de int
, mais est mis en œuvre uniquement les valeurs 0
et 1
. Et logique xor est équivalent à xor au niveau du bit lorsque le domaine est restreint à l' 0
et 1
.
Si l' logical_xor
fonction serait mis en œuvre comme:
def logical_xor(str1, str2):
return bool(str1) ^ bool(str2)
Crédit à Nick Coghlan sur le Python-3000 liste de diffusion.