¿Cómo funcionan los operadores booleanos en condiciones ‘si’?

Actualmente soy nuevo en Python y estoy intentando ejecutar algunas líneas de código simples. No puedo entender cómo Python está evaluando esta syntax después de la sentencia if . Cualquier explicación será apreciada.

number = int(raw_input("Enter number : ")) if number == (1 or 2 or 3): print "Match" else: print "No match" 

Solo el número entero 1 produce un resultado positivo y cualquier otro número, incluidos 2 y 3, pasa por la twig else . ¿Pueden indicarse las condiciones como las siguientes solamente ?:

 if number == 1 or number == 2 or number == 3: 

Gracias.

Python tiene valores booleanos, como True y False , y también tiene valores falsos , como cualquier lista vacía, tupla o diccionario, una cadena vacía, 0 y None . Los valores de verdad son lo opuesto a eso, es decir, todo lo que está definido.

Python or evalúa y hace un cortocircuito en el primer elemento que devuelve un valor verdadero.

Entonces, la expresión (1 or 2 or 3) devolverá 1 .

Si desea comparar con todos los elementos, entonces está buscando la palabra clave in :

 if number in (1, 2, 3): # Do logic 

Probablemente quieras:

 if number in (1, 2, 3): 

El operador or toma dos argumentos, en sus lados izquierdo y derecho, y ejecuta la siguiente lógica:

  1. Evalúa las cosas en el lado izquierdo.
  2. Si es un valor verdadero (por ejemplo, bool(x) is True , por lo que no es cero, una cadena vacía o None ), devuélvalo y deténgalo.
  3. De lo contrario, evalúa las cosas en el lado derecho y devuélvelas.

Como tal, 1 or 2 or 3 es simplemente 1 , por lo que su expresión se convierte en:

 if number == (1): 

Si realmente quiere decir number == 1 or number == 2 or number == 3 , o number in (1, 2, 3) , tendrá que decir eso.

(Incidentalmente: el operador and funciona de la misma manera, excepto que el paso 2 regresa si el lado izquierdo es falsey).