""" 14) Escribir un programa que solicite un número entero positivo, si se ingresa otra cosa, se deberá mostrar un mensaje indicando un error. A partir del entero válido, por pantalla se mostrará su factorial, considerar el caso del 0 (cero). NOTA: si el ingreso es erróneo se mostrará un mensaje con 2 opciones; "Volver a intentarlo" o "Salir". """ bandera = True print("\n Este es el ejemplo 1") while bandera == True: # Bucle while para el Try-Except try: numero = int(input("\n Ingrese un numero entero positivo: ")) # Ingreso el numero except ValueError: print("\n Error... Debe ingresar un numero, reingrese") # solicito que reingrese un valor valido else: if numero < 0: print("\n Error a ingresado un valor erroneo \n 1) Volver a intentarlo \n 2) Salir") opcion = input("\n Ingrese una opcion: ") while opcion != "1" and opcion != "2": opcion = input("\n Error... Reingrese 1) Si quiere volver a intentarlo - 2) Para salir: ") if opcion == "2": bandera = False else: acumulador = 1 for valor in range(1,numero+1): # Observar que las líneas de la 29 a la 32 no dependen del for, por lo que no tiene sentido escribirlas dentro del for if numero == 0: print(f"\n El factorial de '{numero}' es: '{numero+1}'") elif numero == 1: print(f"\n El factorial de '{numero}' es: '{numero}'") else: acumulador *= valor print(f"\n El factorial de '{numero}' es: '{acumulador}'") numero = 0 print("\n Este es el ejemplo 2") while numero >= 0: # Bucle while para el Try-Except try: numero = int(input("\n Ingrese un numero entero positivo: ")) # Ingreso el numero except ValueError: print("\n Error... Debe ingresar un numero, reingrese") # solicito que reingrese un valor valido else: if numero >= 0: acumulador = 1 for valor in range(1,numero+1): acumulador *= valor print(f"El factorial de '{numero}' es: '{acumulador}'") else: print("\n Error a ingresado un valor erroneo \n 1) Volver a intentarlo \n 2) Salir") opcion = input("\n Ingrese una opcion: ") while opcion != "1" and opcion != "2": opcion = input("\n Error... Reingrese 1) Si quiere volver a intentarlo - 2) Para salir: ") if opcion == "1": numero = 0 else: numero = -1 #¿Qué inconvenientes tiene modificar el valor de control del bucle (numero = -1) para salir? numero = 0 print("\n Este es el ejemplo 3") while numero >= 0: try: numero = int(input("\n Ingrese un numero entero positivo: ")) except ValueError: print("\n Error... Debe ingresar un numero, reingrese") else: if numero >= 0: acumulador = 1 for valor in range(1,numero+1): acumulador *= valor print(f"El factorial de '{numero}' es: '{acumulador}'") else: print("\n Error a ingresado un valor erroneo \n 1) Volver a intentarlo \n 2) Salir") try: opcion = input("\n Ingrese una opcion: ") #Observar que esta línea nunca va a generar error, por lo que no tiene # sentido utilizar Try/Expect/Else except ValueError: print("\n Ingrese un valor valido") else: while opcion != "1" and opcion != "2": opcion = input("\n Error... Reingrese 1) Si quiere volver a intentarlo - 2) Para salir: ") if opcion == "1": numero = 0 # A diferencia del codigo anterior, solo analizo cuando el usurio ingresa la opcion "1", dado que por descarte en estas líneas # el contenido de numero es un numero negativo, de lo contrario no ingresaria a esta sección, por lo que si el usuario desea salir # presionando la opcion "2", cuando se vuelva a evaluar en el while la condición dara por falso y saldrá del bucle. """ Unificando lo mejor de los tres códigos obtenemos: """ continuar = True # Variable bandera para controlar el bucle principal while continuar: try: numero = int(input("\n Ingrese un número entero positivo: ")) except ValueError: # Se ejecuta si el usuario ingresa algo que no puede convertirse a entero print("\n Error... Debe ingresar un número entero. Intente nuevamente.") else: if numero < 0: # Si el número es negativo, se muestra el menú de opciones print("\n Error: ha ingresado un valor negativo.") print("\n 1) Volver a intentarlo") print("\n 2) Salir") opcion = input("\n Ingrese una opción: ") # Validación de opción hasta que se elija una válida while opcion != "1" and opcion != "2": opcion = input("\n Opción inválida. Ingrese 1) para reintentar o 2) para salir: ") if opcion == "2": continuar = False # Se sale del bucle else: # Cálculo del factorial si el número es válido acumulador = 1 for i in range(1, numero + 1): acumulador *= i # Impresión del resultado print(f"\n El factorial de '{numero}' es: '{acumulador}'")