EJECUCION SECUENCIAL en R

x = 5
y = 3
resultado = x + y
print(resultado)
## [1] 8

EJECUCION SECUENCIAL en Python

x= 8 
y= 5
resultado = x+y
print(resultado)
## 13

ESTRUCTURAS DE CONTROL DE FLUJO:

VALORES LOGICOS en R

# Los dos valores lógicos fundamentales
verdadero <- TRUE
falso <- FALSE
# Verificar su clase
class(TRUE) # "logical"
## [1] "logical"
class(FALSE) # "logical"
## [1] "logical"
# También puedes usar las abreviaciones T y F (aunque no se recomienda)
tambien_verdadero <- T
tambien_falso <- F

VALORES LOGICOS en Python o llamados tambien BOOLEANOS

verdadero = True
falso = False

print(type(verdadero))  # <class 'bool'>
## <class 'bool'>
print(type(falso))      # <class 'bool'>
## <class 'bool'>

OPERACIONES DE COMPARACIÓN en R

#Operador e igualdad (==)
5==5
## [1] TRUE
5==3 
## [1] FALSE
"Omar"="Cristhian" # FALSE (R distingue mayúsculas y minúsculas)

#Operador de desigualdad (!=)
20!=25
## [1] TRUE
"Omar"!="Cristhian"
## [1] TRUE
#Mayor que (>) y menor que (<)
3>2
## [1] TRUE
24<22
## [1] FALSE
#Mayor igual (>=) o menor igual (<=)
24>=24
## [1] TRUE
4<=88
## [1] TRUE
#Comparando variables
edad= 25
limite= 24
edad>=limite
## [1] TRUE

OPERADORES DE COMPARACIÓN en Python

# Operador de igualdad (==)
print(5 == 5)        # True
## True
print(5 == 3)        # False
## False
print("Omar" == "Cristhian")  # False (Python distingue mayúsculas y minúsculas)
## False
print("Omar" == "omar")       # False (diferente por la mayúscula)
## False
# Operador de desigualdad (!=)
print(20 != 25)              # True
## True
print("Omar" != "Cristhian") # True
## True
# Mayor que (>) y menor que (<)
print(3 > 2)    # True
## True
print(24 < 22)  # False
## False
# Mayor igual (>=) o menor igual (<=)
print(24 >= 24)  # True
## True
print(4 <= 88)   # True
## True
# Comparando variables
edad = 25
limite = 24
resultado = edad >= limite
print(resultado)  # True
## True
# Ejemplos adicionales
nombre1 = "Omar"
nombre2 = "Cristhian"
print(nombre1 == nombre2)  # False
## False
# Comparación de diferentes tipos
print(5 == "5")  # False (diferentes tipos: int vs str)
## False
print(5.0 == 5)  # True (Python convierte el int a float para comparar)
## True
# Operadores lógicos combinados
a = 10
b = 20
c = 30
print(a < b and b < c)  # True (10 < 20 y 20 < 30)
## True
print(a > b or b < c)   # True (False o True = True)
## True

OPERADORES LOGICOS EN R

#EL OPERADOR AND (&) 
omar=TRUE
edad=24
viejo <- edad>=24 & omar
viejo
## [1] TRUE
#EL OPERADOR OR (|)
tercera_edad=TRUE
dias_vigente=21
apto_renovar= dias_vigente<=21 | tercera_edad
apto_renovar
## [1] TRUE
#EL OPERADOR NOT (!)
#Para invertir el valor logico
esta_lloviendo <- FALSE
salir_sin_paraguas <- !esta_lloviendo
salir_sin_paraguas
## [1] TRUE
#OPERACIONES COMPLEJAS

# Múltiples condiciones combinadas
temperatura <- 22
esta_soleado <- TRUE
es_fin_de_semana <- TRUE

# ¿Es buen día para un futbol?
buen_dia_futbol <- (temperatura >= 20) & esta_soleado & es_fin_de_semana
buen_dia_futbol # TRUE
## [1] TRUE
# Usando paréntesis para claridad
nota1 <- 85
nota2 <- 78
asistencia <- 95
aprobado <- ((nota1 >= 70) & (nota2 >= 70)) & (asistencia >= 80)
aprobado # TRUE
## [1] TRUE

OPERADORES LOGICOS EN PYTHON

# EL OPERADOR AND (&)
omar = True
edad = 24
viejo = edad >= 24 and omar
print(viejo)  # True
## True
# EL OPERADOR OR (|)
tercera_edad = True
dias_vigente = 21
apto_renovar = dias_vigente <= 21 or tercera_edad
print(apto_renovar)  # True
## True
# EL OPERADOR NOT (!)
# Para invertir el valor lógico
esta_lloviendo = False
salir_sin_paraguas = not esta_lloviendo
print(salir_sin_paraguas)  # True
## True
# OPERACIONES COMPLEJAS

# Múltiples condiciones combinadas
temperatura = 22
esta_soleado = True
es_fin_de_semana = True

#Es buen día para un futbol
buen_dia_futbol = (temperatura >= 20) and esta_soleado and es_fin_de_semana
print(buen_dia_futbol)  # True
## True
#Usando paréntesis para claridad
nota1 = 85
nota2 = 78
asistencia = 95
aprobado = ((nota1 >= 70) and (nota2 >= 70)) and (asistencia >= 80)
print(aprobado)  # True
## True

ESTRUCTURAS CONDICIONALES (Para que el programa tome decisiones)

Declaracion IF / IF ELSE / IF ELSE - IF ELSE

Estructura general en R

# Sintaxis básica
#if (condicion) { 
  # código a ejecutar si la condición es TRUE
#}

# IF-ELSE
#if (condicion) {
  # código si condición es TRUE
#} else {
  # código si condición es FALSE
#}

# IF-ELSE IF-ELSE
#if (condicion1) {
  # código si condición1 es TRUE
#} else if (condicion2) {
  # código si condición2 es TRUE
#} else {
  # código si todas las condiciones son FALSE
#}

# Ejemplo práctico
edad <- 18
if (edad >= 18) {
  print("Mayor de edad")
} else {
  print("Menor de edad")
}
## [1] "Mayor de edad"
# IF con múltiples condiciones
nota <- 85
if (nota >= 90) {
  print("Excelente")
} else if (nota >= 70) {
  print("Aprobado")
} else {
  print("Reprobado")
}
## [1] "Aprobado"
#Nota importante: Siempre usar llaves cuando tengas múltiples instrucciones

Estructura general en Python

# Sintaxis básica
#if condicion:
    # código a ejecutar si la condición es True

# IF-ELSE
#if condicion:
    # código si condición es True
#else:
    # código si condición es False

# IF-ELIF-ELSE
#if condicion:
    # código si condición1 es True
#elif condicion2:
    # código si condición2 es True
#else:
    # código si todas las condiciones son False

# Ejemplo práctico
edad = 18
if edad >= 18:
    print("Mayor de edad")
else:
    print("Menor de edad")
## Mayor de edad
# IF con múltiples condiciones
nota = 85
if nota >= 90:
    print("Excelente")
elif nota >= 70:
    print("Aprobado")
else:
    print("Reprobado")
## Aprobado
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
 }

}
## [1] "ADVERTENCIA: Batería baja"
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 aplicando IF en R

datos_usuario <- c(23, 45, 67, NA, 89, 12)

if (any(is.na(datos_usuario))) { 
  # is.na(datos_usuario): Devuelve TRUE para cada valor que sea NA
  # any(): Devuelve TRUE si al menos un valor es TRUE
  # El if se ejecuta solo si hay al menos un valor NA
  print("Detectados valores faltantes en los datos")
  
  # Contar valores faltantes
  valores_na <- sum(is.na(datos_usuario))
  # sum(is.na(datos_usuario)): Cuenta cuántos valores son TRUE (cuántos NA hay)
  print(paste("Número de valores NA:", valores_na))
  # paste(): Combina texto y valores para el mensaje
  
  # Crear versión limpia de los datos
  datos_limpios <- datos_usuario[!is.na(datos_usuario)]
  # !is.na(datos_usuario): Selecciona los valores que NO son NA
  # datos_usuario[ ]: Filtra el vector original manteniendo solo los valores no-NA
  
  print(paste("Datos limpios:", paste(datos_limpios, collapse = ", ")))
  # collapse = ", ": Une los valores con comas para mostrarlos
}
## [1] "Detectados valores faltantes en los datos"
## [1] "Número de valores NA: 1"
## [1] "Datos limpios: 23, 45, 67, 89, 12"

Procesamiento Condicional de Datos aplicando IF en PYTHON

import numpy as np

datos_usuario = [23, 45, 67, np.nan, 89, 12]

if any(np.isnan(datos_usuario)):
  # np.isnan(datos_usuario): Devuelve True para cada valor que sea NaN (array booleano)
  # any(): Devuelve True si al menos un valor es True en el array
  # El if se ejecuta solo si hay al menos un valor NaN
    print("Detectados valores faltantes en los datos")
    
    # Contar valores faltantes
    valores_na = sum(np.isnan(datos_usuario))
    # sum(np.isnan(datos_usuario)): Cuenta cuántos valores son True (cuántos NaN hay)
    print(f"Número de valores NA: {valores_na}")
    # f-string: Formato moderno para insertar variables en strings
    
    # Crear versión limpia de los datos
    datos_limpios = [x for x in datos_usuario if not np.isnan(x)]
     # List comprehension []: Crea nueva lista filtrando los valores
     # for x in datos_usuario: Itera sobre cada elemento
     # if not np.isnan(x): Mantiene solo los valores que NO son NaN
     
    print(f"Datos limpios: {', '.join(map(str, datos_limpios))}")
