and y or en Python

A diferencia de C/C++, los operadores and y or de python cuando realizan la operación lógica booleana, retornan uno de los valores que están comparando. No un valor booleano. Cabe destacar que en python 0, ”, [], (), {} y None son falsos en un contexto booleano. Y que todo lo demás es verdadero.

Las operaciones realizadas por “and” y “or” son evaluadas de izquierda a derecha, y si la expresión evaluada es verdadera “and” devolverá el último valor evaluado. y “or” devuelve el primer valor evaluado. así:

>>>
>>> 'a' and 'b'
'b'
>>> 1 and 2
2
>>> 1 or 2
1
>>> 'a' or 'b'
'a'
>>>

AND:

“and” opera hasta que se cumpla la operación booleana. Si alguno de los valores es falso en contexto booleano, and devuelve el primer valor falso.

>>>
>>> 0 and 3
0
>>> 1 and 0 and 3
0
>>>

OR:

“or” opera siempre que se cumpla una operación booleana. Si algún valor es verdadero, “or” devuelve ese valor inmediatamente y omite el resto (El resto no es evaluado).

>>>
>>> 0 or 3
3
>>> 1 or 0 or 3
1
>>> 0 or 5 or 3
5
>>>

Si todos los valores son falsos.

>>>
>>> 0 or 0
0
>>> 0 or ''
''
>>> 0 or ' '
' '
>>> 0 or []
[]
>>> [] or 0 or ''
''
>>> '' or [] or {}
{}
>>>

“or” devuelve el último. “or” evalúa ”, que es falsa, después [], que es falsa, después {}, que es falsa, y devuelve {}.

Un truco and-or:

para los que hemos programado en C/C++ debemos haber visto o usado el operador ternario condicional “?”. P.e. Si queremos lograr algo como: z = (a>b) ? a : b; asignar el máximo de a y b a la variable z con el operador “?”.

>>> a = 1
>>> b = 2
>>> a > b
False
>>> a > b and a or b
2
>>>

Por qué?
“a > b es False” y “False and 1 es False” y “False or 2 es 2”

y si queremos saber cuál es el menor z = (a<b) ? a : b;

>>>
>>> a < b
True
>>>
>>> a < b and a or b
1
>>>

Por qué?
“a < b es True” y “True and 1 es 1” y “1 or 2 es 1”
Que tal si hacemos una función que nos muestre cuál es el mayor de dos números:

>>>
>>> def mayor(a, b):
... return a > b and a or b
...
>>> mayor(2, 3)
3
>>> mayor(8, 3)
8
>>> mayor(23.5, 3)
23.5
>>> mayor(23.5, 5.9)
23.5
>>> mayor(23.5, 65.9)
65.900000000000006
>>>

Que tal si le pasamos algo como:

>>> mayor(0, 1)
1
>>> mayor(0, 0)
0
>>> mayor(1, 0)
1
>>> mayor('', 0)
0
>>> mayor('', 'sdf')
'sdf'
>>> mayor([], '')
''
>>> mayor([], 'reer')
'reer'
>>> mayor('', 1)
1
>>> mayor('fff', 1)
'fff'
>>> mayor('fff', 14566)
'fff'
>>> mayor( 14566, 'fff')
'fff'
>>>

By: Jolth

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s