Código Python para Cálculo de Edad - Explicación Paso a Paso
Código Python para Cálculo de Edad - Explicación Paso a Paso
Te muestro el código completo y luego lo explico parte por parte:
from datetime import datetime def calcular_edad(): print("=== CALCULADORA DE EDAD PARA SEGUROS ===") # PASO 1: Capturar la fecha de nacimiento fecha_nacimiento = input("Ingrese fecha de nacimiento (DD-MM-AA): ") # PASO 2: Validar formato básico DD-MM-AA if len(fecha_nacimiento) != 8 or fecha_nacimiento[2] != '-' or fecha_nacimiento[5] != '-': print("❌ Error: El formato debe ser DD-MM-AA (8 caracteres con guiones)") return None try: # PASO 3: Separar en día, mes y año partes = fecha_nacimiento.split('-') dia = int(partes[0]) mes = int(partes[1]) año = int(partes[2]) # PASO 4: Convertir año de 2 dígitos a 4 dígitos if año >= 0 and año <= 99: año_completo = 2000 + año if año < 50 else 1900 + año else: año_completo = año # PASO 5: Validar año > 1900 if año_completo <= 1900: print("❌ Error: El año debe ser mayor a 1900") return None # PASO 6: Validar mes (1-12) if mes < 1 or mes > 12: print("❌ Error: El mes debe estar entre 01 y 12") return None # PASO 7: Validar días por mes dias_por_mes = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] # Ajustar febrero si es año bisiesto (pero 29 sigue inválido) if (año_completo % 4 == 0 and año_completo % 100 != 0) or (año_completo % 400 == 0): dias_por_mes[1] = 28 # Forzamos máximo 28 días # PASO 8: Validar día específico if dia < 1 or dia > dias_por_mes[mes-1]: print(f"❌ Error: El día {dia} no es válido para el mes {mes}") return None # PASO 9: Validar que no sea 29 de febrero if mes == 2 and dia == 29: print("❌ Error: El 29 de febrero no es válido para este cálculo") return None # PASO 10: Obtener fecha actual hoy = datetime.now() año_actual = hoy.year mes_actual = hoy.month dia_actual = hoy.day # PASO 11: Calcular edad base edad = año_actual - año_completo # PASO 12: Verificar si ya cumplió años este año if (mes_actual < mes) or (mes_actual == mes and dia_actual < dia): edad -= 1 # Restar 1 si no ha cumplido años todavía # PASO 13: Mostrar resultado print(f"✅ Fecha válida: {dia:02d}-{mes:02d}-{año_completo}") print(f"📅 Edad calculada: {edad} años") # Información adicional if (mes_actual == mes and dia_actual == dia): print("🎉 ¡Feliz cumpleaños! Hoy cumples años") elif (mes_actual < mes) or (mes_actual == mes and dia_actual < dia): print("📌 Aún no cumples años este año") else: print("✅ Ya cumpliste años este año") return edad except ValueError: print("❌ Error: Los valores deben ser números válidos") return None # Ejecutar el programa if __name__ == "__main__": calcular_edad()
🔍 EXPLICACIÓN PASO A PASO DEL CÓDIGO
PASO 1: Importación y Función Principal
from datetime import datetime def calcular_edad():
datetime: Librería para trabajar con fechasdef calcular_edad(): Definimos la función principal
PASO 2: Captura de Datos
fecha_nacimiento = input("Ingrese fecha de nacimiento (DD-MM-AA): ")
input(): Función que lee lo que el usuario escribeVariable: Guardamos la fecha en
fecha_nacimiento
PASO 3: Validación de Formato (Estructura)
if len(fecha_nacimiento) != 8 or fecha_nacimiento[2] != '-' or fecha_nacimiento[5] != '-':
len(fecha_nacimiento) != 8: Verifica que tenga exactamente 8 caracteresfecha_nacimiento[2] != '-': Verifica que el 3er carácter sea guiónfecha_nacimiento[5] != '-': Verifica que el 6to carácter sea guión
PASO 4: Separación y Conversión
partes = fecha_nacimiento.split('-') dia = int(partes[0]) mes = int(partes[1]) año = int(partes[2])
split('-'): Divide la cadena en partes usando el guión como separadorint(): Convierte texto a número (ej: "05" → 5)
PASO 5: Conversión de Año (2 → 4 dígitos)
if año >= 0 and año <= 99: año_completo = 2000 + año if año < 50 else 1900 + año
Lógica: Si el año es 50-99 → 1950-1999, si es 00-49 → 2000-2049
PASO 6-9: Validaciones Específicas
# Validar año > 1900 if año_completo <= 1900: # Validar mes (1-12) if mes < 1 or mes > 12: # Validar días por mes dias_por_mes = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] if dia < 1 or dia > dias_por_mes[mes-1]: # Validar 29 de febrero if mes == 2 and dia == 29:
Array
dias_por_mes: Contiene los días máximos por cada mesdias_por_mes[mes-1]: Accede al día máximo del mes correspondiente
PASO 10: Obtener Fecha Actual
hoy = datetime.now() año_actual = hoy.year mes_actual = hoy.month dia_actual = hoy.day
datetime.now(): Obtiene la fecha y hora actual del sistema
PASO 11-12: Cálculo de Edad
edad = año_actual - año_completo if (mes_actual < mes) or (mes_actual == mes and dia_actual < dia): edad -= 1
Cálculo base: Año actual - año nacimiento
Ajuste: Si no ha cumplido años este año, restar 1
PASO 13: Mostrar Resultados
print(f"✅ Fecha válida: {dia:02d}-{mes:02d}-{año_completo}") print(f"📅 Edad calculada: {edad} años")
f-string: Formato moderno para imprimir variables:02d: Formatea números para que siempre tengan 2 dígitos (05 en vez de 5)
🧪 EJEMPLOS DE USO
Ejemplo 1: Fecha Válida
Ingrese fecha de nacimiento (DD-MM-AA): 15-08-90 ✅ Fecha válida: 15-08-1990 📅 Edad calculada: 34 años ✅ Ya cumpliste años este año
Ejemplo 2: Fecha Inválida
Ingrese fecha de nacimiento (DD-MM-AA): 30-02-85 ❌ Error: El día 30 no es válido para el mes 2
Ejemplo 3: 29 de Febrero
Ingrese fecha de nacimiento (DD-MM-AA): 29-02-00 ❌ Error: El 29 de febrero no es válido para este cálculo
🛡️ MANEJO DE ERRORES
El código incluye try-except para capturar errores:
try: # Código que puede fallar except ValueError: print("❌ Error: Los valores deben ser números válidos")
Esto evita que el programa se cierre si el usuario ingresa letras en vez de números.
Comentarios
Publicar un comentario