## Detectados valores faltantes en los datos
## Número de valores NA: 1
## Datos limpios: 23, 45, 67, 89, 12
    # map(str, datos_limpios): Convierte todos los números a strings
    # ', '.join(): Une los strings con comas y espacios

Validación de Entrada de Usuario en R

# Simulando entrada de usuario
entrada <- "25"
if (is.character(entrada)) {
  #is.character(entrada): Comprueba si la entrada es de tipo texto/string (procede si es cadena de texto)
  
   # Intentar convertir a número
   numero <- suppressWarnings(as.numeric(entrada))
   # as.numeric(entrada): Intenta convertir el string a número
   # suppressWarnings(): Suprime advertencias si la conversión falla
   # Si la entrada fuera "abc", as.numeric("abc") devolvería NA con warning
   
     if (!is.na(numero)) {
       # !is.na(numero): Comprueba que la conversión fue exitosa (no es NA)
     print(paste("Conversión exitosa:", numero))
       
       if (numero >= 0) {
       print("Número válido y positivo")
       resultado <- sqrt(numero)
       print(paste("Raíz cuadrada:", round(resultado, 2)))
       # round(resultado, 2): Redondea a 2 decimales para mejor presentación
       }
     }
}
## [1] "Conversión exitosa: 25"
## [1] "Número válido y positivo"
## [1] "Raíz cuadrada: 5"

Validación de Entrada de Usuario en Python

# Importar math para funciones matemáticas
import math

# Simulando entrada de usuario
entrada = "25"

if isinstance(entrada, str):
    # isinstance(entrada, str): Comprueba si la entrada es de tipo texto/string
    # (procede si es cadena de texto)
    
    try:
        # Intentar convertir a número
        numero = float(entrada)
        # float(entrada): Intenta convertir el string a número
        # El try-except maneja errores si la conversión falla
        
        # Comprobar que la conversión fue exitosa (no es NaN)
        if not math.isnan(numero):
            print(f"Conversión exitosa: {numero}")
            
            if numero >= 0:
                print("Número válido y positivo")
                resultado = math.sqrt(numero)
                print(f"Raíz cuadrada: {round(resultado, 2)}")
                # round(resultado, 2): Redondea a 2 decimales para mejor presentación
                
    except ValueError:
        # El bloque except captura el error si la conversión falla
        # (equivalente a suppressWarnings() + is.na() en R)
        pass  # No hacer nada si la conversión falla
## Conversión exitosa: 25.0
## Número válido y positivo
## Raíz cuadrada: 5.0

Declaraciones ELSE Ejemplo en R:

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")
}
## [1] "Eres menor de edad"
## [1] "Aún no puedes votar"

Ejemplo en Python:

edad=16

if edad >= 18: 
  print("Eres mayor de edad")
  print("Puedes votar")
  
  # Como edad = 16, se ejecuta el bloque else:

else : 
  print("Eres menor de edad")
  print("Aún no puedes votar")
## Eres menor de edad
## Aún no puedes votar

if-else para Asignar Valores

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
## [1] "Aprobado"
print(mensaje) # ¡Felicitaciones!
## [1] "¡Felicitaciones!"

Metodo 1 en Python:

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

nota <- 65
estado <- if(nota >= 70) "Aprobado" else "Reprobado"
print(estado) # "Reprobado"
## [1] "Reprobado"

Metodo 2 en Python:

nota = 65
estado = "Aprobado" if nota >= 70 else "Reprobado"
print(estado)  # Reprobado
## Reprobado
#En calculos mas complejos en R:

precio_base <- 100
es_miembro <- TRUE

precio_final <- if(es_miembro) {
  precio_base * 0.9 # 10% de descuento para miembros
} else {
  precio_base
}
print(precio_final) # 90
## [1] 90
# En cálculos más complejos en Python:

precio_base = 100
es_miembro = True

precio_final = precio_base * 0.9 if es_miembro else precio_base  # 10% de descuento para miembros

print(precio_final)  # 90.0
## 90.0

Sistema de Calificación de Crédito en R

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(paste("Categoría:", categoria))
## [1] "Categoría: Regular"
print(paste("Tasa de interés:", tasa_interes, "%"))
## [1] "Tasa de interés: 8.5 %"
print(paste("Límite de crédito: $", limite_credito))
## [1] "Límite de crédito: $ 15000"
print(paste("Aprobación automática:", aprobacion_automatica))
## [1] "Aprobación automática: FALSE"

Sistema de Calificación de Crédito en Python

puntaje_credito=650

if puntaje_credito>=70:
  categoria= "Excelente"
  tasa_interes = 3.5
  limite_credito = 50000
  aprobacion_auomatica = True

else:
  categoria= "Regular"
  tasa_interes= 8.5
  limite_credito= 15000
  aprobacion_automatica= False

print("Categoria", categoria)
## Categoria Excelente
print("Tasa de interes", tasa_interes, "%")
## Tasa de interes 3.5 %
print("Limite de credito: $", limite_credito)
## Limite de credito: $ 50000
print("aprobación automática", aprobacion_auomatica)
## aprobación automática True

Calculadora de Descuentos en R

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(paste("Monto original: $", monto_compra))
## [1] "Monto original: $ 150"
print(paste("Descuento: $", round(descuento_aplicado, 2)))
## [1] "Descuento: $ 22.5"
print(paste("Monto final: $", round(monto_final, 2)))
## [1] "Monto final: $ 127.5"
print(paste("Tipo:", tipo_descuento))
## [1] "Tipo: Compra Mayor"
print(paste("Puntos ganados:", puntos_ganados))
## [1] "Puntos ganados: 300"

Calculadora de descuentos en Python

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(f"Monto original: ${monto_compra}")
## Monto original: $150
print(f"Descuento: ${round(descuento_aplicado, 2)}")
## Descuento: $22.5
print(f"Monto final: ${round(monto_final, 2)}")
## Monto final: $127.5
print(f"Tipo: {tipo_descuento}")
## Tipo: Compra Mayor
print(f"Puntos ganados: {puntos_ganados}")
## Puntos ganados: 300

Sistema de Recomendación de Ropa en R

temperatura <- 18
precipitacion <- 0 # mm de lluvia
if(temperatura >= 25) {
  ropa_recomendada <- "Camiseta y pantalón corto"
  accesorios <- c("gorra", "lentes de sol")
  calzado <- "sandalias o tenis ligeros"
} else {
  ropa_recomendada <- "Suéter y pantalón largo"
  accesorios <- c("bufanda", "guantes")
  calzado <- "zapatos cerrados"
}

# Verificar lluvia independientemente de la temperatura
if(precipitacion > 0) {
  accesorios <- c(accesorios, "paraguas", "impermeable")
  calzado <- "botas impermeables"
}
print(paste("Ropa recomendada:", ropa_recomendada))
## [1] "Ropa recomendada: Suéter y pantalón largo"
print(paste("Accesorios:", paste(accesorios, collapse = ", ")))
## [1] "Accesorios: bufanda, guantes"
print(paste("Calzado:", calzado))
## [1] "Calzado: zapatos cerrados"

Sistema de Recomendación de Ropa en Python

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(f"Ropa recomendada: {ropa_recomendada}")
## Ropa recomendada: Suéter y pantalón largo
print(f"Accesorios: {', '.join(accesorios)}")
## Accesorios: bufanda, guantes
print(f"Calzado: {calzado}")
## Calzado: zapatos cerrados

Validación y Manejo de Errores en R

dividendo <- 10
divisor <- 3
if(divisor != 0) {
  resultado <- dividendo / divisor
  print(paste("El resultado de", dividendo, "÷", divisor, "es:", round(resultado, 2)))
} else {
  print("Error: No se puede dividir por cero")
  resultado <- NA
}
## [1] "El resultado de 10 ÷ 3 es: 3.33"

Validación y Manejo de Errores en Python

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  # Equivalente a NA en R
## El resultado de 10 ÷ 3 es: 3.33

Validación de Tipos de Datos en R

entrada_usuario <- "123"
if(is.numeric(entrada_usuario)) {
  print("Entrada válida: es un número")
  numero_procesado <- entrada_usuario * 2
  print(paste("Resultado:", numero_procesado))
} else {
  print("Entrada inválida: no es un número")
  # Intentar convertir
  numero_convertido <- suppressWarnings(as.numeric(entrada_usuario))
  if(!is.na(numero_convertido)) {
    print("Conversión exitosa")
    numero_procesado <- numero_convertido * 2
    print(paste("Resultado:", numero_procesado))
  } else {
    print("No se pudo convertir a número")
    numero_procesado <- 0
  }
}
## [1] "Entrada inválida: no es un número"
## [1] "Conversión exitosa"
## [1] "Resultado: 246"

Validación de Tipos de Datos en Python

entrada_usuario = "123"

if isinstance(entrada_usuario, (int, float)):
    print("Entrada válida: es un número")
    numero_procesado = entrada_usuario * 2
    print(f"Resultado: {numero_procesado}")
