Mensajes: 4
Temas: 1
Registro en: Jun 2020
Reputación:
0
12-06-2020, 05:53 AM
(Última modificación: 12-06-2020, 03:13 PM por Francisco.)
Buenas,
He realizado este código donde introduces varios números y cuando introduces fin te devuelve su suma, la cantidad de números, la media y el valor máximo y mínimo. Pues bien cuando te da el valor max y min no reconoce números de mas de 1 dígito sino que los separa como si fueran 1, 2,... números únicos en función de la cantidad de dígitos del numero que pongas.
Alguno sabría como solucionar este problema. Gracias de antemano
Código: contador = 0
total = 0
mayor = None
menor = None
while True:
valor = input("Introduce un número (o 'fin' para terminar): ")
if valor in "fin":
break
try:
total = total + float(valor)
contador = contador + 1
for valores in valor:
if mayor is None or valores > mayor :
mayor = valores
elif menor is None or valores < menor:
menor = valores
except:
print("Valor introducido incorrecto. Intenta de nuevo...")
print("La suma de los números es de: ",total)
print("La cantidad de números introducidos es de: ",contador)
print("El promedio de valores ha sido de: ",round(total / contador))
print('El valor maximo es:', mayor)
print('El valor minimo es:', menor)
Mensajes: 1.300
Temas: 3
Registro en: Feb 2016
Reputación:
71
12-06-2020, 03:15 PM
(Última modificación: 12-06-2020, 03:17 PM por Francisco.)
Hola, bienvenido.
Eso pasa porque estás recorriendo con un bucle, en tu línea 13, la variable valor, que es una cadena (porque input() siempre retorna una cadena). ¿Cuál es el objetivo de ese bucle? ¿Podrías explicar la lógica de las líneas 11-17?
Saludos
Mensajes: 4
Temas: 1
Registro en: Jun 2020
Reputación:
0
(12-06-2020, 03:15 PM)Francisco escribió: Hola, bienvenido.
Eso pasa porque estás recorriendo con un bucle, en tu línea 13, la variable valor, que es una cadena (porque input() siempre retorna una cadena). ¿Cuál es el objetivo de ese bucle? ¿Podrías explicar la lógica de las líneas 11-17?
Saludos
Hola Francisco, gracias por tu respuesta.
Es un ejercicio que me piden en un manual que estoy siguiendo y este es en el tema de la Iteracion, entonces te pide que escribas un programa que lea repetidamente números hasta que el usuario introduzca “fin”. Una vez se haya introducido “fin”, muestra por pantalla el total, la cantidad de números , la media de esos números y el numero maximo y minimo. Si el usuario introduce cualquier otra cosa que no sea un número, detecta su fallo usando try y except, muestra un mensaje de error y pasa al número siguiente.
El error que me surge es el que he comentado cuando pongo un numero de mas de 1 dígito a la hora de devolverme el valor máximo o mínimo los separa como si fueran 1, 2,... números únicos en función de la cantidad de dígitos del numero que pongas.
Ejemplo: pongo 1, 2, 45, 8, 9. El máximo seria 45 pues el programa me devuelve 9 porque 45 lo entiende como 4 y 5.
Mensajes: 1.300
Temas: 3
Registro en: Feb 2016
Reputación:
71
Hola. Se entiende cuál es el ejercicio, por eso te preguntaba por el objetivo de tu bucle en la línea 13, porque ahí es donde radica el problema: estás recorriendo una cadena, lo que va a hacer que se separen los caracteres (en tu caso, cada dígito del número que ingresa el usuario).
Puedo darte un código que lo resuelva y ya, pero calculo que la idea es que puedas aprender los contenidos, por eso me interesa saber cuál es la lógica que pensaste para la solución .
Saludos!
Mensajes: 4
Temas: 1
Registro en: Jun 2020
Reputación:
0
(16-06-2020, 01:06 AM)Francisco escribió: Hola. Se entiende cuál es el ejercicio, por eso te preguntaba por el objetivo de tu bucle en la línea 13, porque ahí es donde radica el problema: estás recorriendo una cadena, lo que va a hacer que se separen los caracteres (en tu caso, cada dígito del número que ingresa el usuario).
Puedo darte un código que lo resuelva y ya, pero calculo que la idea es que puedas aprender los contenidos, por eso me interesa saber cuál es la lógica que pensaste para la solución .
Saludos!
El motivo del código de la linea 13 es para resolver la cuestión del max, min. Yo lo escribí pensando: para todos los valores que recoja en la variable valor ver si son mayores o menores que las variable mayor menor respectivamente y con ello me daría el max y mínimo. Ahora entiendo que recorre una cadena pero no encuentro la solución para que recoja los números enteros.
Saludos
Mensajes: 1.300
Temas: 3
Registro en: Feb 2016
Reputación:
71
Bien, dándole una vuelta al código se podría implementar de la forma que lo pensaste vos. Pero tené en cuenta que vos deberías hacer ese bucle solamente luego de haber obtenido todos los números (o sea, despúes de que el usuario ingresó "fin"), y ahora lo estás haciendo cada vez que el usuario ingresa un número. Y además, para poder hacer el bucle necesitás tener los números en una lista. Entonces, podrías hacer lo siguiente:
1) Mover el bucle debajo del while (porque cuando termina el while quiere decir que ya tenés todos los números).
2) Crear una lista antes del while, e ir agregándole los números vía append() luego de recibirlos vía input().
También tené en cuenta que, si no querés hacer manualmente el bucle, podés usar las funciones incorporadas max() y min() que devuelven los números máximo y mínimo de una lista: https://micro.recursospython.com/recurso...lista.html.
Saludos!
Mensajes: 4
Temas: 1
Registro en: Jun 2020
Reputación:
0
(16-06-2020, 08:41 PM)Francisco escribió: Bien, dándole una vuelta al código se podría implementar de la forma que lo pensaste vos. Pero tené en cuenta que vos deberías hacer ese bucle solamente luego de haber obtenido todos los números (o sea, despúes de que el usuario ingresó "fin"), y ahora lo estás haciendo cada vez que el usuario ingresa un número. Y además, para poder hacer el bucle necesitás tener los números en una lista. Entonces, podrías hacer lo siguiente:
1) Mover el bucle debajo del while (porque cuando termina el while quiere decir que ya tenés todos los números).
2) Crear una lista antes del while, e ir agregándole los números vía append() luego de recibirlos vía input().
También tené en cuenta que, si no querés hacer manualmente el bucle, podés usar las funciones incorporadas max() y min() que devuelven los números máximo y mínimo de una lista: https://micro.recursospython.com/recurso...lista.html.
Saludos!
Gracias lo pondre en practica
Saludos
|