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:

  1. Capturar fecha en formato DD-MM-AAAA

  2. Validar que sea una fecha válida

  3. Calcular la edad

  4. Verificar si ya cumplió años

  5. Validar campos vacíos

Solución paso a paso

python
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

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

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

  1. Empieza simple: Primero haz que funcione, luego mejóralo

  2. Prueba mucho: Prueba fechas inválidas, años bisiestos, etc.

  3. Divide el problema: Cada función hace una cosa específica

  4. 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:

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

  1. Pedimos la fechainput() para obtener la fecha

  2. Validamos que no esté vacío: Verificamos si el usuario no escribió nada

  3. Verificamos el formato: Debe tener 10 caracteres y dos guiones (-)

  4. Separamos la fecha: Usamos split('-') para obtener día, mes y año

  5. Convertimos a números: De texto a números con int()

  6. Validamos cada parte:

    • Año > 1900

    • Mes entre 1-12

    • Días según el mes (31, 30, o 28/29 para febrero)

  7. Calculamos la edad: Año actual - año de nacimiento

  8. Verificamos si cumplió: Comparamos mes y día actual con mes y día de cumpleaños

  9. Mostramos el resultado

Ejemplo de uso:

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

Entradas populares de este blog

¿Qué es un Closure?

Funciones en Python: con y sin paréntesis