else:
    print("Entrada inválida: no es un número")
    # Intentar convertir
    try:
        numero_convertido = float(entrada_usuario)
        print("Conversión exitosa")
        numero_procesado = numero_convertido * 2
        print(f"Resultado: {numero_procesado}")
    except ValueError:
        print("No se pudo convertir a número")
        numero_procesado = 0
## Entrada inválida: no es un número
## Conversión exitosa
## Resultado: 246.0

Sistema de Autenticación Básico en R

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 & password_ingresado == password_correcto) {
  print("Acceso concedido")
  sesion_activa <- TRUE
  tiempo_sesion <- Sys.time()
  permisos <- c("leer", "escribir", "administrar")
  print(paste("Bienvenido,", usuario_correcto))
  print(paste("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")
  }
}
## [1] "Acceso denegado: credenciales incorrectas"
## [1] "Contraseña incorrecta"

Sistema de Autenticación Básico en R

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

Múltiples Condiciones con if-else if-else

Ejemplo en R:

nota <- 85
if(nota >= 90) {
  calificacion <- "A"
  comentario <- "Excelente trabajo"
} else if(nota >= 80) { # Solo se evalúa si nota < 90
  calificacion <- "B"
  comentario <- "Muy buen trabajo"
} else if(nota >= 70) { # Solo se evalúa si nota < 80
  calificacion <- "C"
  comentario <- "Trabajo satisfactorio"
} else if(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(paste("Calificación:", calificacion))
## [1] "Calificación: B"
print(comentario)
## [1] "Muy buen trabajo"

Mismo ejemplo en Python:

# Sistema de calificación basado en notas
nota = 85

# Estructura condicional para determinar la calificación
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

Importancia del Orden El orden de las condiciones es crucial. Siempre ordena de más específico a menos específico, o de mayor a menor (o viceversa):

Ejemplo en R

numero <- 75

# CORRECTO: de mayor a menor
if(numero >= 90) {
  categoria <- "Muy alto"
} else if(numero >= 70) { # 75 >= 70 es TRUE, se ejecuta aquí
  categoria <- "Alto" # Resultado correcto
} else if(numero >= 50) {
  categoria <- "Medio" # Ya no se evalúa
} else {
  categoria <- "Bajo"
}
print(categoria) # "Alto"
## [1] "Alto"
# INCORRECTO: de menor a mayor
if(numero >= 50) { # 75 >= 50 es TRUE, se ejecuta aquí
  categoria_mala <- "Medio" # Resultado incorrecto
} else if(numero >= 70) {
  categoria_mala <- "Alto" # Nunca se ejecuta
} else if(numero >= 90) {
  categoria_mala <- "Muy alto" # Nunca se ejecuta
}
print(categoria_mala) # "Medio"
## [1] "Medio"

Ejemplo en Python:

numero = 75

# CORRECTO: Orden de mayor a menor (más específico primero)
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(f"Categoría correcta: {categoria}")  # "Alto"
## Categoría correcta: Alto
# INCORRECTO: Orden de menor a mayor (más general primero)
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(f"Categoría incorrecta: {categoria_mala}")  # "Medio"
## Categoría incorrecta: Medio

Sistema de Clasificación de IMC en R

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"
} else if(imc < 25) {
  categoria <- "Peso normal"
  recomendacion <- "Mantenga su estilo de vida saludable"
  color_alerta <- "verde"
} else if(imc < 30) {
  categoria <- "Sobrepeso"
  recomendacion <- "Considere aumentar la actividad física y mejorar la dieta"
  color_alerta <- "amarillo"
} else if(imc < 35) {
  categoria <- "Obesidad clase I"
  recomendacion <- "Consulte con un médico para un plan de pérdida de peso"
  color_alerta <- "naranja"
} else if(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(paste("IMC:", round(imc, 2)))
## [1] "IMC: 22.86"
print(paste("Categoría:", categoria))
## [1] "Categoría: Peso normal"
print(paste("Recomendación:", recomendacion))
## [1] "Recomendación: Mantenga su estilo de vida saludable"
print(paste("Nivel de alerta:", color_alerta))
## [1] "Nivel de alerta: verde"

Sistema de Clasificación de IMC en Python

# Cálculo del Índice de Masa Corporal (IMC)
peso = 70  # kg
altura = 1.75  # metros
imc = peso / (altura ** 2)  # Fórmula: peso / altura²

# Clasificación según rangos de IMC establecidos por la OMS
if imc < 18.5:
    categoria = "Bajo peso"
    recomendacion = "Consulte con un nutricionista para ganar peso saludablemente"
    color_alerta = "azul"
elif imc < 25:  # IMC normal: 18.5 - 24.9
    categoria = "Peso normal"
    recomendacion = "Mantenga su estilo de vida saludable"
    color_alerta = "verde"
elif imc < 30:  # Sobrepeso: 25 - 29.9
    categoria = "Sobrepeso"
    recomendacion = "Considere aumentar la actividad física y mejorar la dieta"
    color_alerta = "amarillo"
elif imc < 35:  # Obesidad grado I: 30 - 34.9
    categoria = "Obesidad clase I"
    recomendacion = "Consulte con un médico para un plan de pérdida de peso"
    color_alerta = "naranja"
elif imc < 40:  # Obesidad grado II: 35 - 39.9
    categoria = "Obesidad clase II"
    recomendacion = "Es importante consultar con un médico especialista"
    color_alerta = "rojo"
else:  # Obesidad grado III: ≥ 40
    categoria = "Obesidad clase III (mórbida)"
    recomendacion = "Consulte urgentemente con un médico especialista"
    color_alerta = "rojo_intenso"

# Mostrar resultados
print(f"IMC calculado: {imc:.2f}")
## IMC calculado: 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

Sistema de Tarifas Progresivas de electricidad en R

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"
} else if(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"
} else if(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(paste("Consumo:", consumo_kwh, "kWh"))
## [1] "Consumo: 250 kWh"
print(paste("Tipo de usuario:", tipo_usuario))
## [1] "Tipo de usuario: Alto"
print(paste("Costo total: $", round(costo, 2)))
## [1] "Costo total: $ 42.5"
print(paste("Precio promedio por kWh: $", round(costo/consumo_kwh, 4)))
## [1] "Precio promedio por kWh: $ 0.17"

Sistema de Tarifas Progresivas de electricidad en Python

# Sistema de tarifas escalonadas para consumo eléctrico
consumo_kwh = 250  # kilowatts-hora consumidos

# Tarifas progresivas: mientras más consumes, más pagas por kWh adicional
if consumo_kwh <= 100:
    # Tarifa básica: primeros 100 kWh a precio bajo
    tarifa = 0.12
    costo = consumo_kwh * tarifa
    tipo_usuario = "Básico"
elif consumo_kwh <= 200:
    # Tarifa intermedia: bloques de 101-200 kWh
    costo_basico = 100 * 0.12  # Primeros 100 kWh
    consumo_intermedio = consumo_kwh - 100  # kWh en segundo bloque
    costo_intermedio = consumo_intermedio * 0.18  # Tarifa más alta
    costo = costo_basico + costo_intermedio
    tipo_usuario = "Intermedio"
elif consumo_kwh <= 300:
    # Tarifa alta: bloques de 201-300 kWh
    costo_basico = 100 * 0.12  # Primer bloque
    costo_intermedio = 100 * 0.18  # Segundo bloque (100 kWh)
    consumo_alto = consumo_kwh - 200  # kWh en tercer bloque
    costo_alto = consumo_alto * 0.25  # Tarifa aún más alta
    costo = costo_basico + costo_intermedio + costo_alto
    tipo_usuario = "Alto"
else:
    # Tarifa muy alta: consumo superior a 300 kWh
    costo_basico = 100 * 0.12  # Primer bloque
    costo_intermedio = 100 * 0.18  # Segundo bloque
    costo_alto = 100 * 0.25  # Tercer bloque
    consumo_muy_alto = consumo_kwh - 300  # kWh en cuarto bloque
    costo_muy_alto = consumo_muy_alto * 0.32  # Tarifa más alta
    costo = costo_basico + costo_intermedio + costo_alto + costo_muy_alto
    tipo_usuario = "Muy Alto"

# Resultados del cálculo de tarifas
print(f"Consumo: {consumo_kwh} kWh")
## Consumo: 250 kWh
print(f"Tipo de usuario: {tipo_usuario}")
## Tipo de usuario: Alto
print(f"Costo total: ${costo:.2f}")
## Costo total: $42.50
print(f"Precio promedio por kWh: ${costo/consumo_kwh:.4f}")
## Precio promedio por kWh: $0.1700

Sistema de Evaluación Académica Complejo en R

# 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)

if(nota_final >= 95) {
  letra <- "A+"
  puntos <- 4.0
  descripcion <- "Excelencia sobresaliente"
  mencion <- "Suma Cum Laude"
} else if(nota_final >= 90) {
  letra <- "A"
  puntos <- 4.0
  descripcion <- "Excelente desempeño"
  mencion <- "Magna Cum Laude"
} else if(nota_final >= 87) {
  letra <- "A-"
  puntos <- 3.7
  descripcion <- "Muy buen desempeño"
  mencion <- "Cum Laude"
} else if(nota_final >= 83) {
  letra <- "B+"
  puntos <- 3.3
  descripcion <- "Buen desempeño superior"
  mencion <- "Sin mención especial"
} else if(nota_final >= 80) {
  letra <- "B"
  puntos <- 3.0
  descripcion <- "Buen desempeño"
  mencion <- "Sin mención especial"
} else if(nota_final >= 77) {
  letra <- "B-"
  puntos <- 2.7
  descripcion <- "Desempeño satisfactorio superior"
  mencion <- "Sin mención especial"
} else if(nota_final >= 73) {
  letra <- "C+"
  puntos <- 2.3
  descripcion <- "Desempeño satisfactorio"
  mencion <- "Sin mención especial"
} else if(nota_final >= 70) {
  letra <- "C"
  puntos <- 2.0
  descripcion <- "Desempeño mínimo aceptable"
  mencion <- "Sin mención especial"
} else if(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 <- paste(mencion, "- BAJA ASISTENCIA")
  if(puntos > 0) {
    puntos <- puntos - 0.5 # Penalización
  }
}

print("=== REPORTE ACADÉMICO ===")
## [1] "=== REPORTE ACADÉMICO ==="
print(paste("Nota final:", round(nota_final, 2)))
## [1] "Nota final: 85.6"
print(paste("Calificación:", letra))
## [1] "Calificación: B+"
print(paste("Puntos GPA:", puntos))
## [1] "Puntos GPA: 3.3"
print(paste("Descripción:", descripcion))
## [1] "Descripción: Buen desempeño superior"
print(paste("Mención:", mencion))
## [1] "Mención: Sin mención especial"
print("========================")
## [1] "========================"

Sistema de Evaluación Académica Complejo en Python

# Sistema de evaluación académica con múltiples componentes ponderados

# Datos del estudiante - diferentes componentes de la calificación
nota_examenes = 85    # 40% del total
nota_tareas = 78      # 25% del total  
asistencia = 95       # 10% del total
participacion = 88    # 10% del total
proyecto_final = 92   # 15% del total

# Cálculo de nota final ponderada
nota_final = (nota_examenes * 0.4) + (nota_tareas * 0.25) + \
             (asistencia * 0.1) + (participacion * 0.1) + \
             (proyecto_final * 0.15)

# Sistema de calificación con letras (escala estadounidense)
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 (penalización por baja asistencia)
if asistencia < 75:
    mencion = f"{mencion} - BAJA ASISTENCIA"
    if puntos > 0:
        puntos -= 0.5  # Penalización de 0.5 puntos en GPA

# Reporte académico completo
print("=== REPORTE ACADÉMICO ===")
## === REPORTE ACADÉMICO ===
print(f"Nota final: {nota_final:.2f}")
## Nota final: 85.60
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 en R

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"
} else if(temperatura < 0) {
  clima_base <- "Muy frío"
  actividades <- "Deportes de invierno, ropa térmica"
} else if(temperatura < 10) {
  clima_base <- "Frío"
  actividades <- "Caminatas con abrigo, actividades interiores"
} else if(temperatura < 20) {
  clima_base <- "Fresco"
  actividades <- "Senderismo, actividades al aire libre con chaqueta"
} else if(temperatura < 25) {
  clima_base <- "Templado"
  actividades <- "Ideal para todas las actividades al aire libre"
} else if(temperatura < 30) {
  clima_base <- "Cálido"
  actividades <- "Playa, piscina, deportes acuáticos"
} else if(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(clima_base)
## [1] "Templado"
print(actividades)
## [1] "Ideal para todas las actividades al aire libre"

Sistema de Clasificación Meteorológica en Python

# Sistema de recomendación de actividades basado en temperatura
temperatura = 22      # Grados Celsius
humedad = 65          # Porcentaje
velocidad_viento = 15 # km/h
precipitacion = 2     # mm

# Clasificación principal basada en 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: {clima_base}")
## Clima: Templado
print(f"Actividades recomendadas: {actividades}")
## Actividades recomendadas: Ideal para todas las actividades al aire libre

FUNCION VECTORIZADA ( ifelse() ) Puede aplicar una condición a cada elemento de un vector y devolver resultados diferentes para cada elemento según se cumpla o no la condición. Sintaxis: ifelse(test, yes, no) •test: vector de condiciones lógicas •yes: valores a devolver donde test es TRUE •no: valores a devolver donde test es FALSE

Ejemplo:

# Vector de números
numeros <- c(-3, -1, 0, 2, 5, -7, 8)

# Aplicar condición a todo el vector
signos <- ifelse(numeros >= 0, "No negativo", "Negativo")

# Mostrar resultados
resultado <- data.frame(numero = numeros, signo = signos)
print(resultado)
##   numero       signo
## 1     -3    Negativo
## 2     -1    Negativo
## 3      0 No negativo
## 4      2 No negativo
## 5      5 No negativo
## 6     -7    Negativo
## 7      8 No negativo

Para la replicación de la funcion vectorizada es necesaria la libreria numpy (funcion numpy.where) en Python:

import numpy as np
# Ejemplo de operaciones vectorizadas en arrays
# Las operaciones vectorizadas son más eficientes que los bucles

# Vector de números
numeros = np.array([-3, -1, 0, 2, 5, -7, 8])

# Aplicar condición a todo el vector de manera eficiente
# numpy.where(condición, valor_si_true, valor_si_false)
signos = np.where(numeros >= 0, "No negativo", "Negativo")

# Mostrar resultados en formato tabular
resultado = np.column_stack((numeros, signos))
print("Número\tSigno")
## Número   Signo
print("------------")
## ------------
for num, signo in resultado:
    print(f"{num}\t{signo}")
## -3   Negativo
## -1   Negativo
## 0    No negativo
## 2    No negativo
## 5    No negativo
## -7   Negativo
## 8    No negativo

Comparación con Métodos Alternativos

## Método tradicional con bucle (más lento)

numeros <- c(-3, -1, 0, 2, 5, -7, 8)
signos_bucle <- character(length(numeros))
for(i in seq_along(numeros)) {
  if(numeros[i] >= 0) {
    signos_bucle[i] <- "No negativo"
  } else {
    signos_bucle[i] <- "Negativo"
  }
}
print(identical(signos, signos_bucle)) # TRUE (mismo resultado)
## [1] TRUE
## Usando ifelse (Método Eficiente)
  
# Método vectorizado con ifelse (más rápido)
signos_ifelse <- ifelse(numeros >= 0, "No negativo", "Negativo")

# Ambos métodos dan el mismo resultado, pero ifelse es mucho más rápido
print(identical(signos_bucle, signos_ifelse)) # TRUE
## [1] TRUE

Comparacion de Metodos Alternativos en Python

import numpy as np
import time

numeros = np.array([-3, -1, 0, 2, 5, -7, 8])

# Método 1: Bucle tradicional (más lento para grandes volúmenes)
start_time = time.time()
signos_bucle = []
for num in numeros:
    if num >= 0:
        signos_bucle.append("No negativo")
    else:
        signos_bucle.append("Negativo")
time_bucle = time.time() - start_time

# Método 2: Vectorización con numpy (más rápido)
start_time = time.time()
signos_numpy = np.where(numeros >= 0, "No negativo", "Negativo")
time_numpy = time.time() - start_time

# Verificar que ambos métodos dan el mismo resultado
son_iguales = np.array_equal(signos_bucle, signos_numpy)

print(f"Tiempo bucle: {time_bucle:.6f} segundos")
## Tiempo bucle: 0.004039 segundos
print(f"Tiempo vectorizado: {time_numpy:.6f} segundos")
## Tiempo vectorizado: 0.003000 segundos
print(f"Resultados iguales: {son_iguales}")
## Resultados iguales: True
print(f"Vectorización es {time_bucle/time_numpy:.1f} veces más rápida")
## Vectorización es 1.3 veces más rápida

Clasificación de Estudiantes en R

# Datos de estudiantes
estudiantes <- c("Ana", "Pedro", "Luis", "María", "Carlos", "Sofia", "Diego", "Laura")
notas <- c(95, 67, 82, 88, 45, 91, 73, 79)

# Clasificación simple: Aprobado/Reprobado
estado <- ifelse(notas >= 70, "Aprobado", "Reprobado")

# Crear data frame con resultados
reporte_estudiantes <- data.frame(
  nombre = estudiantes,
  nota = notas,
  estado = estado,
  stringsAsFactors = FALSE
)
print(reporte_estudiantes)
##   nombre nota    estado
## 1    Ana   95  Aprobado
## 2  Pedro   67 Reprobado
## 3   Luis   82  Aprobado
## 4  María   88  Aprobado
## 5 Carlos   45 Reprobado
## 6  Sofia   91  Aprobado
## 7  Diego   73  Aprobado
## 8  Laura   79  Aprobado
# Agregar información adicional
reporte_estudiantes$necesita_recuperacion <- ifelse(notas < 70, "Sí", "No")
reporte_estudiantes$excelencia <- ifelse(notas >= 90, "Excelente", "Regular")
print(reporte_estudiantes)
##   nombre nota    estado necesita_recuperacion excelencia
## 1    Ana   95  Aprobado                    No  Excelente
## 2  Pedro   67 Reprobado                    Sí    Regular
## 3   Luis   82  Aprobado                    No    Regular
## 4  María   88  Aprobado                    No    Regular
## 5 Carlos   45 Reprobado                    Sí    Regular
## 6  Sofia   91  Aprobado                    No  Excelente
## 7  Diego   73  Aprobado                    No    Regular
## 8  Laura   79  Aprobado                    No    Regular

Clasificación de Estudiantes en Python

import pandas as pd

# Datos de estudiantes y sus calificaciones
estudiantes = ["Ana", "Pedro", "Luis", "María", "Carlos", "Sofia", "Diego", "Laura"]
notas = [95, 67, 82, 88, 45, 91, 73, 79]

# List comprehension para clasificación eficiente
# [expresión for elemento in iterable if condición]
estado = ["Aprobado" if nota >= 70 else "Reprobado" for nota in notas]

# Crear DataFrame con los resultados
reporte_estudiantes = pd.DataFrame({
    'nombre': estudiantes,
    'nota': notas,
    'estado': estado
})

print("=== REPORTE DE ESTUDIANTES ===")
## === REPORTE DE ESTUDIANTES ===
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
# Agregar columnas adicionales con más clasificaciones
reporte_estudiantes['necesita_recuperacion'] = ['Sí' if nota < 70 else 'No' for nota in notas]
reporte_estudiantes['excelencia'] = ['Excelente' if nota >= 90 else 'Regular' for nota in notas]

print("\n=== REPORTE COMPLETO ===")
## 
## === REPORTE COMPLETO ===
print(reporte_estudiantes)
##    nombre  nota     estado necesita_recuperacion excelencia
## 0     Ana    95   Aprobado                    No  Excelente
## 1   Pedro    67  Reprobado                    Sí    Regular
## 2    Luis    82   Aprobado                    No    Regular
## 3   María    88   Aprobado                    No    Regular
## 4  Carlos    45  Reprobado                    Sí    Regular
## 5   Sofia    91   Aprobado                    No  Excelente
## 6   Diego    73   Aprobado                    No    Regular
## 7   Laura    79   Aprobado                    No    Regular

ifelse Anidado para Múltiples Categorías en R

# Datos de ejemplo
edades <- c(5, 12, 15, 18, 25, 35, 45, 55, 65, 75, 85)

# Clasificación de edades con ifelse anidado
categorias <- ifelse(edades < 13, "Niño",
              ifelse(edades < 18, "Adolescente",
              ifelse(edades < 25, "Joven adulto",
              ifelse(edades < 65, "Adulto", "Adulto mayor"))))

# Mostrar resultados
clasificacion_edades <- data.frame(edad = edades, categoria = categorias)
print(clasificacion_edades)
##    edad    categoria
## 1     5         Niño
## 2    12         Niño
## 3    15  Adolescente
## 4    18 Joven adulto
## 5    25       Adulto
## 6    35       Adulto
## 7    45       Adulto
## 8    55       Adulto
## 9    65 Adulto mayor
## 10   75 Adulto mayor
## 11   85 Adulto mayor
# Agregar recomendaciones específicas
recomendaciones <- ifelse(edades < 13, "Educación primaria y juegos",
                   ifelse(edades < 18, "Educación secundaria",
                   ifelse(edades < 25, "Educación superior o trabajo",
                   ifelse(edades < 65, "Vida laboral activa", "Jubilación y cuidados"))))
clasificacion_edades$recomendacion <- recomendaciones
print(clasificacion_edades)
##    edad    categoria                recomendacion
## 1     5         Niño  Educación primaria y juegos
## 2    12         Niño  Educación primaria y juegos
## 3    15  Adolescente         Educación secundaria
## 4    18 Joven adulto Educación superior o trabajo
## 5    25       Adulto          Vida laboral activa
## 6    35       Adulto          Vida laboral activa
## 7    45       Adulto          Vida laboral activa
## 8    55       Adulto          Vida laboral activa
## 9    65 Adulto mayor        Jubilación y cuidados
## 10   75 Adulto mayor        Jubilación y cuidados
## 11   85 Adulto mayor        Jubilación y cuidados

ifelse Anidado para Múltiples Categorías en Python

import pandas as pd

# Datos de ejemplo
edades = [5, 12, 15, 18, 25, 35, 45, 55, 65, 75, 85]

# Clasificación manual con bucles
categorias = []
for edad in edades:
    if edad < 13:
        categorias.append("Niño")
    elif edad < 18:
        categorias.append("Adolescente")
    elif edad < 25:
        categorias.append("Joven adulto")
    elif edad < 65:
        categorias.append("Adulto")
    else:
        categorias.append("Adulto mayor")

# Crear DataFrame con los resultados
clasificacion_edades = pd.DataFrame({
    'edad': edades, 
    'categoria': categorias
})

print("=== CLASIFICACIÓN POR EDAD ===")
## === CLASIFICACIÓN POR EDAD ===
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
# Agregar recomendaciones específicas por grupo de edad
recomendaciones = []
for edad in edades:
    if edad < 13:
        recomendaciones.append("Educación primaria y juegos")
    elif edad < 18:
        recomendaciones.append("Educación secundaria")
    elif edad < 25:
        recomendaciones.append("Educación superior o trabajo")
    elif edad < 65:
        recomendaciones.append("Vida laboral activa")
    else:
        recomendaciones.append("Jubilación y cuidados")

clasificacion_edades['recomendacion'] = recomendaciones

print("\n=== CLASIFICACIÓN CON RECOMENDACIONES ===")
## 
## === CLASIFICACIÓN CON 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

Sistema de Calificación Académica en R

# Datos de calificaciones
materias <- c("Matemáticas", "Ciencias", "Historia", "Literatura", "Arte", "Deportes")
puntuaciones <- c(95, 78, 85, 92, 68, 88)

# Sistema de calificación con letras
calificaciones_letra <- ifelse(puntuaciones >= 95, "A+",
                        ifelse(puntuaciones >= 90, "A",
                        ifelse(puntuaciones >= 85, "B+",
                        ifelse(puntuaciones >= 80, "B",
                        ifelse(puntuaciones >= 75, "C+",
                        ifelse(puntuaciones >= 70, "C", "F"))))))

# Determinar estado
estado_materia <- ifelse(puntuaciones >= 70, "Aprobada", "Reprobada")

# Calcular puntos GPA
puntos_gpa <- ifelse(puntuaciones >= 95, 4.0,
              ifelse(puntuaciones >= 90, 4.0,
              ifelse(puntuaciones >= 85, 3.5,
              ifelse(puntuaciones >= 80, 3.0,
              ifelse(puntuaciones >= 75, 2.5,
              ifelse(puntuaciones >= 70, 2.0, 0.0))))))

# Crear reporte completo
reporte_academico <- data.frame(
  materia = materias,
  puntuacion = puntuaciones,
  letra = calificaciones_letra,
  estado = estado_materia,
  gpa = puntos_gpa,
  stringsAsFactors = FALSE
)
print(reporte_academico)
##       materia puntuacion letra    estado gpa
## 1 Matemáticas         95    A+  Aprobada 4.0
## 2    Ciencias         78    C+  Aprobada 2.5
## 3    Historia         85    B+  Aprobada 3.5
## 4  Literatura         92     A  Aprobada 4.0
## 5        Arte         68     F Reprobada 0.0
## 6    Deportes         88    B+  Aprobada 3.5
# Calcular estadísticas generales
promedio_general <- mean(puntuaciones)
gpa_general <- mean(puntos_gpa)
materias_aprobadas <- sum(puntuaciones >= 70)
materias_reprobadas <- sum(puntuaciones < 70)

print(paste("Promedio general:", round(promedio_general, 2)))
## [1] "Promedio general: 84.33"
print(paste("GPA general:", round(gpa_general, 2)))
## [1] "GPA general: 2.92"
print(paste("Materias aprobadas:", materias_aprobadas))
## [1] "Materias aprobadas: 5"
print(paste("Materias reprobadas:", materias_reprobadas))
## [1] "Materias reprobadas: 1"

Sistema de Calificación Académica en Python

import pandas as pd
import numpy as np

# Datos de calificaciones por materia
materias = ["Matemáticas", "Ciencias", "Historia", "Literatura", "Arte", "Deportes"]
puntuaciones = [95, 78, 85, 92, 68, 88]

# Función para convertir puntuación a calificación con letra
def obtener_calificacion(puntuacion):
    """Convierte una puntuación numérica a calificación con letra"""
    if puntuacion >= 95:
        return "A+"
    elif puntuacion >= 90:
        return "A"
    elif puntuacion >= 85:
        return "B+"
    elif puntuacion >= 80:
        return "B"
    elif puntuacion >= 75:
        return "C+"
    elif puntuacion >= 70:
        return "C"
    else:
        return "F"

# Aplicar función a todas las puntuaciones
calificaciones_letra = [obtener_calificacion(p) for p in puntuaciones]

# Determinar estado (aprobado/reprobado)
estado_materia = ["Aprobada" if p >= 70 else "Reprobada" for p in puntuaciones]

# Función para calcular GPA (Grade Point Average)
def calcular_gpa(puntuacion):
    """Calcula los puntos GPA basado en la puntuación"""
    if puntuacion >= 95:
        return 4.0
    elif puntuacion >= 90:
        return 4.0
    elif puntuacion >= 85:
        return 3.5
    elif puntuacion >= 80:
        return 3.0
    elif puntuacion >= 75:
        return 2.5
    elif puntuacion >= 70:
        return 2.0
    else:
        return 0.0

puntos_gpa = [calcular_gpa(p) for p in puntuaciones]

# Crear reporte académico completo
reporte_academico = pd.DataFrame({
    'materia': materias,
    'puntuacion': puntuaciones,
    'letra': calificaciones_letra,
    'estado': estado_materia,
    'gpa': puntos_gpa
})

print("=== REPORTE ACADÉMICO POR MATERIA ===")
## === REPORTE ACADÉMICO POR MATERIA ===
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
# Calcular estadísticas generales
promedio_general = np.mean(puntuaciones)
gpa_general = np.mean(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"\n=== ESTADÍSTICAS GENERALES ===")
## 
## === ESTADÍSTICAS GENERALES ===
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

Análisis de Ventas por Trimestre en R

# Datos de ventas mensuales
meses <- c("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio",
           "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre")
ventas <- c(45000, 52000, 48000, 55000, 62000, 58000,
            71000, 68000, 59000, 63000, 75000, 82000)

# Meta mensual
meta_mensual <- 60000

# Evaluación de rendimiento
rendimiento <- ifelse(ventas >= meta_mensual * 1.2, "Excepcional",
               ifelse(ventas >= meta_mensual, "Cumplió meta",
               ifelse(ventas >= meta_mensual * 0.8, "Cerca de meta", "Bajo rendimiento")))

# Bonificación
bonificacion <- ifelse(ventas >= meta_mensual * 1.2, ventas * 0.05,
                ifelse(ventas >= meta_mensual, ventas * 0.03, 0))

# Trimestres
trimestre <- ifelse(meses %in% c("Enero", "Febrero", "Marzo"), "Q1",
             ifelse(meses %in% c("Abril", "Mayo", "Junio"), "Q2",
             ifelse(meses %in% c("Julio", "Agosto", "Septiembre"), "Q3", "Q4")))

# Crear reporte de ventas
reporte_ventas <- data.frame(
  mes = meses,
  trimestre = trimestre,
  ventas = ventas,
  meta = meta_mensual,
  rendimiento = rendimiento,
  bonificacion = bonificacion,
  stringsAsFactors = FALSE
)
print(reporte_ventas)
##           mes trimestre ventas  meta      rendimiento bonificacion
## 1       Enero        Q1  45000 60000 Bajo rendimiento            0
## 2     Febrero        Q1  52000 60000    Cerca de meta            0
## 3       Marzo        Q1  48000 60000    Cerca de meta            0
## 4       Abril        Q2  55000 60000    Cerca de meta            0
## 5        Mayo        Q2  62000 60000     Cumplió meta         1860
## 6       Junio        Q2  58000 60000    Cerca de meta            0
## 7       Julio        Q3  71000 60000     Cumplió meta         2130
## 8      Agosto        Q3  68000 60000     Cumplió meta         2040
## 9  Septiembre        Q3  59000 60000    Cerca de meta            0
## 10    Octubre        Q4  63000 60000     Cumplió meta         1890
## 11  Noviembre        Q4  75000 60000      Excepcional         3750
## 12  Diciembre        Q4  82000 60000      Excepcional         4100
# Análisis por trimestre
ventas_q1 <- sum(ventas[trimestre == "Q1"])
ventas_q2 <- sum(ventas[trimestre == "Q2"])
ventas_q3 <- sum(ventas[trimestre == "Q3"])
ventas_q4 <- sum(ventas[trimestre == "Q4"])

print(paste("Ventas Q1:", ventas_q1))
## [1] "Ventas Q1: 145000"
print(paste("Ventas Q2:", ventas_q2))
## [1] "Ventas Q2: 175000"
print(paste("Ventas Q3:", ventas_q3))
## [1] "Ventas Q3: 198000"
print(paste("Ventas Q4:", ventas_q4))
## [1] "Ventas Q4: 220000"

Analisis de Venta por Trimestre en Python

import pandas as pd

# Datos 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 de ventas
meta_mensual = 60000

# Función para evaluar rendimiento de ventas
def evaluar_rendimiento(venta):
    """Evalúa el rendimiento basado en la meta mensual"""
    if venta >= meta_mensual * 1.2:  # 20% arriba de la meta
        return "Excepcional"
    elif venta >= meta_mensual:       # Cumplió o superó la meta
        return "Cumplió meta"
    elif venta >= meta_mensual * 0.8: # 80% de la meta
        return "Cerca de meta"
    else:                             # Menos del 80%
        return "Bajo rendimiento"

# Aplicar función a todas las ventas
rendimiento = [evaluar_rendimiento(v) for v in ventas]

# Función para calcular bonificación
def calcular_bonificacion(venta):
    """Calcula bonificación basada en el rendimiento"""
    if venta >= meta_mensual * 1.2:
        return venta * 0.05  # 5% de bonificación
    elif venta >= meta_mensual:
        return venta * 0.03  # 3% de bonificación
    else:
        return 0             # Sin bonificación

bonificacion = [calcular_bonificacion(v) for v in ventas]

# Función para determinar trimestre
def obtener_trimestre(mes):
    """Asigna cada mes a su trimestre correspondiente"""
    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"

trimestre = [obtener_trimestre(mes) for mes in meses]

# Crear reporte completo de ventas
reporte_ventas = pd.DataFrame({
    'mes': meses,
    'trimestre': trimestre,
    'ventas': ventas,
    'meta': meta_mensual,
    'rendimiento': rendimiento,
    'bonificacion': bonificacion
})

print("=== REPORTE DE VENTAS MENSUALES ===")
## === REPORTE DE VENTAS MENSUALES ===
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
# Análisis por trimestre
ventas_q1 = sum(ventas[i] for i in range(12) if trimestre[i] == "Q1")
ventas_q2 = sum(ventas[i] for i in range(12) if trimestre[i] == "Q2")
ventas_q3 = sum(ventas[i] for i in range(12) if trimestre[i] == "Q3")
ventas_q4 = sum(ventas[i] for i in range(12) if trimestre[i] == "Q4")

print(f"\n=== VENTAS POR TRIMESTRE ===")
## 
## === VENTAS POR TRIMESTRE ===
print(f"Ventas Q1: ${ventas_q1:,.2f}")
## Ventas Q1: $145,000.00
print(f"Ventas Q2: ${ventas_q2:,.2f}")
## Ventas Q2: $175,000.00
print(f"Ventas Q3: ${ventas_q3:,.2f}")
## Ventas Q3: $198,000.00
print(f"Ventas Q4: ${ventas_q4:,.2f}")
## Ventas Q4: $220,000.00
print(f"Total anual: ${sum(ventas):,.2f}")
## Total anual: $738,000.00

Manejo de Valores Faltantes en R

# Datos con valores faltantes (NA)
temperaturas <- c(22, 25, NA, 18, 30, NA, 15, 28, 24, NA)
ciudades <- c("Madrid", "Barcelona", "Valencia", "Sevilla", "Bilbao",
              "Málaga", "Zaragoza", "Murcia", "Palma", "Córdoba")

# Clasificación que maneja NA
clasificacion_temp <- ifelse(is.na(temperaturas), "Sin datos",
                      ifelse(temperaturas >= 25, "Caluroso",
                      ifelse(temperaturas >= 20, "Templado", "Frío")))

# Recomendación de ropa
ropa_recomendada <- ifelse(is.na(temperaturas), "Consultar pronóstico",
                    ifelse(temperaturas >= 25, "Ropa ligera",
                    ifelse(temperaturas >= 20, "Ropa normal", "Abrigo")))

# Crear reporte meteorológico
reporte_clima <- data.frame(
  ciudad = ciudades,
  temperatura = temperaturas,
  clasificacion = clasificacion_temp,
  ropa = ropa_recomendada,
  stringsAsFactors = FALSE
)
print(reporte_clima)
##       ciudad temperatura clasificacion                 ropa
## 1     Madrid          22      Templado          Ropa normal
## 2  Barcelona          25      Caluroso          Ropa ligera
## 3   Valencia          NA     Sin datos Consultar pronóstico
## 4    Sevilla          18          Frío               Abrigo
## 5     Bilbao          30      Caluroso          Ropa ligera
## 6     Málaga          NA     Sin datos Consultar pronóstico
## 7   Zaragoza          15          Frío               Abrigo
## 8     Murcia          28      Caluroso          Ropa ligera
## 9      Palma          24      Templado          Ropa normal
## 10   Córdoba          NA     Sin datos Consultar pronóstico
# Estadísticas excluyendo NA
temp_validas <- temperaturas[!is.na(temperaturas)]
print(paste("Temperatura promedio:", round(mean(temp_validas), 1), "°C"))
## [1] "Temperatura promedio: 23.1 °C"
print(paste("Ciudades con datos:", sum(!is.na(temperaturas))))
## [1] "Ciudades con datos: 7"
print(paste("Ciudades sin datos:", sum(is.na(temperaturas))))
## [1] "Ciudades sin datos: 3"

Manejo de valores faltantes en Python

import pandas as pd
import numpy as np

# Datos con valores faltantes (NaN en Python, equivalente a NA en R)
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"]

# Clasificación que maneja valores NaN (faltantes)
# np.isnan() verifica si un valor es NaN (Not a Number)
clasificacion_temp = [
    "Sin datos" if np.isnan(temp) else           # Si es NaN
    "Caluroso" if temp >= 25 else                # Si ≥ 25°C
    "Templado" if temp >= 20 else "Frío"         # Si 20-24°C o <20°C
    for temp in temperaturas
]

# Recomendación de ropa basada en temperatura
ropa_recomendada = [
    "Consultar pronóstico" if np.isnan(temp) else  # Si no hay datos
    "Ropa ligera" if temp >= 25 else               # Si ≥ 25°C
    "Ropa normal" if temp >= 20 else "Abrigo"      # Si 20-24°C o <20°C
    for temp in temperaturas
]

# Crear DataFrame (equivalente a data.frame en R)
reporte_clima = pd.DataFrame({
    'ciudad': ciudades,
    'temperatura': temperaturas,
    'clasificacion': clasificacion_temp,
    'ropa': ropa_recomendada
})

print("=== REPORTE METEOROLÓGICO ===")
## === REPORTE METEOROLÓGICO ===
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
# Estadísticas excluyendo valores NaN
# Filtrar valores no NaN para cálculos estadísticos
temp_validas = [temp for temp in temperaturas if not np.isnan(temp)]

print(f"\n=== ESTADÍSTICAS ===")
## 
## === ESTADÍSTICAS ===
print(f"Temperatura promedio: {np.mean(temp_validas):.1f} °C")
## Temperatura promedio: 23.1 °C
print(f"Ciudades con datos: {len(temp_validas)}")
## Ciudades con datos: 7
print(f"Ciudades sin datos: {len(temperaturas) - len(temp_validas)}")
## Ciudades sin datos: 3
print(f"Temperatura máxima: {np.max(temp_validas):.1f} °C")
## Temperatura máxima: 30.0 °C
print(f"Temperatura mínima: {np.min(temp_validas):.1f} °C")
## Temperatura mínima: 15.0 °C

La función switch Cuando tienes que comparar una variable contra múltiples valores específicos y ejecutar código diferente para cada caso,switch()es más elegante y eficiente que una cadena larga deif-else if. La funciónswitches particularmente útil cuando: * Se tiene muchas opciones específicas (más de 3-4) * Cada opción requiere un valor o acción diferente * Los valores de comparación son constantes conocidas

Estructura General

# Con nombres (más común)
# resultado <- switch(expresion,
#"opcion1" = valor1,
#"opcion2" = valor2,
#"opcion3" = valor3,
#valor_por_defecto)

# Con posiciones numéricas
# resultado <- switch(numero,
#valor1, # posición 1
#valor2, # posición 2
#valor3, # posición 3
#valor_por_defecto)

Ejemplo en R

# Determinar el número de días en un mes
mes <- "febrero"
año <- 2024 # Año bisiesto

dias_en_mes <- switch(mes,
  "enero" = 31,
  "febrero" = if(año %% 4 == 0 && (año %% 100 != 0 || año %% 400 == 0)) 29 else 28,
  "marzo" = 31,
  "abril" = 30,
  "mayo" = 31,
  "junio" = 30,
  "julio" = 31,
  "agosto" = 31,
  "septiembre" = 30,
  "octubre" = 31,
  "noviembre" = 30,
  "diciembre" = 31,
  NA # Valor por defecto si el mes no es válido
)
print(paste(mes, "de", año, "tiene", dias_en_mes, "días"))
## [1] "febrero de 2024 tiene 29 días"

Ejemplo en Python

def dias_en_mes(mes, año=2024):
    
    # Diccionario como alternativa a switch (mes: días)
    dias_por_mes = {
        'enero': 31,
        'marzo': 31,
        'abril': 30,
        'mayo': 31,
        'junio': 30,
        'julio': 31,
        'agosto': 31,
        'septiembre': 30,
        'octubre': 31,
        'noviembre': 30,
        'diciembre': 31
    }
    
    # Caso especial: febrero (depende de si es año bisiesto)
    if mes.lower() == 'febrero':
        # Un año es bisiesto si es divisible por 4 pero no por 100, excepto si es divisible por 400
        if (año % 4 == 0 and año % 100 != 0) or (año % 400 == 0):
            return 29
        else:
            return 28
    
    # Para los demás meses, usar el diccionario
    return dias_por_mes.get(mes.lower(), None)  # None si el mes no existe

# Ejemplo de uso
mes = "febrero"
año = 2024  # Año bisiesto
dias = dias_en_mes(mes, año)

if dias is not None:
    print(f"{mes.capitalize()} de {año} tiene {dias} días")
else:
    print(f"Mes '{mes}' no válido")
## Febrero de 2024 tiene 29 días

Sistema de Días de la Semana en R

# Función para obtener información del día
obtener_info_dia <- function(dia) {
  info <- switch(tolower(dia), # tolower para hacer case-insensitive
    "lunes" = list(
      nombre = "Lunes",
      tipo = "Laboral",
      actividad = "Comenzar la semana con energía",
      estado_animo = "Motivado",
      color = "Azul"
    ),
    "martes" = list(
      nombre = "Martes",
      tipo = "Laboral",
      actividad = "Continuar con el ritmo de trabajo",
      estado_animo = "Concentrado",
      color = "Verde"
    ),
    "miercoles" = list(
      nombre = "Miércoles",
      tipo = "Laboral",
      actividad = "Punto medio de la semana",
      estado_animo = "Equilibrado",
      color = "Amarillo"
    ),
    "jueves" = list(
      nombre = "Jueves",
      tipo = "Laboral",
      actividad = "Prepararse para el final de semana",
      estado_animo = "Expectante",
      color = "Naranja"
    ),
    "viernes" = list(
      nombre = "Viernes",
      tipo = "Laboral",
      actividad = "Finalizar tareas y planificar el fin de semana",
      estado_animo = "Alegre",
      color = "Rosa"
    ),
    "sabado" = list(
      nombre = "Sábado",
      tipo = "Fin de semana",
      actividad = "Relajarse y disfrutar tiempo libre",
      estado_animo = "Relajado",
      color = "Púrpura"
    ),
    "domingo" = list(
      nombre = "Domingo",
      tipo = "Fin de semana",
      actividad = "Descansar y prepararse para la nueva semana",
      estado_animo = "Tranquilo",
      color = "Rojo"
    ),
    list(
      nombre = "Desconocido",
      tipo = "Inválido",
      actividad = "Verificar el día ingresado",
      estado_animo = "Confundido",
      color = "Gris"
    )
  )
  return(info)
}

# Ejemplo de uso
dia_actual <- "viernes"
info_dia <- obtener_info_dia(dia_actual)
print(paste("Día:", info_dia$nombre))
## [1] "Día: Viernes"
print(paste("Tipo:", info_dia$tipo))
## [1] "Tipo: Laboral"
print(paste("Actividad:", info_dia$actividad))
## [1] "Actividad: Finalizar tareas y planificar el fin de semana"
print(paste("Estado de ánimo:", info_dia$estado_animo))
## [1] "Estado de ánimo: Alegre"
print(paste("Color asociado:", info_dia$color))
## [1] "Color asociado: Rosa"

Sistema de dias de la semana en Python

def obtener_info_dia(dia):
    """
    Obtiene información detallada sobre un día de la semana.
    Similar a switch en R pero usando diccionarios en Python.
    
    Args:
        dia (str): Nombre del día en español
    
    Returns:
        dict: Información completa del día
    """
    # Diccionario con información de cada día (alternativa a switch)
    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'
        }
    }
    
    # Obtener información del día (case-insensitive)
    dia_normalizado = dia.lower()
    if dia_normalizado in info_dias:
        return info_dias[dia_normalizado]
    else:
        # Valor por defecto para días no válidos
        return {
            '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
# Probar con un día inválido
print("\n=== PRUEBA CON DÍA INVÁLIDO ===")
## 
## === PRUEBA CON DÍA INVÁLIDO ===
info_invalido = obtener_info_dia("martesss")
print(f"Día: {info_invalido['nombre']}")
## Día: Desconocido

Calculadora con switch en R

# Calculadora usando switch
calculadora <- function(operacion, a, b) {
  # Validar que los números sean válidos
  if(!is.numeric(a) || !is.numeric(b)) {
    return(list(resultado = NA, error = "Los operandos deben ser numéricos"))
  }
  
  resultado <- switch(operacion,
    "suma" = a + b,
    "+" = a + b,
    "resta" = a - b,
    "-" = a - b,
    "multiplicacion" = a * b,
    "*" = a * b,
    "division" = {
      if(b == 0) {
        list(resultado = NA, error = "División por cero")
      } else {
        a / b
      }
    },
    "/" = {
      if(b == 0) {
        list(resultado = NA, error = "División por cero")
      } else {
        a / b
      }
    },
    "potencia" = a^b,
    "^" = a^b,
    "modulo" = a %% b,
    "%" = a %% b,
    list(resultado = NA, error = "Operación no reconocida")
  )
  
  # Si el resultado es una lista (caso de error), devolverla tal como está
  if(is.list(resultado)) {
    return(resultado)
  }
  
  # Si es un número, crear lista con el resultado
  return(list(resultado = resultado, error = NULL))
}

# Ejemplos de uso
print(calculadora("suma", 10, 5))
## $resultado
## [1] 15
## 
## $error
## NULL
print(calculadora("+", 10, 5))
## $resultado
## [1] 15
## 
## $error
## NULL
print(calculadora("division", 10, 0))
## $resultado
## [1] NA
## 
## $error
## [1] "División por cero"
print(calculadora("/", 15, 3))
## $resultado
## [1] 5
## 
## $error
## NULL
print(calculadora("potencia", 2, 8))
## $resultado
## [1] 256
## 
## $error
## NULL
print(calculadora("xyz", 5, 3)) # Operación inválida
## $resultado
## [1] NA
## 
## $error
## [1] "Operación no reconocida"

Calculadora con switch en Python

def calculadora(operacion, a, b):
    """
    Calculadora que realiza diferentes operaciones matemáticas.
    Usa un diccionario como alternativa a switch en R.
    
    Args:
        operacion (str): Tipo de operación ('suma', 'resta', etc.)
        a (float): Primer operando
        b (float): Segundo operando
    
    Returns:
        dict: Diccionario con resultado y posible error
    """
    # Validar que los operandos sean numéricos
    if not isinstance(a, (int, float)) or not isinstance(b, (int, float)):
        return {
            'resultado': None,
            'error': 'Los operandos deben ser numéricos'
        }
    
    # Diccionario de operaciones (alternativa a switch)
    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,
        'potencia': lambda x, y: x ** y,
        '^': lambda x, y: x ** y,
        'modulo': lambda x, y: x % y,
        '%': lambda x, y: x % y
    }
    
    # Manejo especial para división (verificar división por cero)
    if operacion in ['division', '/']:
        if b == 0:
            return {
                'resultado': None,
                'error': 'División por cero'
            }
        else:
            resultado = a / b
    else:
        # Para otras operaciones, usar el diccionario
        if operacion in operaciones:
            resultado = operaciones[operacion](a, b)
        else:
            return {
                'resultado': None,
                'error': 'Operación no reconocida'
            }
    
    # Retornar resultado exitoso
    return {
        'resultado': resultado,
        'error': None
    }

