2015-09-24 6 views
5

Ich versuche, eine if-Anweisung in Python zu kompilieren, wo es zwei Variablen überprüft, um zu sehen, ob sie < = .05 sind. Nun, wenn beide Variablen True sind, möchte ich nur, dass der Code übergeben/fortgesetzt wird, aber wenn nur eine der Variablen True ist, möchte ich, dass der Code etwas tut. zB:Python bedingte der eine oder andere aber nicht beide

ht1 = 0.04 
ht2 = 0.03 

if (ht1 <= 0.05) or (ht2 <= 0.05): 
    # do something 
else: 
    pass 

Ich glaube nicht, dieses Beispiel wird die Art und Weise arbeiten, ich will es würde wie mein Verständnis von OR 1 Bedingung gibt true oder beide Bedingungen return true. Wenn jemand mir dabei helfen könnte, mich in die richtige Richtung zu lenken, wäre das sehr zu begrüßen.

+0

können Sie denken xor-Operation so etwas, wenn bool ((HT1 <= 0,05)) = Bool ((ht2 <= 0,05)): – csharpcoder

Antwort

8

Was Sie wollen, ist ein „Exklusiv-Oder“, die in diesem Fall als ‚nicht-gleich‘ ausgedrückt werden oder ‚ist nicht‘ Beziehung:

if (ht <= 0.05) is not (ht2 <= 0.05): 

Die Art und Weise dieser funktioniert, dass der if nur erfolgreich ist, wenn einer von ihnen True ist und der andere False ist. Wenn sie beide True oder beide False sind, dann wird es zum else Block gehen.

+1

Richtig, aber subtil. Relationale Ausdrücke geben ein Bool zurück. Ein Bool ist das eine oder andere der beiden Singleton-Objekte 'True' oder' False'. Daher ist "ist nicht" ein geeigneter Test. Persönlich würde ich '! =' Bevorzugen. – nigel222

+1

@ nigel222 Stimmen Sie zu, dass es ein wenig subtil ist; Ich habe nur "nicht" verwendet, speziell weil es ein Vergleich von 'Bool's ist. Es liest sich ein bisschen sauberer auf diese Weise, aber das ist definitiv ein Geschmackssache. In meinen Augen würde das '! =' Ein wenig unter den anderen '<=' Vergleichen verloren gehen, obwohl es einem sehr unterschiedlichen Zweck dient (d. H. Mag mathematisch erscheinen, obwohl es ein logischer Operator ist). – tzaman

+0

Danke für diese Erklärung. Die Klammern in '(ht1 <= 0.05)! = (Ht2 <= 0.05)' machen das '! =' Auseinander. Einverstanden, Geschmack nicht Substanz. – nigel222

7

Da relationale Operatoren immer zu einem bool führen, überprüfen Sie einfach, ob sie unterschiedliche Werte haben.

if (ht1 <= 0.05) != (ht2 <= 0.05): # Check if only one is true 
    ... 
0

Nur ein weiterer Weg, dies zu tun:

if max(ht1, ht2) > 0.05 and min(ht1, ht2) <= 0.05: 
3

Diese Methode ist technisch langsamer, weil es die Vergleiche zweimal berechnen hat, aber ich finde es besser lesbar leicht. Ihre Laufleistung kann variieren.

ht1 = 0.04 
ht2 = 0.03 

if (ht1 <= 0.05) and (ht2 <= 0.05): 
    pass 
elif (ht1 <= 0.05) or (ht2 <= 0.05): 
    # do something. 
+0

+1 für Klarheit im Fluss. pythonisch. – wim

Verwandte Themen