GuíaLab3 LPII Eva
GuíaLab3 LPII Eva
OBJETIVOS
INTRODUCCIÓN
Las funciones son bloques de código reutilizables diseñados para realizar una tarea específica.
En programación, una función es una sección de código que procesa entradas, realiza
operaciones específicas y puede devolver resultados. Las funciones permiten descomponer
problemas complejos en tareas más pequeñas y manejables, facilitando la legibilidad,
mantenimiento y reutilización del código.
Las funciones definidas por el usuario en Python siguen esta estructura básica:
def saludar(nombre):
"""Esta función saluda a la persona cuyo nombre recibe como
parámetro"""
mensaje = f"Hola, {nombre}. ¡Bienvenido/a!"
return mensaje
# Llamada a la función
saludo = saludar("María")
print(saludo) # Imprime: Hola, María. ¡Bienvenido/a!
1. Parámetros posicionales:
def sumar_varios(*numeros):
return sum(numeros)
def describir_persona(**caracteristicas):
for clave, valor in caracteristicas.items():
print(f"{clave}: {valor}")
# Equivalente a:
# def cuadrado(x):
# return x**2
print(cuadrado(5)) # Imprime: 25
Problema: Crear una calculadora utilizando funciones para cada operación y una función
principal que llame a las demás según la elección del usuario.
Solución:
def calculadora():
"""Función principal que implementa una calculadora básica"""
print("Calculadora de funciones")
print("1. Suma")
print("2. Resta")
print("3. Multiplicación")
print("4. División")
try:
opcion = int(input("Seleccione una operación (1-4): "))
num1 = float(input("Ingrese el primer número: "))
num2 = float(input("Ingrese el segundo número: "))
if opcion == 1:
resultado = suma(num1, num2)
operacion = "+"
elif opcion == 2:
resultado = resta(num1, num2)
operacion = "-"
elif opcion == 3:
resultado = multiplicacion(num1, num2)
operacion = "*"
elif opcion == 4:
resultado = division(num1, num2)
operacion = "/"
else:
return "Opción no válida"
if isinstance(resultado, str):
return resultado
return f"Resultado: {num1} {operacion} {num2} = {resultado}"
except ValueError:
return "Error: Ingreso inválido"
# Ejemplo de uso
print(calculadora())
Problema: Crear funciones para convertir entre diferentes unidades de temperatura, con
valores predeterminados.
Solución:
def celsius_a_fahrenheit(celsius):
"""Convierte grados Celsius a Fahrenheit"""
return (celsius * 9/5) + 32
def fahrenheit_a_celsius(fahrenheit):
"""Convierte grados Fahrenheit a Celsius"""
return (fahrenheit - 32) * 5/9
def celsius_a_kelvin(celsius):
"""Convierte grados Celsius a Kelvin"""
return celsius + 273.15
def kelvin_a_celsius(kelvin):
"""Convierte Kelvin a grados Celsius"""
return kelvin - 273.15
Parámetros:
valor: Temperatura a convertir
origen: Escala de origen (C=Celsius, F=Fahrenheit, K=Kelvin)
destino: Escala de destino (C=Celsius, F=Fahrenheit, K=Kelvin)
"""
# Convertir cualquier entrada a Celsius primero
if origen.upper() == "C":
celsius = valor
elif origen.upper() == "F":
celsius = fahrenheit_a_celsius(valor)
elif origen.upper() == "K":
celsius = kelvin_a_celsius(valor)
else:
return "Escala de origen no válida"
# Ejemplos de uso
agua_hirviendo = convertidor_temperatura(100) # De Celsius a Fahrenheit
por defecto
print(f"100°C = {agua_hirviendo}°F")
Problema: Filtrar una lista de diccionarios de estudiantes según diferentes criterios utilizando
funciones lambda y de orden superior.
Solución:
Parámetros:
estudiantes: Lista de diccionarios con información de estudiantes
criterio: Función que define el criterio de filtrado
"""
return list(filter(criterio, estudiantes))
aprobados_excelencia = filtrar_estudiantes(
estudiantes,
lambda e: e["promedio"] >= 17.0
)
electronicos_tercer_semestre = filtrar_estudiantes(
estudiantes,
lambda e: e["carrera"] == "Ingeniería Electrónica" and e["semestre"] ==
3
)
# Mostrar resultados
print("Estudiantes de Ingeniería Electrónica:")
for e in electronicos:
print(f"- {e['nombre']} (Promedio: {e['promedio']})")
Problema: Crear una función de orden superior que aplique diferentes operaciones
matemáticas a una lista de números.
Solución:
Parámetros:
numeros: Lista de números
operacion: Función que define la operación a aplicar
"""
return [operacion(num) for num in numeros]
# Mostrar resultados
print(f"Números originales: {numeros}")
print(f"Cuadrados: {resultados_cuadrado}")
print(f"Raíces cuadradas: {resultados_raiz}")
print(f"Valores absolutos: {resultados_absoluto}")
print(f"Recíprocos: {resultados_reciproco}")
Solución:
Parámetros:
n: Posición del número de Fibonacci a calcular (0-indexado)
memo: Diccionario para almacenar resultados ya calculados
"""
# Verificación de casos base
if n <= 0:
return 0
elif n == 1:
return 1
# Ejemplos de uso
print(f"Fibonacci(10) = {fibonacci_memo(10)}")
print(f"Primeros 15 números de Fibonacci: {secuencia_fibonacci(15)}")
def fibonacci_simple(n):
"""Versión recursiva simple (sin memorización)"""
if n <= 0:
return 0
elif n == 1:
return 1
return fibonacci_simple(n-1) + fibonacci_simple(n-2)
EJERCICIOS PROPUESTOS
CUESTIONARIO
a) ¿Cuáles son las ventajas principales de utilizar funciones en lugar de repetir código?
Proporcione ejemplos específicos.
b) Explique las diferencias entre los distintos tipos de parámetros en Python: posicionales, con
valores predeterminados, *args y **kwargs. ¿Cuándo es apropiado usar cada uno?
c) ¿Qué limitaciones tienen las funciones lambda en comparación con las funciones definidas
por el usuario? ¿En qué contextos son más apropiadas?