# Ejemplos de uso de la calculadora
print("=== PRUEBAS DE CALCULADORA ===")
## === PRUEBAS DE CALCULADORA ===
# Suma
resultado1 = calculadora("suma", 10, 5)
print(f"10 + 5 = {resultado1['resultado']}")
## 10 + 5 = 15
# División por cero
resultado2 = calculadora("division", 10, 0)
print(f"10 / 0 = Error: {resultado2['error']}")
## 10 / 0 = Error: División por cero
# División normal
resultado3 = calculadora("/", 15, 3)
print(f"15 / 3 = {resultado3['resultado']}")
## 15 / 3 = 5.0
# Potencia
resultado4 = calculadora("potencia", 2, 8)
print(f"2^8 = {resultado4['resultado']}")
## 2^8 = 256
# Operación inválida
resultado5 = calculadora("xyz", 5, 3)
print(f"Operación inválida: {resultado5['error']}")
## Operación inválida: Operación no reconocida

Sistema de Conversión de Unidades en R

# Conversor de unidades
convertir_unidad <- function(valor, de_unidad, a_unidad) {
  # Normalizar unidades a minúsculas
  de <- tolower(de_unidad)
  a <- tolower(a_unidad)
  
  # Factores de conversión a metros (unidad base)
  factor_a_metros <- switch(de,
    "mm" = 0.001,
    "cm" = 0.01,
    "m" = 1,
    "km" = 1000,
    "in" = 0.0254,
    "ft" = 0.3048,
    "yd" = 0.9144,
    "mi" = 1609.344,
    NA
  )
  
  factor_de_metros <- switch(a,
    "mm" = 1000,
    "cm" = 100,
    "m" = 1,
    "km" = 0.001,
    "in" = 39.3701,
    "ft" = 3.28084,
    "yd" = 1.09361,
    "mi" = 0.000621371,
    NA
  )
  
  if(is.na(factor_a_metros) || is.na(factor_de_metros)) {
    return(list(
      resultado = NA,
      error = "Unidad no reconocida",
      unidades_validas = c("mm", "cm", "m", "km", "in", "ft", "yd", "mi")
    ))
  }
  
  # Realizar conversión
  metros <- valor * factor_a_metros
  resultado_final <- metros * factor_de_metros
  
  return(list(
    valor_original = valor,
    unidad_original = de_unidad,
    valor_convertido = resultado_final,
    unidad_final = a_unidad,
    formula = paste(valor, de_unidad, "=", round(resultado_final, 6), a_unidad)
  ))
}

