[ Foro de Python ]
Tengo dudas en este ejercicio:
Implementar un programa que lea 5 números enteros y positivos y calcule la media de los números y
lo presenta con máximo 1 decimal. Cuando el usuario mete un numero negativo o otra entrada inválida,
hay que volver a preguntárselo. La lectura de los números tienes que hacer dentro de un bucle (entonces
no simplemente llamar 5 veces a input en secuencia!).
Ejecuta los siguientes test cases para testear tu programa:
ejemplo de ejecución
>>> %Run
Introduzca un número: 3
Introduzca un número: 4
Introduzca un número: 0
Introduzca un número: 2
Introduzca un número: 10
La media de los 5 numeros es 19/5 = 3.8
>>> %Run
Introduzca un número: -2
Solo numeros positivos!
Introduzca un número: 2
Introduzca un número: 4
Introduzca un número: r
Entrada inválida
Introduzca un número: 7
Introduzca un número: 10
Introduzca un número: 0
La media de los 5 numeros es 23/5 = 4.6
Yo he escrito esto:
i = 0
acum = 0
for i in range (5):
numero=int(input("Introduzca un número: "))
try:
if numero >= 0:
i=i+1
acum = acum + numero
else:
print ('solo numeros positivos')
except:
print ('entrada inválida')
media = acum/i
print("La media de los 5 números es",acum,"/",i,"= {0:.1f}" .format(media))
pero me da error en dos cosas: cuando introduzco un valor string python me da error y no puedo continuar, y cuando introduzco valores negativos me los contabiliza, y se supone que me tendría que seguir pidiendo valores hasta que le de al programa 5 números enteros.
agradecería que alguien me ayudase por favor.
El error que te va a dar es ValueError: invalid literal for int() with base 10 y es un error de casteo de dato. Deberías en todo caso castear a int dentro del try.
Utiliza while en vez de for para esperar todos los números y concluye el ciclo cuando los 5 números realmente se hayan cargado sin error...algo similar a esto:
i = 0
acum = 0
cantidad_nros = 0
while (i != 5):
try:
numero=int(input("Introduzca un número: "))
if numero >= 0:
i += 1
acum = acum + numero
else:
print ('solo numeros positivos')
except:
print ('entrada inválida')
media = acum/i
print("La media de los 5 números es",acum,"/",i,"= {0:.1f}" .format(media))
abrazo de oso
El error que te va a dar es ValueError: invalid literal for int() with base 10 y es un error de casteo de dato. Deberías en todo caso castear a int dentro del try.
Utiliza while en vez de for para esperar todos los números y concluye el ciclo cuando los 5 números realmente se hayan cargado sin error...algo similar a esto:
i = 0
acum = 0
cantidad_nros = 0
while (i != 5):
try:
numero=int(input("Introduzca un número: "))
if numero >= 0:
i += 1
acum = acum + numero
else:
print ('solo numeros positivos')
except:
print ('entrada inválida')
media = acum/i
print("La media de los 5 números es",acum,"/",i,"= {0:.1f}" .format(media))
abrazo de oso
(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.)