В Пайтоне есть
оператор побитового XOR, который также отлично работает с логическими значениями, но его поведение легко повторить.
Исключающее "или" ведёт себя как обычное "или" за одним исключением — два True на входе даёт результат False.
Можно так и поступить — возвращать False в этом особом случае, во всех остальных использовать or:
def xor(a, b):
return False if a and b else a or b
print(xor(True, True)) # False
print(xor(True, False)) # True
print(xor(False, True)) # True
print(xor(False, False)) # False
Однако, если мы внимательно посмотрим на результаты, то окажется, что нам нужно True если значения не равны. Поэтому реализацию XOR можно записать проще:
def xor(a, b):
return a != b