-
RETO 4: Persistencia de Datos (Manejo de Archivos)
Objetivo: Guardar y recuperar el historial de operaciones en un archivo de texto.
Indicaciones:
- Guardar historial:
- Usar open() en modo "a" (append) para añadir cada operación al archivo historial.txt.
- Recuperar historial:
- Leer el archivo y mostrar su contenido al usuario si así lo solicita.
- Formato del archivo:
- Almacenar cada operación con formato claro (ej: 2024-10-05 14:30: 5 + 3 = 8).
Actividades
- Guardar resultados en un archivo .txt.
- Recuperar y mostrar historial de operaciones.
- Integrar y depurar todas las funcionalidades.
-
Introducción
En la clase 13, nos enfocamos en dos componentes fundamentales para el diseño de programas más complejos y eficientes en Python: las funciones y el alcance de las variables. Las funciones, como bloques reutilizables de código, permiten organizar programas al descomponer tareas grandes y complejas en tareas más pequeñas y manejables. Además, las funciones aceptan parámetros que permiten que el código interactúe con el resto del programa, y utilizan return para devolver resultados procesados. A lo largo de esta clase, los estudiantes aprenderán a definir, utilizar y modificar funciones, con ejemplos que incluyen la definición de parámetros y el uso del retorno de valores. El conocimiento de las funciones es esencial para modularizar código y hacerlo más eficiente y legible.
El segundo tema crucial que abordamos es el alcance de las variables, que determina el contexto en el que una variable puede ser utilizada dentro de un programa. En particular, profundizamos en las diferencias entre variables locales y variables globales, y cómo se gestionan en Python. Las variables locales son accesibles solo dentro de la función en la que se definen, mientras que las globales pueden ser accesibles en cualquier parte del programa. Aprenderemos cómo manejar estos alcances correctamente y cuándo es apropiado usar variables locales y globales. Estos conceptos son esenciales para evitar conflictos y mejorar la claridad y robustez de nuestros programas.
-
13.1. Funciones: definición, parámetros y retorno.¿Qué es una Función?
En programación, una función es un bloque de código que agrupa un conjunto de instrucciones que se pueden ejecutar de forma repetida y reutilizable. Su objetivo principal es llevar a cabo una tarea específica, y se pueden utilizar tantas veces como sea necesario, sin tener que escribir el mismo código una y otra vez. Este concepto es crucial para la organización y simplificación de los programas, ya que permite dividir un programa complejo en pequeñas unidades de trabajo llamadas funciones, cada una encargada de realizar una tarea específica.
Una de las grandes ventajas de las funciones es que permiten modularizar el código, haciendo que sea más fácil de leer, mantener y depurar. Las funciones también ayudan a evitar la duplicación de código, lo que mejora la eficiencia y la claridad en los programas.
En Python, las funciones pueden aceptar parámetros como entradas, lo que les permite recibir valores desde el exterior, y pueden devolver un resultado utilizando la palabra clave return. Al hacer esto, las funciones no solo realizan una acción, sino que también pueden interactuar con el resto del programa, entregando resultados que pueden ser utilizados en otras partes del código.
Sintaxis Básica de una Función en PythonLa sintaxis básica para definir una función en Python es bastante sencilla y se compone de los siguientes componentes:
Código
def nombre_funcion(parametro1, parametro2): # Código a ejecutar return resultado
- def es la palabra clave que indica que estamos definiendo una función.
- nombre_funcion es el nombre que le damos a la función, y debe seguir las reglas estándar de los identificadores en Python.
- parametro1, parametro2, ... son los parámetros que la función acepta. Son valores que se pasan a la función cuando se llama.
- return es utilizado para devolver un valor desde la función al programa principal.
Código
def suma(a, b): return a + b resultado = suma(5, 3) print(resultado) # Imprime 8
- Definición de la función:
- La función suma se define con def, y toma dos parámetros a y b.
- Dentro de la función, la operación a + b se realiza y el resultado se retorna con return.
- Llamada de la función:
- Cuando llamamos suma(5, 3), los valores 5 y 3 son pasados como parámetros a la función.
- El resultado de la suma de 5 y 3 es 8, y ese valor es retornado por la función.
- Uso de return:
- La palabra clave return envía el resultado fuera de la función, permitiendo que el valor sea capturado en la variable resultado para su uso posterior.
Parámetros de una Función: Entradas a la FunciónLos parámetros son los valores que las funciones reciben para realizar sus operaciones. En el ejemplo anterior, los parámetros son a y b en la función suma. Los parámetros pueden ser cualquier tipo de dato válido en Python (números, cadenas, listas, etc.).
Tipos de Parámetros:- Parámetros Posicionales: Son los parámetros más comunes. Los valores se asignan a los parámetros de la función según el orden en que se pasan.
Ejemplo:
Código
def saludar(nombre, edad): print(f"Hola, {nombre}. Tienes {edad} años.") saludar("Juan", 25) # Imprime: Hola, Juan. Tienes 25 años.
- Parámetros con Valores Predeterminados: Los parámetros pueden tener valores predeterminados. Si no se pasa un valor al llamar a la función, se usará el valor predeterminado.
Ejemplo:
Código
def saludar(nombre="Estudiante"): print(f"Hola, {nombre}.") saludar() # Imprime: Hola, Estudiante. saludar("Carlos") # Imprime: Hola, Carlos.
- Parámetros Variables (Argumentos Arbitrarios): Usamos *args para permitir que una función reciba un número variable de argumentos posicionales.
Ejemplo:
Código
def sumar_todos(*numeros): return sum(numeros) print(sumar_todos(1, 2, 3, 4)) # Imprime 10
El Uso de return: Retorno de ResultadosLa palabra clave return es esencial porque permite que la función devuelva un valor al código que la llamó. Sin return, la función simplemente ejecutará su código sin enviar nada de vuelta al resto del programa.
Ejemplo de Función con return:
Código
def multiplicar(a, b): return a * b resultado = multiplicar(4, 3) print(resultado) # Imprime 12
En este ejemplo:
- La función multiplicar toma dos parámetros, a y b, y retorna el producto de estos dos.
- El valor retornado por la función se almacena en la variable resultado y se imprime.
Figura 1: Diagrama de flujo para una función básica Fuente: Creación de autor, D. Nicolalde. Figura 1: Diagrama de flujo para una función básica Fuente: Creación de autor, D. Nicolalde.
Descripción: Este diagrama muestra cómo el flujo de ejecución se mueve hacia una función, recibe parámetros y retorna un valor.
Aprende más
: Descubre qué son las funciones y por qué son esenciales en Python. ¡Accede aquí!
-
13.2. Alcance de variables (globales vs. locales).
En programación, el alcance de una variable hace referencia a la parte del programa donde esa variable puede ser utilizada. Existen dos tipos de alcance principales para las variables: local y global. La distinción entre estas dos es fundamental para el diseño y la correcta funcionalidad de los programas, ya que influye en la accesibilidad, manipulación y gestión de los datos dentro del código.
En Python, las variables pueden ser locales, globales o no locales, dependiendo de dónde se definen y cómo se accede a ellas.
Variables LocalesLas variables locales son aquellas que se definen dentro de una función y solo son accesibles dentro de esa función. Esto significa que su existencia está limitada al bloque de código donde fueron creadas. Una vez que la función termina su ejecución, las variables locales dejan de existir.
Definición y Acceso de Variables LocalesEn el siguiente ejemplo, la variable x se define dentro de la función ejemplo_local(), por lo que solo puede ser utilizada dentro de esa función:
Código
def ejemplo_local(): x = 10 # Variable local print(x) ejemplo_local() # Imprime 10 # print(x) # Esto causaría un error, ya que x es local
- La variable x es local a la función ejemplo_local().
- Dentro de la función, podemos acceder y modificar x sin problemas.
- Sin embargo, si tratamos de acceder a x fuera de la función, como en el comentario de la línea siguiente (print(x) fuera de la función), Python lanzará un error NameError, porque x no existe fuera del alcance de la función.
Este concepto de alcance local es importante para evitar conflictos entre variables, ya que no se pueden sobrescribir ni alterar desde otras partes del programa.
Características de las Variables Locales- Accesibilidad limitada: Solo son accesibles dentro de la función donde se definieron.
- Duración de vida: Existen únicamente durante la ejecución de la función. Una vez que la función termina, la variable local se destruye.
- Evitan conflictos: Dado que las variables locales no afectan a otras partes del programa, no hay riesgo de que se sobrescriban accidentalmente.
Figura 2: Diagrama de flujo de variable local Fuente: Creación de autor, D. Nicolalde. Figura 2: Diagrama de flujo de variable local Fuente: Creación de autor, D. Nicolalde.
Descripción: Este diagrama muestra cómo las variables locales solo están accesibles dentro de su función respectiva.
Variables GlobalesLas variables globales son aquellas que se definen fuera de todas las funciones, generalmente al principio del programa. A diferencia de las variables locales, las variables globales son accesibles desde cualquier parte del código, incluyendo dentro de las funciones.
Definición y Acceso de Variables GlobalesEn el siguiente ejemplo, la variable x es global, ya que está definida fuera de cualquier función. Esto permite que pueda ser accedida y modificada tanto dentro como fuera de las funciones:
Código
x = 10 # Variable global def ejemplo_global(): print(x) # Accede a la variable global x ejemplo_global() # Imprime 10 print(x) # Imprime 10 fuera de la función
- La variable x se define fuera de cualquier función, por lo que se considera una variable global.
- Dentro de la función ejemplo_global(), podemos acceder a x sin problemas y la función imprime su valor correctamente.
- Además, fuera de la función, podemos seguir accediendo a x, ya que la variable global sigue existiendo en el programa.
Características de las Variables Globales- Accesibilidad global: Son accesibles desde cualquier parte del programa, tanto dentro como fuera de las funciones.
- Duración de vida: Existen durante toda la ejecución del programa, desde el inicio hasta el final.
- Pueden ser modificadas dentro de las funciones: Si se desea modificar una variable global dentro de una función, se debe utilizar la palabra clave global.
Figura 3: Diagrama de flujo de variable global Fuente: Creación de autor, D. Nicolalde. Figura 3: Diagrama de flujo de variable global Fuente: Creación de autor, D. Nicolalde.
Descripción: Este diagrama muestra cómo las variables globales pueden ser accedidas desde cualquier parte del código, incluyendo dentro de funciones.
Modificación de Variables Globales Dentro de una FunciónPara modificar una variable global dentro de una función, es necesario usar la palabra clave global. Esto le dice a Python que la variable que se está utilizando dentro de la función debe referirse a la variable global, no a una variable local.
Código
x = 10 # Variable global def modificar_global(): global x # Indica que queremos modificar la variable global x x = 20 # Cambia el valor de x modificar_global() print(x) # Imprime 20
- La variable x es global y su valor inicial es 10.
- Dentro de la función modificar_global(), usamos la palabra clave global para referirnos a la variable global x.
- La asignación x = 20 cambia el valor de la variable global a 20.
- Al imprimir x después de llamar a la función, veremos que su valor ha cambiado a 20.
Recomendaciones para el Uso de Variables Locales y Globales- Uso preferido de variables locales: Siempre que sea posible, utiliza variables locales para evitar problemas de modificación no deseada de datos en otras partes del programa.
- Evita el uso excesivo de variables globales: El uso de variables globales puede hacer que el programa sea difícil de depurar, ya que las variables pueden ser modificadas en múltiples lugares, lo que puede causar efectos secundarios difíciles de rastrear.
- Uso de global con precaución: Si necesitas modificar una variable global dentro de una función, usa la palabra clave global con cuidado y asegúrate de que la lógica del programa justifique la necesidad de hacerlo.
Ejemplo: Función con Listas y Variables GlobalesCódigo
# Lista global nombres = ["Juan", "Ana", "Luis"] def agregar_nombre(nombre): global nombres nombres.append(nombre) # Agrega un nuevo nombre agregar_nombre("Marta") print(nombres) # Imprime ['Juan', 'Ana', 'Luis', 'Marta']
- Definimos la lista global nombres y la función agregar_nombre para añadir nombres a la lista. Usamos global para modificar la lista.
Figura 4: Diagrama de flujo de modificación de variables globales dentro de funciones Fuente: Creación de autor, D. Nicolalde. Nombre_de_la_figura
Descripción: Este diagrama muestra cómo modificar variables globales dentro de funciones usando la palabra clave global.
Ejemplo: Sistema de Cálculo de Promedios con FuncionesCódigo
# Función para calcular el promedio def calcular_promedio(calificaciones): return sum(calificaciones) / len(calificaciones) # Función para clasificar a los estudiantes def clasificar_estudiante(nombre, calificaciones): promedio = calcular_promedio(calificaciones) if promedio >= 9: estado = "Excelente" elif promedio >= 6: estado = "Aprobado" else: estado = "Reprobado" return nombre, promedio, estado # Procesar varios estudiantes def procesar_estudiantes(): estudiantes = { "Juan": [8, 7, 6, 9], "Ana": [9, 10, 8, 9], "Luis": [5, 4, 6, 4] } for nombre, calificaciones in estudiantes.items(): estudiante, promedio, estado = clasificar_estudiante(nombre, calificaciones) print(f"{estudiante}: Promedio = {promedio:.2f}, Estado = {estado}") procesar_estudiantes()
- calcular_promedio calcula el promedio de las calificaciones.
- clasificar_estudiante determina si el estudiante está "Excelente", "Aprobado" o "Reprobado".
- procesar_estudiantes maneja varios estudiantes y muestra su clasificación.
Figura 5: Diagrama de flujo para el cálculo de promedios Fuente: Creación de autor, D. Nicolalde. Figura 5: Diagrama de flujo para el cálculo de promedios Fuente: Creación de autor, D. Nicolalde.
Descripción: Este diagrama muestra cómo las funciones se conectan para calcular el promedio y clasificar a los estudiantes.
Ejemplo: Sistema de Inventario con Funciones y ArreglosCódigo
# Inventario inicial inventario = [ {"producto": "Camiseta", "cantidad": 10, "precio": 15.5}, {"producto": "Pantalón", "cantidad": 5, "precio": 25.0}, {"producto": "Zapatos", "cantidad": 0, "precio": 40.0} ] # Función para agregar productos def agregar_producto(nombre, cantidad, precio): inventario.append({"producto": nombre, "cantidad": cantidad, "precio": precio}) # Función para mostrar el inventario def mostrar_inventario(): for producto in inventario: print(f"Producto: {producto['producto']}, Cantidad: {producto['cantidad']}, Precio: {producto['precio']}") # Función para vender productos def vender_producto(nombre, cantidad): for producto in inventario: if producto["producto"] == nombre and producto["cantidad"] >= cantidad: producto["cantidad"] -= cantidad print(f"Se vendieron {cantidad} {nombre}(s).") return print(f"No hay suficiente stock de {nombre}.") # Ejemplo de uso mostrar_inventario() agregar_producto("Chaqueta", 3, 35.0) vender_producto("Camiseta", 2) mostrar_inventario()
- El inventario está compuesto por una lista de diccionarios donde cada producto tiene un nombre, cantidad y precio.
- La función agregar_producto añade productos nuevos al inventario.
- mostrar_inventario imprime el inventario completo.
- vender_producto disminuye la cantidad de un producto cuando se vende.
Figura 6: Diagrama de flujo para el manejo del inventario Fuente: Creación de autor, D. Nicolalde. Figura 6: Diagrama de flujo para el manejo del inventario Fuente: Creación de autor, D. Nicolalde.
Aprende más
En el video te explico cómo es que funcionan las variables locales y globales dentro de las funciones ¡Accede aquí!
La tabla 1 resume los aspectos más importantes de las funciones en Python, como su definición, los parámetros que pueden recibir y cómo retornan valores. También se mencionan ejemplos básicos de su uso.
Concepto Descripción Ejemplo de Uso Definición Una función es un bloque de código reutilizable que realiza una tarea específica. def saludar(nombre):
print(f"Hola, {nombre}!")Parámetros Son valores que se pasan a la función cuando es llamada. Se definen entre los paréntesis al crear la función. def sumar(a, b):
return a + bRetorno El valor que la función devuelve después de ejecutar su tarea. Se especifica con la palabra clave return. def multiplicar(a, b):
return a * bFunción con parámetros opcionales Los parámetros pueden tener valores predeterminados si no se pasan al llamar la función. def saludar(nombre="Estudiante"):
print(f"Hola, {nombre}!")Ámbito Local Las variables definidas dentro de la función solo son accesibles dentro de ella. def mostrar_mensaje():
mensaje = "Hola"
print(mensaje)Ámbito Global Las variables definidas fuera de las funciones son accesibles desde cualquier parte del código, incluyendo dentro de las funciones si se usan correctamente. mensaje = "Hola Mundo"
def mostrar_mensaje():
print(mensaje)Tabla 1: Funciones en Python - Definición, Parámetros y Retorno Fuente: Creación de autor, D. Nicolalde. DefiniciónUna función es un bloque de código reutilizable que realiza una tarea específica.
def saludar(nombre):
print(f"Hola, {nombre}!")ParámetrosSon valores que se pasan a la función cuando es llamada. Se definen entre los paréntesis al crear la función.
def sumar(a, b):
return a + bRetornoEl valor que la función devuelve después de ejecutar su tarea. Se especifica con la palabra clave return.
def multiplicar(a, b):
return a * bFunción con parámetros opcionalesLos parámetros pueden tener valores predeterminados si no se pasan al llamar la función.
def saludar(nombre="Estudiante"):
print(f"Hola, {nombre}!")Ámbito LocalLas variables definidas dentro de la función solo son accesibles dentro de ella.
def mostrar_mensaje():
mensaje = "Hola"
print(mensaje)Ámbito GlobalLas variables definidas fuera de las funciones son accesibles desde cualquier parte del código, incluyendo dentro de las funciones si se usan correctamente.
mensaje = "Hola Mundo"
def mostrar_mensaje():
print(mensaje)
La tabla 2 compara las diferencias entre las variables locales y globales en Python, mostrando cómo se definen y cómo se accede a ellas, además de los casos donde se pueden modificar.
Tipo de Variable Descripción Ejemplo de Uso Variables Locales Son variables definidas dentro de una función y solo accesibles dentro de ella. python
def mi_funcion():
x = 10
print(x)
mi_funcion() # Imprime 10Variables Globales Son variables definidas fuera de las funciones y pueden ser accedidas desde cualquier parte del código. x = 20
def mi_funcion():
print(x)
mi_funcion() # Imprime 20Acceso a Variables Locales Solo pueden ser utilizadas dentro de la función donde fueron declaradas. def suma():
x = 5
print(x)
suma() # Accede a x solo dentro de suma()Acceso a Variables Globales Las variables globales pueden ser modificadas dentro de una función si se usa la palabra clave global. x = 10
def modificar():
global x
x = 20
modificar()
print(x) # Imprime 20Modificación de Variables Locales Para cambiar una variable local se asigna un nuevo valor dentro de la función. def mi_funcion():
x = 5
x = x + 2
print(x)
mi_funcion() # Imprime 7Modificación de Variables Globales Si se quiere modificar una variable global dentro de una función, se utiliza global. x = 5
def mi_funcion():
global x
x = 10
mi_funcion()
print(x) # Imprime 10Tabla 2: Alcance de Variables: Locales vs. Globales Fuente: Creación de autor, D. Nicolalde. Variables LocalesSon variables definidas dentro de una función y solo accesibles dentro de ella.
python
def mi_funcion():
x = 10
print(x)
mi_funcion() # Imprime 10Variables GlobalesSon variables definidas fuera de las funciones y pueden ser accedidas desde cualquier parte del código.
x = 20
def mi_funcion():
print(x)
mi_funcion() # Imprime 20Acceso a Variables LocalesSolo pueden ser utilizadas dentro de la función donde fueron declaradas.
def suma():
x = 5
print(x)
suma() # Accede a x solo dentro de suma()Acceso a Variables GlobalesLas variables globales pueden ser modificadas dentro de una función si se usa la palabra clave global.
x = 10
def modificar():
global x
x = 20
modificar()
print(x) # Imprime 20Modificación de Variables LocalesPara cambiar una variable local se asigna un nuevo valor dentro de la función.
def mi_funcion():
x = 5
x = x + 2
print(x)
mi_funcion() # Imprime 7Modificación de Variables GlobalesSi se quiere modificar una variable global dentro de una función, se utiliza global.
x = 5
def mi_funcion():
global x
x = 10
mi_funcion()
print(x) # Imprime 10A lo largo de esta clase, hemos cubierto los conceptos esenciales de funciones, alcance de variables, y arreglos multidimensionales en Python. Vimos cómo definir y utilizar funciones, cómo se pueden manejar las variables locales y globales, y cómo manipular matrices y listas para resolver problemas complejos. Al integrar estas herramientas, los estudiantes podrán desarrollar programas más eficientes, organizados y escalables, lo cual es esencial para resolver problemas de programación de mediana y alta complejidad.
Profundiza más
Este recurso te ayudará a enfatizar sobre Arreglos y funciones ¡Accede aquí!
-
-
-
Actividades
-
Make a submission
-
Make attempts: 1
-
Arreglos y funciones (Parte 1)
-
Make a submission
-
Make attempts: 1