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