[ Foro de Python ]

Condiciones repetitivas

08-Feb-2013 02:10
Aitor Millan Fernandez
2 Respuestas

Buenas, ante todo agradecer una web con un contenido tan valioso como esta. Aunque creo entenderlo completamente, me he atascado en el siguiente codigo:

 
print("Dime un número")
x = input ( )
suma = 0
while x != 0:
       suma = int(suma) + int(x)
       print ("Hasta ahora, la suma es {}".format(suma) )
       print ("Dime otro numero")
       x = input ( )
print ("Terminado")
 


Todo funciona correctamente, pero cuando pulso 0 no acaba el programa, simplemente sigue sumando. Cuando introduzco unos cuantos numeros da este error:

Traceback (most recent call last):
 File "/home/jefe/Programacion/Python/condiciones repetitivas.py", line 5, in <module>
   suma = int(suma) + int(x)
ValueError: invalid literal for int() with base 10: ''

Espero que alguien me pueda ayudar. No me quiero frustrar tan pronto! Gracias!


08-Feb-2013 21:36
Nacho Cabanes (+31)

Estás comparando "x" con cero sin tener certeza de que sea un número.

Me explico: Python 2.x es menos estricto con los tipos de las variables, y ese ejemplo funciona correctamente (probado con Python 2.7). En cambio, Python 3.x es más exigente. Como "x" es algo que introduce el usuario, se da por sentado que es una cadena de texto. Por eso, no puedes sumar "x" a un número ni comparar "x" con un número.

No hace falta que le digas que tome "suma" como un número entero, porque ya lo es. En cambio, sí tendrás que decírselo de "x", que deberá ser "input()" convertido a entero, así:

 
print ("Dime un numero") 
x = int( input ( )) 
suma = 0
while x != 0:
  suma = suma + x
  print ("Hasta ahora, la suma es ") 
  print (suma) 
  print ("Dime otro numero") 
  x = int(input ( )) 
print ("Terminado")
 


Tomo nota mental para detallar esta peculiaridad en el curso... cuando tenga un respiro... Actualizo, ya he corregido los "input()" del curso que leen números, para que sean "int(input())", de modo que se comporte correctamente en Python 3.


08-Feb-2013 21:48
Aitor Millan Fernandez

Me imaginaba algo asi, pero no sabia como decirselo. Muchas gracias por la ayuda. Un abrazo.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)