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/