# Ejemplos de conversión
print(convertir_unidad(100, "cm", "m"))
## $valor_original
## [1] 100
## 
## $unidad_original
## [1] "cm"
## 
## $valor_convertido
## [1] 1
## 
## $unidad_final
## [1] "m"
## 
## $formula
## [1] "100 cm = 1 m"
print(convertir_unidad(5, "ft", "m"))
## $valor_original
## [1] 5
## 
## $unidad_original
## [1] "ft"
## 
## $valor_convertido
## [1] 1.524
## 
## $unidad_final
## [1] "m"
## 
## $formula
## [1] "5 ft = 1.524 m"
print(convertir_unidad(10, "km", "mi"))
## $valor_original
## [1] 10
## 
## $unidad_original
## [1] "km"
## 
## $valor_convertido
## [1] 6.21371
## 
## $unidad_final
## [1] "mi"
## 
## $formula
## [1] "10 km = 6.21371 mi"
print(convertir_unidad(1, "xyz", "m")) # Unidad inválida
## $resultado
## [1] NA
## 
## $error
## [1] "Unidad no reconocida"
## 
## $unidades_validas
## [1] "mm" "cm" "m"  "km" "in" "ft" "yd" "mi"

Sistema de conversion de unidades en Python

def convertir_unidad(valor, de_unidad, a_unidad):
    """
    Convierte unidades de medida usando factores de conversión.
    
    Args:
        valor (float): Valor a convertir
        de_unidad (str): Unidad de origen
        a_unidad (str): Unidad de destino
    
    Returns:
        dict: Diccionario con resultado de conversión o error
    """
    # Normalizar unidades a minúsculas
    de = de_unidad.lower()
    a = a_unidad.lower()
    
    # Factores de conversión a metros (unidad base)
    # Diccionario como alternativa a switch
    factores_a_metros = {
        'mm': 0.001,        # milímetros a metros
        'cm': 0.01,         # centímetros a metros
        'm': 1,             # metros a metros (base)
        'km': 1000,         # kilómetros a metros
        'in': 0.0254,       # pulgadas a metros
        'ft': 0.3048,       # pies a metros
        'yd': 0.9144,       # yardas a metros
        'mi': 1609.344      # millas a metros
    }
    
    # Factores de conversión desde metros
    factores_de_metros = {
        'mm': 1000,         # metros a milímetros
        'cm': 100,          # metros a centímetros
        'm': 1,             # metros a metros
        'km': 0.001,        # metros a kilómetros
        'in': 39.3701,      # metros a pulgadas
        'ft': 3.28084,      # metros a pies
        'yd': 1.09361,      # metros a yardas
        'mi': 0.000621371   # metros a millas
    }
    
    # Verificar si las unidades son válidas
    if de not in factores_a_metros or a not in factores_de_metros:
        unidades_validas = list(factores_a_metros.keys())
        return {
            'resultado': None,
            'error': 'Unidad no reconocida',
            'unidades_validas': unidades_validas
        }
    
    # Realizar conversión en dos pasos:
    # 1. Convertir a metros (unidad base)
    # 2. Convertir de metros a unidad destino
    metros = valor * factores_a_metros[de]
    resultado_final = metros * factores_de_metros[a]
    
    # Formatear resultado
    return {
        'valor_original': valor,
        'unidad_original': de_unidad,
        'valor_convertido': resultado_final,
        'unidad_final': a_unidad,
        'formula': f"{valor} {de_unidad} = {resultado_final:.6f} {a_unidad}"
    }

