992 Stimmen

Wie erhält man das logische Xor zweier Variablen in Python?

Wie erhalten Sie die logisches Xor von zwei Variablen in Python?

Ich habe zum Beispiel zwei Variablen, von denen ich erwarte, dass sie Zeichenketten sind. Ich möchte testen, ob nur eine von ihnen einen wahren Wert enthält (also nicht None oder die leere Zeichenkette ist):

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

El ^ Operator scheint bitweise zu sein und ist nicht für alle Objekte definiert:

>>> 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'

6 Stimmen

Wie definiert man "xor" für ein Paar von Zeichenketten? Was sollte "abc" ^ "" Ihrer Meinung nach zurückgeben, was es nicht tut?

25 Stimmen

Es sollte True zurückgeben, anstatt eine Exception auszulösen, da nur eine der Zeichenketten True ist, wie durch den normalen Python-Typ bool definiert.

72 Stimmen

Ich bin erstaunt, dass Python keinen Infix-Operator namens "xor" hat, was die intuitivste, pythonische Implementierung wäre. Die Verwendung von "^" ist konsistent mit anderen Sprachen, aber nicht so offensichtlich lesbar wie das meiste in Python.

0voto

lbolla Punkte 5271

XOR ist implementiert in operator.xor .

10 Stimmen

Operator.xor entspricht der bitweisen Operation, die der ursprüngliche Poster nicht will.

0 Stimmen

-1voto

Gary02127 Punkte 4480

Die Art und Weise, wie Python mit logischen Operationen umgeht, kann verwirrend sein, daher bietet meine Implementierung dem Benutzer (standardmäßig) die Möglichkeit einer einfachen Wahr/Falsch-Antwort. Das eigentliche Python-Ergebnis erhält man, indem man das optionale dritte Argument auf None setzt.

def xor(a, b, true=True, false=False): # set true to None to get actual Python result
    ab1 = a and not b
    ab2 = not a and b
    if bool(ab1) != bool(ab2):
        return (ab1 or ab2) if true is None else true
    else:
        return false

-13voto

Muhammad Abdullah Punkte 161

Wir können xor von zwei Variablen leicht durch die Verwendung finden:

def xor(a,b):
    return a !=b

Beispiel:

xor(Wahr,Falsch) >>> Wahr

2 Stimmen

または xor("hey", "there") >>> Stimmt, aber das ist nicht das, was wir wollen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X