2012-09-08 7 views
8

Ich versuche, eine zu bekommen, wenn Anweisung von mehr als eine Bedingung ausgelöst werden, ohne die Aussage mehrmals mit verschiedenen Trigger neu zu schreiben. Beispiel:Mehrere Bedingungen mit if/elif Aussagen

if user_input == "look": 
    print description 


if user_input == "look around": 
    print description 

Wie würden Sie diese in einer Aussage zusammenfassen?

Ich habe versucht mit ‚oder‘ und es verursacht jede raw_input überhaupt die Aussage unabhängig von auszulösen, ob die Eingabe eine der beiden Bedingungen angepasst.

if user_input == "look" or "look around": 
    print description 

Antwort

11

Was Sie versuchen zu tun

if user_input == "look" or user_input == "look around": 
    print description 

Eine weitere Option, wenn Sie viele Möglichkeiten haben:

if user_input in ("look", "look around"): 
    print description 

Da Sie 2.7 verwenden, können Sie auch schreiben es wie folgt (die funktioniert in 2,7 oder 3 +, aber nicht in 2,6 oder darunter):

if user_input in {"look", "look around"}: 
    print description 

, die ein set Ihrer Elemente macht, die (wenn auch, dass die Dinge nur, wenn die Anzahl der Elemente ist Sie überprüfen viel größer als 2) zu suchen, über sehr wenig schneller ist.


Der Grund, warum Ihr erster Versuch immer durchging, ist dies. Die meisten Dinge in Python beziehen sich auf True (andere als False, None, oder leere Strings, Listen, dicts, ...). or nimmt zwei Dinge und bewertet sie als booleans. So wird user_input == "look" or "look around" wie (user_input == "look") or "look_around" behandelt; Wenn der erste falsch ist, ist es wie du geschrieben hast if "look_around":, die immer durchgehen wird.

+0

Dank Dougal! Dumm Frage wirklich! – Blaine

+0

@Blaine Dies ist ein Problem, auf das viele neue Programmierer in Python stoßen. Es sieht so aus, als würde es tun, was du willst, aber es tut es nicht. :) Hoffentlich macht meine Erklärung, warum es so funktioniert, Sinn. – Dougal

+0

Ahhh das erklärt es. Ich habe meine Logiktabellen gelernt, damit ich dich kriege! :) – Blaine

2

Sie reguläre Ausdrücke verwenden, könnten die Saiten passen, wenn sie ein Muster mit optionalen Abschnitte folgen, oder Sie können ein Array-Lookup:

if user_input in ["look", "look around"]: 
    print description 

Der Boolesche Operator or nur mit Booleschen Werten arbeitet, wertet sie aus der Ausdrücke auf beiden Seiten und gibt True zurück, wenn einer der Ausdrücke True auswertet. Es hat nichts mit der natürlichen Sprache zu tun '