[ Foro de Python ]

bucles python ejercicio

14-Nov-2022 18:59
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.


19-Nov-2022 18:08
Davman Davman

Tu error se debe a que el programa en la línea 4, en la que estás nombrando la variable "numero", le estas diciendo que lo que el te responda, se convierta en un número entero. Si la persona responde con un valor str, el programa lo que hará sera convertir ese valor en un entero y por lo cual, dará un error.

El error de que te contabiliza los número negativos es porque "int" coge todos los números enteros (que son positivos y negativos).

Así es como lo hice yo y por lo que me salió bien:

i = 0
acum = 0
for i in range (5):
numero=input("Introduzca un número: ")
while not numero.isdigit():
print ('Solo numeros positivos')
numero=input("Vuelva a introducir su número: ")
i=i+1
acum = acum + int(numero)

media = acum/i
print("La media de los 5 números es",acum,"/",i,"= {0:.1f}" .format(media))


19-Nov-2022 20:55
Invitado (pedro)

## Otra versión

```python
CANTIDAD = 3
ERROR = f'\nDato invalido'
ENTRADA = f'\nIntroduce un número positivo: '

acumulador = 0
for _ in range(CANTIDAD):
   while not (dato := input(ENTRADA)).isdigit():
       print(ERROR)
   acumulador += int(dato)

print(f'La media de los {CANTIDAD} '
     f'números es {(acumulador/CANTIDAD):.1f}')
```

> https://www.online-ide.com/dm4afUyeqY






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