2012-09-08 17 views
8

Próbuję uzyskać instrukcję if, aby wyzwalać z więcej niż jednego warunku bez wielokrotnego przepisywania instrukcji z różnymi wyzwalaczami. np .:Wiele warunków z instrukcjami if/elif

if user_input == "look": 
    print description 


if user_input == "look around": 
    print description 

Jak skondensować je w jednym oświadczeniu?

Próbowałem użyć "lub" i spowodowało to, że w ogóle raw_input wyzwolić instrukcję niezależnie od tego, czy dane wejściowe pasowały do ​​któregokolwiek z warunków.

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

Odpowiedz

11

Co starasz się zrobić to

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

Inną opcją, jeśli masz wiele możliwości:

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

Ponieważ używasz 2.7, można również napisać to tak (działa w wersji 2.7 lub 3+, ale nie w wersji 2.6 lub niższej):

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

, która tworzy set swoich elementów, co jest bardzo nieznacznie szybsze do przeszukiwania (choć ma to znaczenie tylko wtedy, gdy liczba sprawdzanych elementów jest znacznie większa niż 2).


Powodem Twoja pierwsza próba zawsze jest to przeszła. Większość rzeczy w Pythonie ocenia się na True (innych niż False, None lub pustych ciągów, list, dykt, ...). or ma dwie rzeczy i ocenia je jako wartości logiczne. Tak więc user_input == "look" or "look around" jest traktowany jak (user_input == "look") or "look_around"; jeśli pierwszy jest fałszywy, to tak jakbyś napisał if "look_around":, który zawsze będzie przechodził.

+0

Dzięki Dougal! Głupie pytanie naprawdę! – Blaine

+0

@Blaine Jest to problem, z którym wielu nowych programistów napotyka w Pythonie; to wygląda na to, że robi to, co chcesz, ale, cóż, tak nie jest. :) Mam nadzieję, że moje wyjaśnienie, dlaczego działa tak, jak ma sens, ma sens. – Dougal

+0

Ahhh to wyjaśnia. Nauczyłem się logicznych tabel, więc dostaję cię! :) – Blaine

2

Można użyć wyrażeń regularnych, aby dopasować ciągi jeśli idą wzór z sekcji opcjonalnych lub można zrobić odnośnika tablicy:

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

Wartość logiczna operator or działa tylko z wartości logicznych, to ocenia wyrażenia po obu stronach i zwraca True, jeśli jedno z wyrażeń jest oceniane na True. Nie ma nic wspólnego z naturalnym językiem "

Powiązane problemy