""" Resolución de Parcial Tema Da - Horario 7-8 h. Autor de la resolución: Diego Gabriel Nuñez """ """ Ejercicio 1 de 2: Utilizando WHILE, se pide escribir un script que permita el proceso de números reales con valores entre [100,1000). El script deberá: A) Acumular los números que pertenezcan al rango [100,1000). Se deberá considerar que el valor ingresado puede no se un valor numérico, en cuyo caso se solicitará reingreso.(try/except) B) Contar los números que están fuera del Rango[100,1000), pero que son positivos o cero C) Contar los números que están fuera del Rango [100,1000), pero que son negativos. El script finaliza cuando el total acumulado llegue o supere a 1000. En ese punto, al finalizar, deberá mostrar: 1) El total acumulado. 2) La cantidad de valores positivos o mayores que cero ingresados. 3) La cantidad de valores negativos ingresados. """ print("\n ----------------------------------- Desarrollo -----------------------------------") # Defino las variables que voy a utilizar en el programa acumulador = 0 # En esta variable será donde voy a ir acumulando (sumando) los valores que esten dentro del rango solicitado [100;1000) contador_pos = 0 # Esta variable será la encargada de contabilizar todos los números positivos y ceros que se encuentren fuera del rango [100;1000) contador_neg = 0 # Esta variable será la encargada de contabilizar todos los números negativos que se encuentren fuera del rango [100;1000) # Una vez definido todas las variables que se van a utilizar en el programa, se procede realizar el bucle WHILE while acumulador <= 1000: # Recordar que el ciclo WHILE se ejecuta mientras la condición sea verdadera. #En la primera ejecución acumulador vale 0 por lo tanto 0 < 1000 es verdadero. try: # En caso que el valor ingresado no sea un valor flotante (real). El try captura el error y lo manda al except. valor = float(input("\n Ingrese cualquier valor numérico que desee: ")) except ValueError: # Este verifica el error y ejecuta las lineas que esten dentro de este tipo de excepción. print("\n El valor ingresado no es un número.") # Observar que el reingreso en este caso se genera automático dado que luego de ejecutar las lineas del except, se vuelve a ejecutar # el ciclo WHILE y como el acumulador sigue siendo menor que 1000, el ciclo WHILE se ejecuta nuevamente. # En caso que el valor ingresado sea un número, el except no se ejecuta y el programa sigue ejecutando correctamente. else: # Sino se ingresa ningún valor que genere error, el programa salta a este else y sigue ejecutando correctamente el programa. # Tener en cuenta que este else, no se ejecuta si previamente se ejecuta except. if valor >= 100 and valor < 1000: # En caso que el valor ingresado esté dentro del rango solicitado [100;1000) acumulador += valor # Se suma el valor ingresado al acumulador. print(f"\n Se ha almacenado correctamente el valor {valor} en el acumulador") # Indico que se guardo correctamente. elif valor >= 0: # En caso que el valor ingresado sea mayor que cero. contador_pos += 1 # Se suma 1 al contador de valores positivos. print(f"\n Se ha contabilizado exitosamente el valor positivo {valor}") # Indico que se contabilizó correctamente. else: # Por descarte, todos los valores que no son ceros ni positivos, van a ser logicamente negativos y que no estan dentro del rango [100;1000) contador_neg += 1 print(f"\n Se ha contabilizado exitosamente el valor negativo {valor}") # Indico que se contabilizó correctamente. # Importante, no confundir este else del if, con el else del try. Son dos else diferente. Ante cualquier duda revisar los conceptos # de else para try/except e if. # Estas lineas de código que estan dentro del else se van a ejecutar hasta que el valor almacenado en el acumulador supere a 1000 y la # condición se evalue como falsa, por ejemplo, si el acumulador suma 1500, entonces se obtiene que (1500 < 1000) y esto evidentemente es # falso. Por ende el ciclo WHILE se detiene. # Por último, para mostar los resultados, se imprimen los valores de las variables que se van acumulando. # Importante de observar que estos valores los muestro al finalizar el ciclo while y por ende finalizar el programa. print("\n A continuación se presentan los resultados obtenidos al ejecutar este programa \n") print("Total acumulado: ", acumulador) print("Cantidad de valores positivos: ", contador_pos) print("Cantidad de valores negativos: ", contador_neg) print("""\n ¿Se puede hacer con while True? Claro que se puede, pero de la siguiente manera.""") """Declaro nuevas variables para que no se mezclen con las anteriores""" acumulador_1 = 0 cont_pos = 0 cont_neg = 0 while True: try: n = float(input("\n Ingrese cualquier valor numerico: ")) except ValueError: print("\n Error, debe ingresar un valor numerico") else: if 100 <= n < 1000: # Una manera diferente de expresar el mismo intervalo acumulador_1 += n print(f"\n Se ha almacenado correctamente el valor {n} en el acumulador") # Indico que se guardo correctamente. elif n >= 0: # En caso que el valor ingresado sea mayor que cero. cont_pos += 1 # Se suma 1 al contador de valores positivos. print(f"\n Se ha contabilizado exitosamente el valor positivo {n}") # Indico que se contabilizó correctamente. else: # Por descarte, todos los valores que no son ceros ni positivos, van a ser logicamente negativos y que no estan dentro del rango [100;1000) cont_neg += 1 print(f"\n Se ha contabilizado exitosamente el valor negativo {n}") if acumulador_1 >= 1000: # Por cada iteración el programa debe evaluar si el acumulador es mayor o igual a 1000. break # Super importante, sino se genera un bucle infinito. # Cuando el while se ejecuta por primera vez, el acumulador es 0, por lo tanto, el programa no entra en el if. # Cuando el acumulador es mayor o igual a 1000, el programa entra en el if y se ejecuta el break. # Por ende, el programa se detiene. print("\n A continuación se presentan los resultados obtenidos al ejecutar este programa \n") print("Total acumulado: ", acumulador_1) print("Cantidad de valores positivos: ", cont_pos) print("Cantidad de valores negativos: ", cont_neg) print("""\n ¿Y si quiero utilizar bandera? Claro que se puede. Similar al while True pero con bandera.""") """Declaro nuevas variables para que no se mezclen con las anteriores""" acum = 0 positivo = 0 negativo = 0 bandera = True while bandera: try: x = float(input("\n Ingrese cualquier valor numerico: ")) except ValueError: print("\n Error, debe ingresar un valor numerico") else: if 100 <= x < 1000: acum += x print(f"\n Se ha almacenado correctamente el valor {x} en el acumulador") # Indico que se guardo correctamente. elif x >= 0: # En caso que el valor ingresado sea mayor que cero. positivo += 1 # Se suma 1 al contador de valores positivos. print(f"\n Se ha contabilizado exitosamente el valor positivo {x}") # Indico que se contabilizó correctamente. else: # Por descarte, todos los valores que no son ceros ni positivos, van a ser logicamente negativos y que no estan dentro del rango [100;1000) negativo += 1 print(f"\n Se ha contabilizado exitosamente el valor negativo {x}") if acum >= 1000: # Por cada iteración el programa debe evaluar si el acumulador es mayor o igual a 1000. bandera = False # Super importante, sino se genera un bucle infinito. print("\n A continuación se presentan los resultados obtenidos al ejecutar este programa \n") print("Total acumulado: ", acum) print("Cantidad de valores positivos: ", positivo) print("Cantidad de valores negativos: ", negativo) print("""\n ¿Y si quiero primero que el usuario ingrese un valor y luego que el programa lo almacene?""") """Claro que se puede, todo es posible siempre que se utilice correctamente la herramienta""" a = 0 # Ya me estoy quedando sin ideas... Acumulador c_p = 0 # Contador positivo c_n = 0 # Contador negativo print("\n Para el siguiente while, voy a utilizar lógica negada") while not(a >= 1000): validar = True # Bandera, lo defino acá para asegurarme que por cada reinicio del while not(a >= 1000) ingrese al while que evalua el tipo de ingreso de la variable numero while validar: try: numero = float(input("\n Ingrese un valor cualquiera: ")) except ValueError: print("\n Usted a ingresado un valor erroneo") continue # Como no voy a usar else, debo colocar continue validar = False # Cambio el estado de la bandera para que salga del while if not(numero <= 100 or numero > 1000): a += numero print(f"\n El número {numero} ingresado esta en el rango solicitado") elif not(numero > 0): c_n += 1 print(f"\n El número {numero} es negativo") else: c_p += 1 print(f"\n El número {numero} es positivo") print("\n A continuación se presentan los resultados obtenidos al ejecutar este programa \n") print("Total acumulado: ", a) print("Cantidad de valores positivos: ", c_p) print("Cantidad de valores negativos: ", c_n)