# Ejemplos de conversión
print("=== CONVERSIÓN DE UNIDADES ===")
## === CONVERSIÓN DE UNIDADES ===
# Conversión válida: centímetros a metros
resultado1 = convertir_unidad(100, "cm", "m")
print(resultado1['formula'])
## 100 cm = 1.000000 m
# Conversión válida: pies a metros
resultado2 = convertir_unidad(5, "ft", "m")
print(resultado2['formula'])
## 5 ft = 1.524000 m
# Conversión válida: kilómetros a millas
resultado3 = convertir_unidad(10, "km", "mi")
print(resultado3['formula'])
## 10 km = 6.213710 mi
# Conversión inválida
resultado4 = convertir_unidad(1, "xyz", "m")
print(f"Error: {resultado4['error']}")
## Error: Unidad no reconocida
print(f"Unidades válidas: {resultado4['unidades_validas']}")
## Unidades válidas: ['mm', 'cm', 'm', 'km', 'in', 'ft', 'yd', 'mi']
# Conversión compleja: mostrar todos los detalles
print("\n=== DETALLE DE CONVERSIÓN ===")
## 
## === DETALLE DE CONVERSIÓN ===
detalle = convertir_unidad(100, "cm", "m")
for clave, valor in detalle.items():
    if clave != 'formula':  # La fórmula ya la mostramos aparte
        print(f"{clave}: {valor}")
## valor_original: 100
## unidad_original: cm
## valor_convertido: 1.0
## unidad_final: m
print(f"Fórmula: {detalle['formula']}")
## Fórmula: 100 cm = 1.000000 m