Calculadora de edad
Calculadora de edad Trabajas en una compañía que ofrece seguros de vida y de gastos médicos. La empresa está desarrollando una herramienta tecnológica, para que los agentes puedan calcular el monto de una póliza. Para dicho cálculo, se consideran varios factores de riesgo, entre los que se encuentra la edad. Por ello, el contratante debe llenar un formulario, incluyendo su fecha de nacimiento. Como primer reto, deberás calcular la edad del cliente al momento de la cotización.
• La captura de la fecha de nacimiento debe ser en una sola cadena de texto con formato DD-MM-AAAA.
• Validar que sea una fecha existente, si supera los 31 días o menor a 1 día de un mes, se deberá marcar como inválido.
• El año de nacimiento debe ser mayor de 1900. • Validar si el cliente ya cumplió años en la fecha de captura o aún no.
• Validar que no se puede dejar información en blanco o campos vacíos.
Análisis del problema
Necesitamos:
Capturar fecha en formato DD-MM-AAAA
Validar que sea una fecha válida
Calcular la edad
Verificar si ya cumplió años
Validar campos vacíos
Solución paso a paso
from datetime import datetime def validar_fecha(fecha_str): """ Valida si la fecha es correcta """ try: # Separar día, mes y año partes = fecha_str.split('-') if len(partes) != 3: return False, "Formato incorrecto. Use DD-MM-AAAA" dia = int(partes[0]) mes = int(partes[1]) ano = int(partes[2]) # Validar año mayor a 1900 if ano <= 1900: return False, "El año debe ser mayor a 1900" # Validar mes (1-12) if mes < 1 or mes > 12: return False, "Mes inválido. Debe ser entre 1 y 12" # Validar día según el mes dias_por_mes = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] # Ajustar febrero para años bisiestos if mes == 2: if (ano % 4 == 0 and ano % 100 != 0) or (ano % 400 == 0): dias_febrero = 29 else: dias_febrero = 28 if dia < 1 or dia > dias_febrero: return False, "Día inválido para febrero" else: if dia < 1 or dia > dias_por_mes[mes-1]: return False, f"Día inválido para el mes {mes}" return True, (dia, mes, ano) except ValueError: return False, "La fecha contiene caracteres no numéricos" except: return False, "Error al procesar la fecha" def calcular_edad_y_cumplio(fecha_nacimiento): """ Calcula la edad y verifica si ya cumplió años """ hoy = datetime.now() dia_nac, mes_nac, ano_nac = fecha_nacimiento # Calcular edad base edad = hoy.year - ano_nac # Verificar si ya cumplió años este año if (hoy.month < mes_nac) or (hoy.month == mes_nac and hoy.day < dia_nac): # No ha cumplido años aún edad -= 1 cumplio = False else: # Ya cumplió años cumplio = True return edad, cumplio def main(): print("=== CALCULADORA DE EDAD PARA SEGUROS ===") while True: # Capturar fecha fecha_input = input("\nIngrese su fecha de nacimiento (DD-MM-AAAA): ").strip() # Validar campo vacío if not fecha_input: print("❌ Error: No puede dejar el campo vacío") continue # Validar formato básico if len(fecha_input) != 10 or fecha_input.count('-') != 2: print("❌ Error: Formato incorrecto. Use DD-MM-AAAA") continue # Validar fecha es_valida, resultado = validar_fecha(fecha_input) if not es_valida: print(f"❌ Error: {resultado}") continue # Si llegamos aquí, la fecha es válida fecha_nacimiento = resultado edad, ya_cumplio = calcular_edad_y_cumplio(fecha_nacimiento) # Mostrar resultados print(f"\n✅ Fecha válida!") print(f"📅 Fecha de nacimiento: {fecha_input}") print(f"🎂 Edad actual: {edad} años") if ya_cumplio: print("✅ Ya cumplió años este año") else: print("⏳ Aún no cumple años este año") break # Ejecutar el programa if __name__ == "__main__": main()
Explicación para principiantes:
1. Importamos datetime
from datetime import datetime
Nos permite trabajar con fechas y horas.
2. Función validar_fecha()
Separa la cadena usando
split('-')Convierte a números con
int()Valida año > 1900
Valida mes entre 1-12
Valida días según el mes (considera años bisiestos)
3. Función calcular_edad_y_cumplio()
Obtiene la fecha actual con
datetime.now()Calcula la edad restando años
Verifica si ya cumplió comparando mes y día
4. Función main()
Maneja la interacción con el usuario
Valida campos vacíos
Llama a las otras funciones
Muestra resultados
Ejemplo de uso:
=== CALCULADORA DE EDAD PARA SEGUROS === Ingrese su fecha de nacimiento (DD-MM-AAAA): 15-03-1990 ✅ Fecha válida! 📅 Fecha de nacimiento: 15-03-1990 🎂 Edad actual: 34 años ✅ Ya cumplió años este año
Consejos para aprender:
Empieza simple: Primero haz que funcione, luego mejóralo
Prueba mucho: Prueba fechas inválidas, años bisiestos, etc.
Divide el problema: Cada función hace una cosa específica
Comenta tu código: Te ayuda a entender lo que haces
Claro, aquí tienes una versión más sencilla y fácil de entender para principiantes:
# Calculadora de Edad Simple print("=== CALCULADORA DE EDAD ===") print("Ingresa tu fecha de nacimiento en formato DD-MM-AAAA") # Pedir la fecha al usuario fecha = input("Fecha de nacimiento: ") # Validar que no esté vacío if fecha == "": print("❌ Error: No puedes dejar el campo vacío") exit() # Validar que tenga el formato correcto if len(fecha) != 10 or fecha[2] != '-' or fecha[5] != '-': print("❌ Error: Formato incorrecto. Debe ser DD-MM-AAAA") exit() # Separar día, mes y año partes = fecha.split('-') dia_str = partes[0] mes_str = partes[1] ano_str = partes[2] # Verificar que sean números if not (dia_str.isdigit() and mes_str.isdigit() and ano_str.isdigit()): print("❌ Error: Solo se permiten números") exit() # Convertir a números dia = int(dia_str) mes = int(mes_str) ano = int(ano_str) # Validar año (mayor a 1900) if ano <= 1900: print("❌ Error: El año debe ser mayor a 1900") exit() # Validar mes (1-12) if mes < 1 or mes > 12: print("❌ Error: El mes debe estar entre 1 y 12") exit() # Validar día según el mes if mes in [1, 3, 5, 7, 8, 10, 12]: # Meses con 31 días if dia < 1 or dia > 31: print("❌ Error: Día inválido para este mes") exit() elif mes in [4, 6, 9, 11]: # Meses con 30 días if dia < 1 or dia > 30: print("❌ Error: Día inválido para este mes") exit() else: # Febrero (mes 2) # Verificar si es año bisiesto if (ano % 4 == 0 and ano % 100 != 0) or (ano % 400 == 0): max_dias = 29 # Año bisiesto else: max_dias = 28 # Año normal if dia < 1 or dia > max_dias: print("❌ Error: Día inválido para febrero") exit() # Obtener fecha actual (año, mes, día) from datetime import datetime hoy = datetime.now() ano_actual = hoy.year mes_actual = hoy.month dia_actual = hoy.day # Calcular edad edad = ano_actual - ano # Verificar si ya cumplió años este año if mes_actual < mes: # Si el mes actual es antes del mes de cumpleaños edad -= 1 cumplio = False elif mes_actual == mes and dia_actual < dia: # Si es el mismo mes pero día anterior edad -= 1 cumplio = False else: # Ya cumplió años cumplio = True # Mostrar resultados print(f"\n✅ Fecha válida!") print(f"📅 Naciste el: {fecha}") print(f"🎂 Tienes: {edad} años") if cumplio: print("✅ Ya cumpliste años este año") else: print("⏳ Aún no cumples años este año")
Explicación simple:
Pedimos la fecha:
input()para obtener la fechaValidamos que no esté vacío: Verificamos si el usuario no escribió nada
Verificamos el formato: Debe tener 10 caracteres y dos guiones (-)
Separamos la fecha: Usamos
split('-')para obtener día, mes y añoConvertimos a números: De texto a números con
int()Validamos cada parte:
Año > 1900
Mes entre 1-12
Días según el mes (31, 30, o 28/29 para febrero)
Calculamos la edad: Año actual - año de nacimiento
Verificamos si cumplió: Comparamos mes y día actual con mes y día de cumpleaños
Mostramos el resultado
Ejemplo de uso:
=== CALCULADORA DE EDAD === Ingresa tu fecha de nacimiento en formato DD-MM-AAAA Fecha de nacimiento: 15-03-2000 ✅ Fecha válida! 📅 Naciste el: 15-03-2000 🎂 Tienes: 24 años ✅ Ya cumpliste años este año
Comentarios
Publicar un comentario