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:

python
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

python
from datetime import datetime

def calcular_edad():
  • datetime: Librería para trabajar con fechas

  • def calcular_edad(): Definimos la función principal

PASO 2: Captura de Datos

python
fecha_nacimiento = input("Ingrese fecha de nacimiento (DD-MM-AA): ")
  • input(): Función que lee lo que el usuario escribe

  • Variable: Guardamos la fecha en fecha_nacimiento

PASO 3: Validación de Formato (Estructura)

python
if len(fecha_nacimiento) != 8 or fecha_nacimiento[2] != '-' or fecha_nacimiento[5] != '-':
  • len(fecha_nacimiento) != 8: Verifica que tenga exactamente 8 caracteres

  • fecha_nacimiento[2] != '-': Verifica que el 3er carácter sea guión

  • fecha_nacimiento[5] != '-': Verifica que el 6to carácter sea guión

PASO 4: Separación y Conversión

python
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 separador

  • int(): Convierte texto a número (ej: "05" → 5)

PASO 5: Conversión de Año (2 → 4 dígitos)

python
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

python
# 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 mes

  • dias_por_mes[mes-1]: Accede al día máximo del mes correspondiente

PASO 10: Obtener Fecha Actual

python
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

python
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

python
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

text
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

text
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

text
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:

python
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

Entradas más populares de este blog

1-valores duplicados en un arreglo

Pseudocódigo de la Máquina Expendedora

Trabajas en una compañía que ofrece seguros de vida y de gastos