Foros del Web » Programando para Internet » Python »

Duda con sentencia if not

Estas en el tema de Duda con sentencia if not en el foro de Python en Foros del Web. Muy buenas, tengo un trozo de código que se me atasca, y es que me interesa que tras un "if not", se ejecute un "break" ...
  #1 (permalink)  
Antiguo 14/04/2011, 10:06
 
Fecha de Ingreso: abril-2011
Mensajes: 83
Antigüedad: 13 años, 7 meses
Puntos: 8
Pregunta Duda con sentencia if not

Muy buenas, tengo un trozo de código que se me atasca, y es que me interesa que tras un "if not", se ejecute un "break" y salga del bucle, pero no hay forma...

Código:
while True:
    try:
        line = input("enter a number or Enter to finish: ")
        if not line:
            break
        indexes.append(len(numbers))
        number = int(line)
        numbers.append(number)
        total += number
        if lowest is None or lowest > number:
            lowest = number
        if highest is None or highest < number:
            highest = number
    except ValueError as err:
        print(err)
Entiendo que si en el input presiono enter, sin escribir nada, line se queda en -1 y se debería ejecutar el break..
Gracias de antemano por cualquier ayuda.
  #2 (permalink)  
Antiguo 14/04/2011, 10:39
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Duda con sentencia if not

Cita:
Entiendo que si en el input presiono enter, sin escribir nada, line se queda en -1 y se debería ejecutar el break..
line se queda en blanco y al evaluarlo en el if da falso.
Recuerda si un string lo evalúas en un if, es verdadero si contiene algo y falso si esta vació.

Sigo sin entender la pregunta aquí. De hecho no hay pregunta.
  #3 (permalink)  
Antiguo 14/04/2011, 11:23
 
Fecha de Ingreso: abril-2011
Mensajes: 83
Antigüedad: 13 años, 7 meses
Puntos: 8
Respuesta: Duda con sentencia if not

Ey muchas gracias de nuevo Razpeitia, bueno, la pregunta, es, que porque al no escribir nada y pulsar intro, no se ejecuta el break.

Un saludo
  #4 (permalink)  
Antiguo 14/04/2011, 11:55
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Duda con sentencia if not

Para mi si funciona, por lo menos lo he probado en la consola.

Lo mas probable es que estés usando algún IDE que no maneje bien el stdin.

Prueba con este código y dime que te imprime:
Código Python:
Ver original
  1. indexes = []
  2. numbers = []
  3. highest = None
  4. lowest = None
  5. total = 0
  6. while True:
  7.     try:
  8.         line = input("enter a number or Enter to finish: ")
  9.         print(repr(line))
  10.         print(repr(line.strip()))
  11.         if not line:
  12.             break
  13.         indexes.append(len(numbers))
  14.         number = int(line)
  15.         numbers.append(number)
  16.         total += number
  17.         if lowest is None or lowest > number:
  18.             lowest = number
  19.         if highest is None or highest < number:
  20.             highest = number
  21.     except ValueError as err:
  22.         print(err)
  #5 (permalink)  
Antiguo 14/04/2011, 13:13
 
Fecha de Ingreso: abril-2011
Mensajes: 83
Antigüedad: 13 años, 7 meses
Puntos: 8
Respuesta: Duda con sentencia if not

Pues utilizo idle de python para escribir el código y lo ejecuto en cmd de windows 7 ¿tal vez sea por eso :p?
Esta es la salida:

Código:
enter a number or Enter to finish: a
'a\r'
'a'
invalid literal for int() with base 10: 'a\r'
enter a number or Enter to finish: 3
'3\r'
'3'
enter a number or Enter to finish:
'\r'
''
invalid literal for int() with base 10: '\r'
  #6 (permalink)  
Antiguo 14/04/2011, 14:03
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Duda con sentencia if not

No creo que sea por eso, pero de todas formas me parece extraño.
Código Python:
Ver original
  1. indexes = []
  2. numbers = []
  3. highest = None
  4. lowest = None
  5. total = 0
  6. while True:
  7.     try:
  8.         line = input("enter a number or Enter to finish: ")
  9.         line = line.strip() #Para quitar espacios al principio o final de la cadena
  10.         if not line:
  11.             break
  12.         indexes.append(len(numbers))
  13.         number = int(line)
  14.         numbers.append(number)
  15.         total += number
  16.         if lowest is None or lowest > number:
  17.             lowest = number
  18.         if highest is None or highest < number:
  19.             highest = number
  20.     except ValueError as err:
  21.         print(err)
Mother of God, a pesar de que básicamente tienes la solución allá arriba no lo haz usado.

Etiquetas: sentencia
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:05.