On Thu, 17 Sep 2009 11:56:38 -0300, Claudio Freire wrote: >2009/9/16 Facundo Batista > >> 2009/9/16 Charif Mauricio Nadir : >> >> > El uso de la sentencia break está considerada como una mala práctica, al >> > igual que continue. El flujo de un programa debe ser fácil de seguir sin >> > saltos y sin interrumpir el flujo de las estructuras de control. >> >> No estoy de acuerdo. >> >> ... >> while True: >> edad = raw_input(mssg) >> if edad.isdigit(): >> break >> >> print "no nro" >> >> >El problema de los while True y los breaks es que hacen el análisis de >correctitud y terminación por invariantes casi imposible. >Están deprecados en el mundo de la programación porque es muy difícil, >leyéndolos, asegurar que no es un loop infinito, y que cuando sale el >invariante (si hay) se cumple. > >Aquí, claro está, realmente podría ser un loop infinito (el usuario nunca >tipea un número), y el único invariante deseado es "edad.isdigit()" - >nuevamente, ese while True hace menos evidente que al salir del loop, edad >es en efecto un número. > >Por eso yo propongo: > >edad = None >while edad is None or not edad.isdigit(): > edad = raw_input("dale... un numerito...") > >La ventaja: al salir del loop uno sabe: >1) que "edad is not None" (útil) >2) que "edad.isdigit()" (útil) Mi versión (¿vale como "hola mundo", ya que es mi primer post?) :) ---------------- import inspect 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 edad = "0" # Entra igual la primera vez while firstTrue (not edad.isdigit()): edad = raw_input ("¿Cuantos años tenes? ") if not edad.isdigit(): print "No ingresaste un nro!" -------------- Aunque no sé si lo usaría en producción, habría que ver si la performance es razonable llamando continuamente a inspect.stack. Saludos, Pablo G --------------------------------------------------------------------- Para dar de baja la suscripcion, mande un mensaje a: pyar-unsubscribe@decode.com.ar Para obtener el resto de direcciones-comando, mande un mensaje a: pyar-help@decode.com.ar PyAr - Python Argentina - Sitio web: http://www.python.com.ar/