Re: [pyar] Re: ¿If anidado?

Página superior
Adjuntos:
+ (text/plain)

Responder a este mensaje
Autor: Fabian Ezequiel Gallina
Fecha:  
A: pyar
Asunto: Re: [pyar] Re: ¿If anidado?
El día 17 de septiembre de 2009 15:48, <guagliap@???> escribió:
>
>
>  On Thu, 17 Sep 2009 14:32:30 -0300, Roberto Alsina <ralsina@???> wrote:
>
>>On Thursday 17 September 2009 13:47:33 guagliap@??? wrote:
>>> def firstTrue(cond):
>>>     """ devuelve True siempre la primera vez que se la ejecuta, las veces
>>>  subsiguientes evalua la condicion """ stack = inspect.stack()[1]      # El
>>>  stack del programa llamador line = stack[2]                 # Nro de linea
>>>  desde la que llame a firstTrue del stack
>>>
>>>     if not "line" in firstTrue.__dict__:
>>>         # Primera vez que llamo a la funcion
>>>         firstTrue.line = line
>>>         return True
>>>     elif firstTrue.line != line:
>>>         # Llame a la funcion desde otro punto del programa
>>>         firstTrue.line = line
>>>         return True
>>>
>>>     return cond
>>
>>A ver...
>>
>>def firstTrue():
>>       yield True
>>       while True:
>>               yield False
>>
>>ft=firstTrue()
>>print ft.next()
>>print ft.next()
>>print ft.next()
>>
>>Produce
>>
>>True
>>False
>>False
>>
>>y es un poco más pitónico ;-)
>
>
> bueno, pero la idea de la función que yo había posteado era que sirviera de una forma
> genérica para evitar el if ... break dentro del while, en vez de:
>
> while True:
>        <codigo>
>        if not <condicion>:
>                break
>
> usaría:
>
> while firstTrue (<condicion>):
>        <codigo>
>
>
> Saludos,
> Pablo
>
>


Pero fijate vos cuántas complicaciones y vueltas para lograr algo que
el if ... break hace de forma tan legible y pythonica :)

En python se da también una situación particular que justo afecta a
este caso y es que dentro de los fors y los whiles no se pueden hacer
asignaciones como por ejemplo en C/C++.

Es decir que no se puede hacer algo tipo:

while(!edad = validar_edad()) {
printf("que sea un numero la proxima");
}

if(edad > 18) {
printf("metete al puticlub");
} else {
printf("anda a ver los power rangers");
}

A lo que se me ocurre que algo como esto es factible:

edad = None

def validar_edad():
global edad
edad = raw_input()
return edad.isdigit()

while not validar_edad():
print "que sea un numero la proxima"

edad = int(edad)

if edad > 18:
print "metete al puticlub"
else:
print "anda a ver los power rangers"


No se me gusta mucho mas el while True: if ... break que tiró Roberto Alsina.


Saludos,
-- 
Fabián E. Gallina
http://www.from-the-cloud.com


---------------------------------------------------------------------
Para dar de baja la suscripcion, mande un mensaje a:
   pyar-unsubscribe@???


Para obtener el resto de direcciones-comando, mande un mensaje a:
pyar-help@???

PyAr - Python Argentina - Sitio web: http://www.python.com.ar/