[ Foro de Python ]

bucles python ejercicio

14-Nov-2022 18:53
Invitado (v?ctor)
2 Respuestas

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.


01-Dec-2022 15:37
Invitado (ayudante)

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


01-Dec-2022 15:37
Invitado (ayudante)

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.)