2012-09-08 22 views
8

Estoy tratando de obtener una instrucción if para desencadenar desde más de una condición sin reescribir la instrucción varias veces con diferentes desencadenadores. e.g .:Múltiples condiciones con sentencias if/elif

if user_input == "look": 
    print description 


if user_input == "look around": 
    print description 

¿Cómo las condensa en una sola afirmación?

He intentado usar 'o' y ha provocado que cualquier entrada_ruta desencadene la instrucción independientemente de si la entrada coincide con alguna de las condiciones.

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

Respuesta

11

Lo que estamos tratando de hacer es

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

Otra opción si usted tiene un montón de posibilidades:

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

Dado que está utilizando 2.7, también se puede escribir es así (que funciona en 2.7 o 3+, pero no en 2.6 o menos):

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

que hace un set de sus elementos, que es un poco más rápido de buscar (aunque eso solo importa si la cantidad de elementos que está revisando es mucho mayor que 2).


La razón por la que siempre se realizó su primer intento es esta. La mayoría de las cosas en Python se evalúan a True (que no sean False, None, o cadenas vacías, listas, dicts, ...). or toma dos cosas y las evalúa como booleanas. Por lo tanto, user_input == "look" or "look around" se trata como (user_input == "look") or "look_around"; si el primero es falso, es como si escribieras if "look_around":, que siempre pasará.

+0

Gracias Dougal! Pregunta estúpida realmente! – Blaine

+0

@Blaine Este es un problema con el que se topan muchos nuevos programadores en Python; parece que está haciendo lo que usted quiere que haga, pero, bueno, no es así. :) Espero que mi explicación de por qué funciona así tenga sentido. – Dougal

+0

Ahhh eso lo explica. ¡He estado aprendiendo mis tablas lógicas así que te entiendo! :) – Blaine

2

Se puede usar expresiones regulares para que coincida con las cuerdas si siguen un patrón con secciones opcionales o se puede hacer una búsqueda de matriz:

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

El operador booleano or sólo funciona con valores booleanos, se evalúa la expresiones en ambos lados y devuelve True si una de las expresiones se evalúa como True. No tiene nada que ver con el lenguaje natural '

Cuestiones relacionadas