def calcular_factorial(numero):
"""
Calcula el factorial de un número entero positivo.
Maneja excepciones si el número es negativo, no es un entero, o es muy grande.
"""
try:
# Verificar si el número es un entero
if not isinstance(numero, int):
raise TypeError("El número debe ser un entero.")
# Verificar si el número es negativo
if numero < 0:
raise ValueError("El número no puede ser negativo para calcular el factorial.")
# Verificar si el número es demasiado grande para ser procesado
if numero > 1000: # Este límite es arbitrario; en la práctica, se puede ajustar según el contexto
raise OverflowError("El número es demasiado grande para calcular el factorial.")
# Calcular el factorial de forma iterativa
factorial = 1
for i in range(1, numero + 1):
factorial *= i # Multiplicación acumulativa
# Imprimir y devolver el resultado del factorial
print(f"El factorial de {numero} es: {factorial}")
return factorial
except TypeError as te:
# Captura si el tipo de dato no es un entero
print(f"Error de tipo: {te}")
except ValueError as ve:
# Captura si el número es negativo
print(f"Error de valor: {ve}")
except OverflowError as oe:
# Captura si el número es demasiado grande y podría causar problemas de memoria o tiempo de procesamiento
print(f"Error de desbordamiento: {oe}")
except Exception as e:
# Captura cualquier otro error inesperado
print(f"Ha ocurrido un error inesperado: {e}")
# Ejemplo de uso
try:
entrada = int(input("Ingrese un número entero positivo: ")) # Solicita un número al usuario
calcular_factorial(entrada)
except ValueError:
# Captura si el usuario ingresa algo que no se puede convertir a un entero
print("Error: Debe ingresar un número entero válido.")