#Fundamentos del Control de Flujo
x = 5
y = 3
resultado = x + y
print(resultado)
## 8
###Valores logicos
# Los dos valores lógicos fundamentales
verdadero = True
falso = False
# Verificar su clase
print(type(True)) # <class 'bool'>
## <class 'bool'>
# En Python no existen abreviaciones T y F
tambien_verdadero = True
tambien_falso = False
###Operadores de comparacion
# Operador de igualdad (==)
print(5 == 5) # True
## True
print(5 == 3) # False
## False
print("hola" == "hola") # True
## True
print("Hola" == "hola") # False (Python también distingue mayúsculas y minúsculas)
## False
# Operador de desigualdad (!=)
print(5 != 3) # True
## True
print(5 != 5) # False
## False
print("gato" != "perro") # True
## True
print(5 != 3) # True
## True
print(5 != 5) # False
## False
print("gato" != "perro") # True
## True
# Mayor que (>)
print(10 > 5) # True
## True
print(3 > 8) # False
## False
# Menor que (<)
print(2 < 7) # True
## True
print(9 < 4) # False
## False
# Mayor o igual que (>=)
print(5 >= 5) # True
## True
print(5 >= 3) # True
## True
print(2 >= 6) # False
## False
# Menor o igual que (<=)
print(4 <= 4) # True
## True
print(3 <= 7) # True
## True
print(8 <= 2) # False
## False
edad = 25
limite = 18
# Comparaciones con variables
print(edad > limite) # True
## True
print(edad == limite) # False
## False
print(edad >= limite) # True
## True
precio = 150.00
descuento_minimo = 100.00
print(precio >= descuento_minimo) # True
## True
Operadores logicos ###El Operador AND (&)
# Tabla de verdad del operador &
print(True & True) # True
## True
print(True & False) # False
## False
print(False & True) # False
## False
print(False & False) # False
## False
# Ejemplo práctico
edad = 25
tiene_licencia = True
# ¿Puede alquilar un auto? (debe ser mayor de 21 Y tener licencia)
puede_alquilar = (edad >= 21) & tiene_licencia
print(puede_alquilar) # True
## True
###El Operador OR (|)
# Tabla de verdad del operador |
print(True | True) # True
## True
print(True | False) # True
## True
print(False | True) # True
## True
print(False | False) # False
## False
# Ejemplo práctico
es_estudiante = False
es_senior = True
# ¿Tiene descuento? (si es estudiante O es senior)
tiene_descuento = es_estudiante | es_senior
print(tiene_descuento) # True
## True
###El Operador NOT (!)
# El operador NOT
print(not True) # False
## False
print(not False) # True
## True
# Ejemplo práctico
esta_lloviendo = False
salir_sin_paraguas = not esta_lloviendo
print(salir_sin_paraguas) # True
## True
###Combinaciones Complejas
# Multiples condiciones combinadas
temperatura = 22
esta_soleado = True
es_fin_de_semana = True
# ¿Es buen dia para un futbol?
buen_dia_futbol = (temperatura >= 20) & esta_soleado & es_fin_de_semana
print(buen_dia_futbol) # True
## True
# Usando parentesis para claridad
nota1 = 85
nota2 = 78
asistencia = 95
aprobado = ((nota1 >= 70) & (nota2 >= 70)) & (asistencia >= 80)
print(aprobado) # True
## True
Estructuras Condicionales ###Estructura General
# if condición:
# código a ejecutar si la condición es True
ejemplo
temperatura = 30
if temperatura > 25:
print("Hace calor hoy")
## Hace calor hoy
###Verificación de Edad
edad = 18
if edad >= 18:
print("Puedes votar en las elecciones")
print("También puedes obtener una licencia de conducir")
## Puedes votar en las elecciones
## También puedes obtener una licencia de conducir
###Control de Inventario
stock = 25
stock_minimo = 10
if stock < stock_minimo:
print("¡ALERTA! Stock bajo - necesita reabastecimiento")
urgente = True
# En este caso, como 25 >= 10, no se ejecuta el if
###Validación de Datos
salario = 50000
if salario > 0:
print("Salario válido registrado")
salario_mensual = salario / 12
print("Salario mensual:", round(salario_mensual, 2))
## Salario válido registrado
## Salario mensual: 4166.67
###Forma Compacta
# Con indentación (obligatorio en Python)
if temperatura > 30:
print("Día muy caluroso")
# En Python también puedes ponerlo en una sola línea:
if temperatura > 30: print("Día muy caluroso")
Nota importante: Siempre usar llaves cuando tengas múltiples instrucciones:
# Definir la variable
es_viernes = True
# CORRECTO en Python: múltiples instrucciones con indentación
if es_viernes:
print("¡Por fin viernes!")
preparar_fin_de_semana = True
revisar_agenda_lunes = True
## ¡Por fin viernes!
# En Python, la indentación controla qué se ejecuta dentro del if.
# Si escribes mal la indentación, el código se comportará distinto:
if es_viernes:
print("¡Por fin viernes!")
## ¡Por fin viernes!
preparar_fin_de_semana = True # Esta línea SIEMPRE se ejecuta
###Casos de Uso
nivel_bateria = 15
if nivel_bateria <= 20:
print("ADVERTENCIA: Batería baja")
if nivel_bateria <= 10:
print("CRÍTICO: Conectar cargador inmediatamente")
modo_ahorro_energia = True
## ADVERTENCIA: Batería baja
###Procesamiento Condicional de Datos
import numpy as np
datos_usuario = np.array([23, 45, 67, np.nan, 89, 12])
if np.isnan(datos_usuario).any():
print("Detectados valores faltantes en los datos")
# Contar valores faltantes
valores_na = np.isnan(datos_usuario).sum()
print("Número de valores NA:", valores_na)
# Crear versión limpia de los datos
datos_limpios = datos_usuario[~np.isnan(datos_usuario)]
print("Datos limpios:", ", ".join(map(str, datos_limpios.astype(int))))
## Detectados valores faltantes en los datos
## Número de valores NA: 1
## Datos limpios: 23, 45, 67, 89, 12
##Declaraciones else ###Estructura General
# if condición:
# código si la condición es True
# else:
# código si la condición es False
ejemplo
edad = 16
if edad >= 18:
print("Eres mayor de edad")
print("Puedes votar")
else:
print("Eres menor de edad")
print("Aún no puedes votar")
## Eres menor de edad
## Aún no puedes votar
###Método 1: Asignación Dentro de Cada Bloque
nota = 75
if nota >= 70:
resultado = "Aprobado"
mensaje = "¡Felicitaciones!"
else:
resultado = "Reprobado"
mensaje = "Necesitas estudiar más"
print(resultado) # "Aprobado"
## Aprobado
print(mensaje) # "¡Felicitaciones!"
## ¡Felicitaciones!
###Método 2: Asignación del Resultado Completo
# Operador ternario en Python
nota = 65
estado = "Aprobado" if nota >= 70 else "Reprobado"
print(estado) # "Reprobado"
## Reprobado
# Ejemplo más complejo
precio_base = 100
es_miembro = True
precio_final = precio_base * 0.9 if es_miembro else precio_base
print(precio_final) # 90
## 90.0
###Sistema de Calificación de Crédito
puntaje_credito = 650
if puntaje_credito >= 700:
categoria = "Excelente"
tasa_interes = 3.5
limite_credito = 50000
aprobacion_automatica = True
else:
categoria = "Regular"
tasa_interes = 8.5
limite_credito = 15000
aprobacion_automatica = False
print("Categoría:", categoria)
## Categoría: Regular
print("Tasa de interés:", f"{tasa_interes}%")
## Tasa de interés: 8.5%
print("Límite de crédito: $", limite_credito)
## Límite de crédito: $ 15000
print("Aprobación automática:", aprobacion_automatica)
## Aprobación automática: False
###Calculadora de Descuentos
monto_compra = 150
descuento_aplicado = 0
if monto_compra >= 100:
descuento_aplicado = monto_compra * 0.15 # 15% de descuento
tipo_descuento = "Compra Mayor"
puntos_ganados = monto_compra * 2 # Doble puntos
else:
descuento_aplicado = 0
tipo_descuento = "Sin descuento"
puntos_ganados = monto_compra # Puntos normales
monto_final = monto_compra - descuento_aplicado
print("Monto original: $", monto_compra)
## Monto original: $ 150
print("Descuento: $", round(descuento_aplicado, 2))
## Descuento: $ 22.5
print("Monto final: $", round(monto_final, 2))
## Monto final: $ 127.5
print("Tipo:", tipo_descuento)
## Tipo: Compra Mayor
print("Puntos ganados:", puntos_ganados)
## Puntos ganados: 300
###Sistema de Recomendación de Ropa
temperatura = 18
precipitacion = 0 # mm de lluvia
if temperatura >= 25:
ropa_recomendada = "Camiseta y pantalón corto"
accesorios = ["gorra", "lentes de sol"]
calzado = "sandalias o tenis ligeros"
else:
ropa_recomendada = "Suéter y pantalón largo"
accesorios = ["bufanda", "guantes"]
calzado = "zapatos cerrados"
# Verificar lluvia independientemente de la temperatura
if precipitacion > 0:
accesorios.extend(["paraguas", "impermeable"])
calzado = "botas impermeables"
print("Ropa recomendada:", ropa_recomendada)
## Ropa recomendada: Suéter y pantalón largo
print("Accesorios:", ", ".join(accesorios))
## Accesorios: bufanda, guantes
print("Calzado:", calzado)
## Calzado: zapatos cerrados
###Validación y Manejo de Errores
dividendo = 10
divisor = 3
if divisor != 0:
resultado = dividendo / divisor
print(f"El resultado de {dividendo} ÷ {divisor} es: {round(resultado, 2)}")
else:
print("Error: No se puede dividir por cero")
resultado = None # En Python se usa None en lugar de NA
## El resultado de 10 ÷ 3 es: 3.33
entrada_usuario = "123"
# En Python las cadenas siempre son str, así que probamos convertir
try:
numero_convertido = float(entrada_usuario)
print("Entrada válida: es un número")
numero_procesado = numero_convertido * 2
print(f"Resultado: {numero_procesado}")
except ValueError:
print("Entrada inválida: no es un número")
numero_procesado = 0
## Entrada válida: es un número
## Resultado: 246.0
from datetime import datetime
usuario_ingresado = "admin"
password_ingresado = "12345"
# Credenciales correctas (en un sistema real estarían encriptadas)
usuario_correcto = "admin"
password_correcto = "admin123"
if usuario_ingresado == usuario_correcto and password_ingresado == password_correcto:
print("Acceso concedido")
sesion_activa = True
tiempo_sesion = datetime.now()
permisos = ["leer", "escribir", "administrar"]
print(f"Bienvenido, {usuario_correcto}")
print(f"Hora de inicio de sesión: {tiempo_sesion}")
else:
print("Acceso denegado: credenciales incorrectas")
sesion_activa = False
intentos_fallidos = 1 # En un sistema real, incrementarías un contador
# Determinar qué falló
if usuario_ingresado != usuario_correcto:
print("Usuario incorrecto")
if password_ingresado != password_correcto:
print("Contraseña incorrecta")
## Acceso denegado: credenciales incorrectas
## Contraseña incorrecta
estructura generales
# if (primera_condición):
# # código para primera condición
# elif (segunda_condición):
# # código para segunda condición
# elif (tercera_condición):
# # código para tercera condición
# else:
# # código si ninguna condición anterior fue verdadera
ejemplo
nota = 85
if nota >= 90:
calificacion = "A"
comentario = "Excelente trabajo"
elif nota >= 80: # Solo se evalúa si nota < 90
calificacion = "B"
comentario = "Muy buen trabajo"
elif nota >= 70: # Solo se evalúa si nota < 80
calificacion = "C"
comentario = "Trabajo satisfactorio"
elif nota >= 60: # Solo se evalúa si nota < 70
calificacion = "D"
comentario = "Necesita mejorar"
else: # Solo se ejecuta si nota < 60
calificacion = "F"
comentario = "Debe repetir el curso"
print(f"Calificación: {calificacion}")
## Calificación: B
print(comentario)
## Muy buen trabajo
numero = 75
# CORRECTO: de mayor a menor
if numero >= 90:
categoria = "Muy alto"
elif numero >= 70: # 75 >= 70 es True, se ejecuta aquí
categoria = "Alto" # Resultado correcto
elif numero >= 50:
categoria = "Medio" # Ya no se evalúa
else:
categoria = "Bajo"
print(categoria) # "Alto"
## Alto
# INCORRECTO: de menor a mayor
if numero >= 50: # 75 >= 50 es True, se ejecuta aquí
categoria_mala = "Medio" # Resultado incorrecto
elif numero >= 70:
categoria_mala = "Alto" # Nunca se ejecuta
elif numero >= 90:
categoria_mala = "Muy alto" # Nunca se ejecuta
print(categoria_mala) # "Medio"
## Medio
peso = 70 # kg
altura = 1.75 # metros
imc = peso / (altura ** 2)
if imc < 18.5:
categoria = "Bajo peso"
recomendacion = "Consulte con un nutricionista para ganar peso saludablemente"
color_alerta = "azul"
elif imc < 25:
categoria = "Peso normal"
recomendacion = "Mantenga su estilo de vida saludable"
color_alerta = "verde"
elif imc < 30:
categoria = "Sobrepeso"
recomendacion = "Considere aumentar la actividad física y mejorar la dieta"
color_alerta = "amarillo"
elif imc < 35:
categoria = "Obesidad clase I"
recomendacion = "Consulte con un médico para un plan de pérdida de peso"
color_alerta = "naranja"
elif imc < 40:
categoria = "Obesidad clase II"
recomendacion = "Es importante consultar con un médico especialista"
color_alerta = "rojo"
else:
categoria = "Obesidad clase III (mórbida)"
recomendacion = "Consulte urgentemente con un médico especialista"
color_alerta = "rojo_intenso"
print(f"IMC: {round(imc, 2)}")
## IMC: 22.86
print(f"Categoría: {categoria}")
## Categoría: Peso normal
print(f"Recomendación: {recomendacion}")
## Recomendación: Mantenga su estilo de vida saludable
print(f"Nivel de alerta: {color_alerta}")
## Nivel de alerta: verde
consumo_kwh = 250 # kilowatts-hora consumidos
# Tarifas escalonadas (precios por kWh)
if consumo_kwh <= 100:
# Tarifa básica: primeros 100 kWh
tarifa = 0.12
costo = consumo_kwh * tarifa
tipo_usuario = "Básico"
elif consumo_kwh <= 200:
# Tarifa intermedia: de 101 a 200 kWh
costo_basico = 100 * 0.12
consumo_intermedio = consumo_kwh - 100
costo_intermedio = consumo_intermedio * 0.18
costo = costo_basico + costo_intermedio
tipo_usuario = "Intermedio"
elif consumo_kwh <= 300:
# Tarifa alta: de 201 a 300 kWh
costo_basico = 100 * 0.12
costo_intermedio = 100 * 0.18
consumo_alto = consumo_kwh - 200
costo_alto = consumo_alto * 0.25
costo = costo_basico + costo_intermedio + costo_alto
tipo_usuario = "Alto"
else:
# Tarifa muy alta: más de 300 kWh
costo_basico = 100 * 0.12
costo_intermedio = 100 * 0.18
costo_alto = 100 * 0.25
consumo_muy_alto = consumo_kwh - 300
costo_muy_alto = consumo_muy_alto * 0.32
costo = costo_basico + costo_intermedio + costo_alto + costo_muy_alto
tipo_usuario = "Muy Alto"
print(f"Consumo: {consumo_kwh} kWh")
## Consumo: 250 kWh
print(f"Tipo de usuario: {tipo_usuario}")
## Tipo de usuario: Alto
print(f"Costo total: ${round(costo, 2)}")
## Costo total: $42.5
print(f"Precio promedio por kWh: ${round(costo / consumo_kwh, 4)}")
## Precio promedio por kWh: $0.17
# Datos del estudiante
nota_examenes = 85
nota_tareas = 78
asistencia = 95
participacion = 88
proyecto_final = 92
# Cálculo de nota ponderada
nota_final = (
(nota_examenes * 0.4) +
(nota_tareas * 0.25) +
(asistencia * 0.1) +
(participacion * 0.1) +
(proyecto_final * 0.15)
)
# Determinar calificación letra, puntos, descripción y mención
if nota_final >= 95:
letra = "A+"
puntos = 4.0
descripcion = "Excelencia sobresaliente"
mencion = "Suma Cum Laude"
elif nota_final >= 90:
letra = "A"
puntos = 4.0
descripcion = "Excelente desempeño"
mencion = "Magna Cum Laude"
elif nota_final >= 87:
letra = "A-"
puntos = 3.7
descripcion = "Muy buen desempeño"
mencion = "Cum Laude"
elif nota_final >= 83:
letra = "B+"
puntos = 3.3
descripcion = "Buen desempeño superior"
mencion = "Sin mención especial"
elif nota_final >= 80:
letra = "B"
puntos = 3.0
descripcion = "Buen desempeño"
mencion = "Sin mención especial"
elif nota_final >= 77:
letra = "B-"
puntos = 2.7
descripcion = "Desempeño satisfactorio superior"
mencion = "Sin mención especial"
elif nota_final >= 73:
letra = "C+"
puntos = 2.3
descripcion = "Desempeño satisfactorio"
mencion = "Sin mención especial"
elif nota_final >= 70:
letra = "C"
puntos = 2.0
descripcion = "Desempeño mínimo aceptable"
mencion = "Sin mención especial"
elif nota_final >= 65:
letra = "D"
puntos = 1.0
descripcion = "Desempeño deficiente"
mencion = "Requiere recuperación"
else:
letra = "F"
puntos = 0.0
descripcion = "Desempeño insuficiente"
mencion = "Debe repetir el curso"
# Modificadores por asistencia
if asistencia < 75:
mencion += " - BAJA ASISTENCIA"
if puntos > 0:
puntos -= 0.5 # Penalización
# Reporte académico
print("=== REPORTE ACADÉMICO ===")
## === REPORTE ACADÉMICO ===
print(f"Nota final: {round(nota_final, 2)}")
## Nota final: 85.6
print(f"Calificación: {letra}")
## Calificación: B+
print(f"Puntos GPA: {puntos}")
## Puntos GPA: 3.3
print(f"Descripción: {descripcion}")
## Descripción: Buen desempeño superior
print(f"Mención: {mencion}")
## Mención: Sin mención especial
print("========================")
## ========================
#Sistema de Clasificación Meteorológica
temperatura = 22
humedad = 65
velocidad_viento = 15 # km/h
precipitacion = 2 # mm
# Clasificación principal por temperatura
if temperatura < -10:
clima_base = "Extremadamente frío"
actividades = "Permanecer en interiores"
elif temperatura < 0:
clima_base = "Muy frío"
actividades = "Deportes de invierno, ropa térmica"
elif temperatura < 10:
clima_base = "Frío"
actividades = "Caminatas con abrigo, actividades interiores"
elif temperatura < 20:
clima_base = "Fresco"
actividades = "Senderismo, actividades al aire libre con chaqueta"
elif temperatura < 25:
clima_base = "Templado"
actividades = "Ideal para todas las actividades al aire libre"
elif temperatura < 30:
clima_base = "Cálido"
actividades = "Playa, piscina, deportes acuáticos"
elif temperatura < 35:
clima_base = "Caluroso"
actividades = "Actividades acuáticas, evitar ejercicio intenso"
else:
clima_base = "Extremadamente caluroso"
actividades = "Permanecer en interiores con aire acondicionado"
print(f"Clima base: {clima_base}")
## Clima base: Templado
print(f"Actividades recomendadas: {actividades}")
## Actividades recomendadas: Ideal para todas las actividades al aire libre
import pandas as pd
import numpy as np
# Vector de números
numeros = np.array([-3, -1, 0, 2, 5, -7, 8])
# Aplicar condición a todo el vector
signos = np.where(numeros >= 0, "No negativo", "Negativo")
# Crear DataFrame
resultado = pd.DataFrame({
"numero": numeros,
"signo": signos
})
print(resultado)
## numero signo
## 0 -3 Negativo
## 1 -1 Negativo
## 2 0 No negativo
## 3 2 No negativo
## 4 5 No negativo
## 5 -7 Negativo
## 6 8 No negativo
# Lista de números
numeros = [-3, -1, 0, 2, 5, -7, 8]
# Método tradicional con bucle
signos_bucle = []
for num in numeros:
if num >= 0:
signos_bucle.append("No negativo")
else:
signos_bucle.append("Negativo")
# Mostrar resultados
print(signos_bucle)
## ['Negativo', 'Negativo', 'No negativo', 'No negativo', 'No negativo', 'Negativo', 'No negativo']
# Comparación con otra lista de signos (si ya tienes la lista signos)
# Por ejemplo, si signos = ["Negativo", "Negativo", "No negativo", ...]
# print(signos_bucle == signos) # True si son iguales
###Usando ifelse (Método Eficiente)
# Lista de números
numeros = [-3, -1, 0, 2, 5, -7, 8]
# Método "vectorizado" con comprensión de listas
signos_ifelse = ["No negativo" if num >= 0 else "Negativo" for num in numeros]
# Mostrar resultados
print(signos_ifelse)
## ['Negativo', 'Negativo', 'No negativo', 'No negativo', 'No negativo', 'Negativo', 'No negativo']
# Comparación con el método con bucle
signos_bucle = []
for num in numeros:
if num >= 0:
signos_bucle.append("No negativo")
else:
signos_bucle.append("Negativo")
print(signos_bucle == signos_ifelse) # True si son iguales
## True
###Clasificación de Estudiantes
import pandas as pd
# Datos de estudiantes
estudiantes = ["Ana", "Pedro", "Luis", "María", "Carlos", "Sofia", "Diego", "Laura"]
notas = [95, 67, 82, 88, 45, 91, 73, 79]
# Clasificación simple: Aprobado/Reprobado usando comprensión de listas
estado = ["Aprobado" if nota >= 70 else "Reprobado" for nota in notas]
# Crear DataFrame con resultados
reporte_estudiantes = pd.DataFrame({
"nombre": estudiantes,
"nota": notas,
"estado": estado
})
print(reporte_estudiantes)
## nombre nota estado
## 0 Ana 95 Aprobado
## 1 Pedro 67 Reprobado
## 2 Luis 82 Aprobado
## 3 María 88 Aprobado
## 4 Carlos 45 Reprobado
## 5 Sofia 91 Aprobado
## 6 Diego 73 Aprobado
## 7 Laura 79 Aprobado
# Datos de estudiantes
estudiantes = ["Ana", "Pedro", "Luis", "María", "Carlos", "Sofia", "Diego", "Laura"]
notas = [95, 67, 82, 88, 45, 91, 73, 79]
# Clasificación simple
estado = ["Aprobado" if nota >= 70 else "Reprobado" for nota in notas]
# Información adicional
necesita_recuperacion = ["Sí" if nota < 70 else "No" for nota in notas]
excelencia = ["Excelente" if nota >= 90 else "Regular" for nota in notas]
# Crear lista de diccionarios (similar a un DataFrame)
reporte_estudiantes = []
for i in range(len(estudiantes)):
reporte_estudiantes.append({
"nombre": estudiantes[i],
"nota": notas[i],
"estado": estado[i],
"necesita_recuperacion": necesita_recuperacion[i],
"excelencia": excelencia[i]
})
# Mostrar resultados
for alumno in reporte_estudiantes:
print(alumno)
## {'nombre': 'Ana', 'nota': 95, 'estado': 'Aprobado', 'necesita_recuperacion': 'No', 'excelencia': 'Excelente'}
## {'nombre': 'Pedro', 'nota': 67, 'estado': 'Reprobado', 'necesita_recuperacion': 'Sí', 'excelencia': 'Regular'}
## {'nombre': 'Luis', 'nota': 82, 'estado': 'Aprobado', 'necesita_recuperacion': 'No', 'excelencia': 'Regular'}
## {'nombre': 'María', 'nota': 88, 'estado': 'Aprobado', 'necesita_recuperacion': 'No', 'excelencia': 'Regular'}
## {'nombre': 'Carlos', 'nota': 45, 'estado': 'Reprobado', 'necesita_recuperacion': 'Sí', 'excelencia': 'Regular'}
## {'nombre': 'Sofia', 'nota': 91, 'estado': 'Aprobado', 'necesita_recuperacion': 'No', 'excelencia': 'Excelente'}
## {'nombre': 'Diego', 'nota': 73, 'estado': 'Aprobado', 'necesita_recuperacion': 'No', 'excelencia': 'Regular'}
## {'nombre': 'Laura', 'nota': 79, 'estado': 'Aprobado', 'necesita_recuperacion': 'No', 'excelencia': 'Regular'}
###ifelse Anidado para Múltiples Categorías Puedes anidar múltiples ifelse para crear clasificaciones más complejas:
import pandas as pd
# Datos de ejemplo
edades = [5, 12, 15, 18, 25, 35, 45, 55, 65, 75, 85]
# Clasificación de edades usando comprensión de listas anidada
categorias = [
"Niño" if edad < 13 else
"Adolescente" if edad < 18 else
"Joven adulto" if edad < 25 else
"Adulto" if edad < 65 else
"Adulto mayor"
for edad in edades
]
# Crear DataFrame
clasificacion_edades = pd.DataFrame({
"edad": edades,
"categoria": categorias
})
print(clasificacion_edades)
## edad categoria
## 0 5 Niño
## 1 12 Niño
## 2 15 Adolescente
## 3 18 Joven adulto
## 4 25 Adulto
## 5 35 Adulto
## 6 45 Adulto
## 7 55 Adulto
## 8 65 Adulto mayor
## 9 75 Adulto mayor
## 10 85 Adulto mayor
import pandas as pd
# Datos de ejemplo
edades = [5, 12, 15, 18, 25, 35, 45, 55, 65, 75, 85]
# Clasificación de edades
categorias = [
"Niño" if edad < 13 else
"Adolescente" if edad < 18 else
"Joven adulto" if edad < 25 else
"Adulto" if edad < 65 else
"Adulto mayor"
for edad in edades
]
# Recomendaciones específicas
recomendaciones = [
"Educación primaria y juegos" if edad < 13 else
"Educación secundaria" if edad < 18 else
"Educación superior o trabajo" if edad < 25 else
"Vida laboral activa" if edad < 65 else
"Jubilación y cuidados"
for edad in edades
]
# Crear DataFrame
clasificacion_edades = pd.DataFrame({
"edad": edades,
"categoria": categorias,
"recomendacion": recomendaciones
})
print(clasificacion_edades)
## edad categoria recomendacion
## 0 5 Niño Educación primaria y juegos
## 1 12 Niño Educación primaria y juegos
## 2 15 Adolescente Educación secundaria
## 3 18 Joven adulto Educación superior o trabajo
## 4 25 Adulto Vida laboral activa
## 5 35 Adulto Vida laboral activa
## 6 45 Adulto Vida laboral activa
## 7 55 Adulto Vida laboral activa
## 8 65 Adulto mayor Jubilación y cuidados
## 9 75 Adulto mayor Jubilación y cuidados
## 10 85 Adulto mayor Jubilación y cuidados
import pandas as pd
# Datos de calificaciones
materias = ["Matemáticas", "Ciencias", "Historia", "Literatura", "Arte", "Deportes"]
puntuaciones = [95, 78, 85, 92, 68, 88]
# Sistema de calificación con letras
calificaciones_letra = [
"A+" if p >= 95 else
"A" if p >= 90 else
"B+" if p >= 85 else
"B" if p >= 80 else
"C+" if p >= 75 else
"C" if p >= 70 else
"F"
for p in puntuaciones
]
# Determinar estado
estado_materia = ["Aprobada" if p >= 70 else "Reprobada" for p in puntuaciones]
# Calcular puntos GPA
puntos_gpa = [
4.0 if p >= 95 else
4.0 if p >= 90 else
3.5 if p >= 85 else
3.0 if p >= 80 else
2.5 if p >= 75 else
2.0 if p >= 70 else
0.0
for p in puntuaciones
]
# Crear DataFrame
reporte_academico = pd.DataFrame({
"materia": materias,
"puntuacion": puntuaciones,
"letra": calificaciones_letra,
"estado": estado_materia,
"gpa": puntos_gpa
})
print(reporte_academico)
## materia puntuacion letra estado gpa
## 0 Matemáticas 95 A+ Aprobada 4.0
## 1 Ciencias 78 C+ Aprobada 2.5
## 2 Historia 85 B+ Aprobada 3.5
## 3 Literatura 92 A Aprobada 4.0
## 4 Arte 68 F Reprobada 0.0
## 5 Deportes 88 B+ Aprobada 3.5
import pandas as pd
# --- Bloque 1: Estadísticas generales de calificaciones ---
puntuaciones = [95, 78, 85, 92, 68, 88]
puntos_gpa = [4.0, 2.5, 3.5, 4.0, 0.0, 3.5] # mismo que calculado antes
promedio_general = sum(puntuaciones) / len(puntuaciones)
gpa_general = sum(puntos_gpa) / len(puntos_gpa)
materias_aprobadas = sum(1 for p in puntuaciones if p >= 70)
materias_reprobadas = sum(1 for p in puntuaciones if p < 70)
print(f"Promedio general: {promedio_general:.2f}")
## Promedio general: 84.33
print(f"GPA general: {gpa_general:.2f}")
## GPA general: 2.92
print(f"Materias aprobadas: {materias_aprobadas}")
## Materias aprobadas: 5
print(f"Materias reprobadas: {materias_reprobadas}")
## Materias reprobadas: 1
# --- Bloque 2: Reporte de ventas mensuales ---
meses = ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio",
"Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"]
ventas = [45000, 52000, 48000, 55000, 62000, 58000,
71000, 68000, 59000, 63000, 75000, 82000]
meta_mensual = 60000
# Evaluación de rendimiento
rendimiento = [
"Excepcional" if v >= meta_mensual * 1.2 else
"Cumplió meta" if v >= meta_mensual else
"Cerca de meta" if v >= meta_mensual * 0.8 else
"Bajo rendimiento"
for v in ventas
]
# Bonificación
bonificacion = [
v * 0.05 if v >= meta_mensual * 1.2 else
v * 0.03 if v >= meta_mensual else
0
for v in ventas
]
# Trimestres
trimestre = [
"Q1" if m in ["Enero", "Febrero", "Marzo"] else
"Q2" if m in ["Abril", "Mayo", "Junio"] else
"Q3" if m in ["Julio", "Agosto", "Septiembre"] else
"Q4"
for m in meses
]
# Crear DataFrame
reporte_ventas = pd.DataFrame({
"mes": meses,
"trimestre": trimestre,
"ventas": ventas,
"meta": [meta_mensual]*12,
"rendimiento": rendimiento,
"bonificacion": bonificacion
})
print(reporte_ventas)
## mes trimestre ventas meta rendimiento bonificacion
## 0 Enero Q1 45000 60000 Bajo rendimiento 0.0
## 1 Febrero Q1 52000 60000 Cerca de meta 0.0
## 2 Marzo Q1 48000 60000 Cerca de meta 0.0
## 3 Abril Q2 55000 60000 Cerca de meta 0.0
## 4 Mayo Q2 62000 60000 Cumplió meta 1860.0
## 5 Junio Q2 58000 60000 Cerca de meta 0.0
## 6 Julio Q3 71000 60000 Cumplió meta 2130.0
## 7 Agosto Q3 68000 60000 Cumplió meta 2040.0
## 8 Septiembre Q3 59000 60000 Cerca de meta 0.0
## 9 Octubre Q4 63000 60000 Cumplió meta 1890.0
## 10 Noviembre Q4 75000 60000 Excepcional 3750.0
## 11 Diciembre Q4 82000 60000 Excepcional 4100.0
import pandas as pd
# Datos
meses = ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio",
"Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"]
ventas = [45000, 52000, 48000, 55000, 62000, 58000,
71000, 68000, 59000, 63000, 75000, 82000]
# Crear DataFrame
reporte_ventas = pd.DataFrame({
"mes": meses,
"ventas": ventas
})
# Asignar trimestre
def asignar_trimestre(mes):
if mes in ["Enero", "Febrero", "Marzo"]:
return "Q1"
elif mes in ["Abril", "Mayo", "Junio"]:
return "Q2"
elif mes in ["Julio", "Agosto", "Septiembre"]:
return "Q3"
else:
return "Q4"
reporte_ventas["trimestre"] = reporte_ventas["mes"].apply(asignar_trimestre)
# Sumar ventas por trimestre
ventas_q1 = reporte_ventas.loc[reporte_ventas["trimestre"] == "Q1", "ventas"].sum()
ventas_q2 = reporte_ventas.loc[reporte_ventas["trimestre"] == "Q2", "ventas"].sum()
ventas_q3 = reporte_ventas.loc[reporte_ventas["trimestre"] == "Q3", "ventas"].sum()
ventas_q4 = reporte_ventas.loc[reporte_ventas["trimestre"] == "Q4", "ventas"].sum()
print(f"Ventas Q1: {ventas_q1}")
## Ventas Q1: 145000
print(f"Ventas Q2: {ventas_q2}")
## Ventas Q2: 175000
print(f"Ventas Q3: {ventas_q3}")
## Ventas Q3: 198000
print(f"Ventas Q4: {ventas_q4}")
## Ventas Q4: 220000
import pandas as pd
import numpy as np
# Datos con valores faltantes
temperaturas = [22, 25, np.nan, 18, 30, np.nan, 15, 28, 24, np.nan]
ciudades = ["Madrid", "Barcelona", "Valencia", "Sevilla", "Bilbao",
"Málaga", "Zaragoza", "Murcia", "Palma", "Córdoba"]
# Crear DataFrame
reporte_clima = pd.DataFrame({
"ciudad": ciudades,
"temperatura": temperaturas
})
# Clasificación de temperatura
def clasificar_temp(temp):
if pd.isna(temp):
return "Sin datos"
elif temp >= 25:
return "Caluroso"
elif temp >= 20:
return "Templado"
else:
return "Frío"
# Recomendación de ropa
def ropa_para_temp(temp):
if pd.isna(temp):
return "Consultar pronóstico"
elif temp >= 25:
return "Ropa ligera"
elif temp >= 20:
return "Ropa normal"
else:
return "Abrigo"
reporte_clima["clasificacion"] = reporte_clima["temperatura"].apply(clasificar_temp)
reporte_clima["ropa"] = reporte_clima["temperatura"].apply(ropa_para_temp)
print(reporte_clima)
## ciudad temperatura clasificacion ropa
## 0 Madrid 22.0 Templado Ropa normal
## 1 Barcelona 25.0 Caluroso Ropa ligera
## 2 Valencia NaN Sin datos Consultar pronóstico
## 3 Sevilla 18.0 Frío Abrigo
## 4 Bilbao 30.0 Caluroso Ropa ligera
## 5 Málaga NaN Sin datos Consultar pronóstico
## 6 Zaragoza 15.0 Frío Abrigo
## 7 Murcia 28.0 Caluroso Ropa ligera
## 8 Palma 24.0 Templado Ropa normal
## 9 Córdoba NaN Sin datos Consultar pronóstico
import pandas as pd
import numpy as np
# Datos con valores faltantes
temperaturas = [22, 25, np.nan, 18, 30, np.nan, 15, 28, 24, np.nan]
# Filtrar temperaturas válidas
temp_validas = [t for t in temperaturas if not np.isnan(t)]
# Cálculos estadísticos
promedio_temp = round(np.mean(temp_validas), 1)
ciudades_con_datos = len(temp_validas)
ciudades_sin_datos = len(temperaturas) - ciudades_con_datos
print(f"Temperatura promedio: {promedio_temp} °C")
## Temperatura promedio: 23.1 °C
print(f"Ciudades con datos: {ciudades_con_datos}")
## Ciudades con datos: 7
print(f"Ciudades sin datos: {ciudades_sin_datos}")
## Ciudades sin datos: 3
# Con nombres (más común)
# resultado = {
# "opcion1": valor1,
# "opcion2": valor2,
# "opcion3": valor3
# }.get(expresion, valor_por_defecto)
# Con posiciones numéricas (lista)
# opciones = [valor1, valor2, valor3]
# resultado = opciones[numero-1] if 1 <= numero <= len(opciones) else valor_por_defecto
Ejemplo
# Función para determinar si un año es bisiesto
def es_bisiesto(anio):
return anio % 4 == 0 and (anio % 100 != 0 or anio % 400 == 0)
# Datos
mes = "febrero"
anio = 2024
# Diccionario con número de días por mes (febrero se maneja aparte)
dias_por_mes = {
"enero": 31,
"febrero": 29 if es_bisiesto(anio) else 28,
"marzo": 31,
"abril": 30,
"mayo": 31,
"junio": 30,
"julio": 31,
"agosto": 31,
"septiembre": 30,
"octubre": 31,
"noviembre": 30,
"diciembre": 31
}
# Obtener días (None si el mes no es válido)
dias_en_mes = dias_por_mes.get(mes, None)
if dias_en_mes is not None:
print(f"{mes.capitalize()} de {anio} tiene {dias_en_mes} días")
else:
print("Mes no válido")
## Febrero de 2024 tiene 29 días
def obtener_info_dia(dia):
dia = dia.lower() # Hacer case-insensitive
info_dias = {
"lunes": {
"nombre": "Lunes",
"tipo": "Laboral",
"actividad": "Comenzar la semana con energía",
"estado_animo": "Motivado",
"color": "Azul"
},
"martes": {
"nombre": "Martes",
"tipo": "Laboral",
"actividad": "Continuar con el ritmo de trabajo",
"estado_animo": "Concentrado",
"color": "Verde"
},
"miercoles": {
"nombre": "Miércoles",
"tipo": "Laboral",
"actividad": "Punto medio de la semana",
"estado_animo": "Equilibrado",
"color": "Amarillo"
},
"jueves": {
"nombre": "Jueves",
"tipo": "Laboral",
"actividad": "Prepararse para el final de semana",
"estado_animo": "Expectante",
"color": "Naranja"
},
"viernes": {
"nombre": "Viernes",
"tipo": "Laboral",
"actividad": "Finalizar tareas y planificar el fin de semana",
"estado_animo": "Alegre",
"color": "Rosa"
},
"sabado": {
"nombre": "Sábado",
"tipo": "Fin de semana",
"actividad": "Relajarse y disfrutar tiempo libre",
"estado_animo": "Relajado",
"color": "Púrpura"
},
"domingo": {
"nombre": "Domingo",
"tipo": "Fin de semana",
"actividad": "Descansar y prepararse para la nueva semana",
"estado_animo": "Tranquilo",
"color": "Rojo"
}
}
# Valor por defecto si el día no es válido
return info_dias.get(dia, {
"nombre": "Desconocido",
"tipo": "Inválido",
"actividad": "Verificar el día ingresado",
"estado_animo": "Confundido",
"color": "Gris"
})
# Ejemplo de uso
dia_actual = "viernes"
info_dia = obtener_info_dia(dia_actual)
print(f"Día: {info_dia['nombre']}")
## Día: Viernes
print(f"Tipo: {info_dia['tipo']}")
## Tipo: Laboral
print(f"Actividad: {info_dia['actividad']}")
## Actividad: Finalizar tareas y planificar el fin de semana
print(f"Estado de ánimo: {info_dia['estado_animo']}")
## Estado de ánimo: Alegre
print(f"Color asociado: {info_dia['color']}")
## Color asociado: Rosa
###Calculadora con switch
def calculadora(operacion, a, b):
# Validar que los números sean válidos
if not isinstance(a, (int, float)) or not isinstance(b, (int, float)):
return {"resultado": None, "error": "Los operandos deben ser numéricos"}
# Definir las operaciones
operaciones = {
"suma": lambda x, y: x + y,
"+": lambda x, y: x + y,
"resta": lambda x, y: x - y,
"-": lambda x, y: x - y,
"multiplicacion": lambda x, y: x * y,
"*": lambda x, y: x * y,
"division": lambda x, y: "DIV0" if y == 0 else x / y,
"/": lambda x, y: "DIV0" if y == 0 else x / y,
"potencia": lambda x, y: x ** y,
"^": lambda x, y: x ** y,
"modulo": lambda x, y: x % y,
"%": lambda x, y: x % y
}
func = operaciones.get(operacion)
if func is None:
return {"resultado": None, "error": "Operación no reconocida"}
resultado = func(a, b)
if resultado == "DIV0":
return {"resultado": None, "error": "División por cero"}
return {"resultado": resultado, "error": None}
# Ejemplos de uso
print(calculadora("suma", 10, 5))
## {'resultado': 15, 'error': None}
print(calculadora("+", 10, 5))
## {'resultado': 15, 'error': None}
print(calculadora("division", 10, 0))
## {'resultado': None, 'error': 'División por cero'}
print(calculadora("/", 15, 3))
## {'resultado': 5.0, 'error': None}
print(calculadora("potencia", 2, 8))
## {'resultado': 256, 'error': None}
print(calculadora("xyz", 5, 3)) # Operación inválida
## {'resultado': None, 'error': 'Operación no reconocida'}
###Sistema de Conversión de Unidades
def convertir_unidad(valor, de_unidad, a_unidad):
# Normalizar unidades a minúsculas
de = de_unidad.lower()
a = a_unidad.lower()
# Factores de conversión a metros (unidad base)
factor_a_metros = {
"mm": 0.001,
"cm": 0.01,
"m": 1,
"km": 1000,
"in": 0.0254,
"ft": 0.3048,
"yd": 0.9144,
"mi": 1609.344
}.get(de, None)
factor_de_metros = {
"mm": 1000,
"cm": 100,
"m": 1,
"km": 0.001,
"in": 39.3701,
"ft": 3.28084,
"yd": 1.09361,
"mi": 0.000621371
}.get(a, None)
if factor_a_metros is None or factor_de_metros is None:
return {
"resultado": None,
"error": "Unidad no reconocida",
"unidades_validas": ["mm", "cm", "m", "km", "in", "ft", "yd", "mi"]
}
# Realizar conversión
metros = valor * factor_a_metros
resultado_final = metros * factor_de_metros
return {
"valor_original": valor,
"unidad_original": de_unidad,
"valor_convertido": resultado_final,
"unidad_final": a_unidad,
"formula": f"{valor} {de_unidad} = {round(resultado_final, 6)} {a_unidad}"
}
# Ejemplos de conversión
print(convertir_unidad(100, "cm", "m"))
## {'valor_original': 100, 'unidad_original': 'cm', 'valor_convertido': 1.0, 'unidad_final': 'm', 'formula': '100 cm = 1.0 m'}
print(convertir_unidad(5, "ft", "m"))
## {'valor_original': 5, 'unidad_original': 'ft', 'valor_convertido': 1.524, 'unidad_final': 'm', 'formula': '5 ft = 1.524 m'}
print(convertir_unidad(1, "xyz", "m")) # Unidad inválida
## {'resultado': None, 'error': 'Unidad no reconocida', 'unidades_validas': ['mm', 'cm', 'm', 'km', 'in', 'ft', 'yd', 'mi']}