[pyar] Algunas preguntas (newbies) que no encontré googleando

Francisco Palm francisco.palm en gmail.com
Mar Mayo 3 16:43:04 ART 2011


¡Qué buenas preguntas!, eso es algo genial de Python, que uno se ve
tentado de forzar la sintaxis para ser incluso más natural.

2011/5/3 Federico Hoerth <fedehz en gmail.com>:
> Hola gente. como les va?
> Los que habrán leido mi "hola mundo" sabran que empece hace poquito jeje.
> Estoy haciendo algunos ejercicios pythonescos, googleando encontre este
> sitio: http://www.pyschools.com/
> Cuestion es que me esta yendo bien, pero hay cosas que no las se hacer
> "simples" y me termino complicando.
> Por ejemplo, mas de una vez quise hacer:
>
> if a and b and c > x:
>     # etc
>
>
> Pero no me funcaba y siempre terminaba haciendo
>
> if a > x and b > x and c > x:
>     # etc

El tema es que no está definida la propiedad asociativa de la
comparación sobre la suma.

 a and b and c

Funciona por "lógica de cortocircuito", en cuánto consiga en la
secuencia un valor equivalente a "False" (0, '', [], {}, ...) devuelve
el valor, a menos que llegue hasta el final, en cuyo caso devolverá el
valor de c (equivalente a "True").

Por lo tanto en la expresión:

a and b and c > x

El tema es que por el operador "and" tiene un orden de precedencia
mayor que ">", de modo que "c > x" ni siquiera será evaluado si se
rompe el cortocircuito antes. Así, se devuelve "a" o "b" si son False
o equivalente, de lo contrario devuelve "c > x"

>>> a, b, c, x = -3, 0, -1, -1
>>> a and b and c > x
0 # devuelve el valor 0, el valor de b, que hace cortocircuito

>>> a, b, c, x = -3, -2, -1, -2
>>> a and b and c > x # Aunque x = -2, es igual a -2 y mayor que -3, devuelve c > x
True

Siguiendo la recomendación de Guido
(http://www.artima.com/weblogs/viewpost.jsp?thread=98196)

Para encadenar "and" se puede hacer:

>>> a, b, c, x = -3, -2, -1, -2
>>> all([v > x for v in [a,b,c]])
False

Y para encadenar "or" usar la función "any()"

-- 
--------------------------------------
fpalm en ula.ve
francisco.palm en gmail.com

cel: +58 +426 5721730
tel: +58 +274 6352001

----
Debemos ser libres, no para hacer lo que nos plazca, sino libres para
comprender muy profundamente nuestros propios instintos e impulsos. K



More information about the pyar mailing list