Saltar la navegación

3.2. Elementos de la trama

Rétor diceAcabas de ver estructuras que te ayudan a crear el cuerpo de un programa, estructuras que modifican el comportamiento del mismo según se cumplan una serie de condiciones. A continuación vas a descubrir que necesitas estas estructuras, sobre todo los bucles, para recorrer los elementos que forman una serie de variables que no te resultan del todo desconocidas, ¿recuerdas las listas y las tuplas? Ahora vamos a trabajar con ellas. Además, también has descubierto que hay trozos de código que pueden ser útiles para reutilizarlos: aprenderás cómo tner que escribirlos una sola vez gracias a las funciones. ¡Adelante!

1. Tal para cual

¿Lista o tupla?Efectivamente: tal para cual, porque las estructuras de lista o tupla tienen cada una sus aplicaciones más adecuadas.
Recordemos que ambas estructuras pueden almacenar un conjunto o grupo de valores de distintos tipos. Al contrario que el resto de variables que solo pueden almacenar un valor o una cadena de caracteres, las listas o las tuplas pueden almacenar varios de ellos. La diferencia entre ambas es que las listas pueden modificar alguno de sus elementos, borrarlos, añadirlos, etc. mientras que las tuplas no permiten modificar elementos individualmente, deben ser inicializadas o cambiadas al completo de una sola vez.
Ahora que recordamos y tenemos en cuenta estos aspectos de las estructuras de listas y tuplas, trabajad en grupos para debatir y consensuar: ¿Cuál de las dos sería más adecuada para cada una de estas aplicaciones?

  • Almacenar una lista de usuarios, que van dándose de alta en una aplicación, y sus contraseñas.
  • Almacenar los porcentajes con los que se ponderarán los distintos elementos que formarán la nota de un curso.
  • Introducir cada tres minutos las coordenadas de un objeto en movimiento para controlar su ruta.
  • Tener un registro de valores con los que comparar el nivel de humo de una estancia para advertir a partir de qué valor debe saltar la alarma.

Compara las estructuras

El uso de comparaciones es una buena estrategia para encontrar similitudes y diferencias cuando trabajamos con dos programas diferentes o realizamos tareas diferentes, como es el caso de conocer las listas y las tuplas:

Tupla Lista
Crear

Formas de crearlas:

tupla = ()
edades=('Mario',3,'Pepa',5)

Si queremos crear una tupla de un solo elemento debe lleva una coma:

tupla = (5,) #Es una tupla
c = (5) #Es un número

Formas de crearlas:

lista = []
factura=['leche','azúcar',1.2,1.5]

Si queremos iniciar una lista con el mismo valor varias veces se puede utilizar el símbolo *

relleno = [0]*3 #Rellena con 3 ceros.
Acceder a elemento

Se indica el índice, comenzando desde 0, entre corchetes:

>>>edades [0]
'Mario'
>>>factura[2]
1.2

Si el índice está fuera del límite,se obtiene una excepción (error):

>>> edades[4]
Traceback (most recent call last):
File "<pyshell#3>", line 1, in
edades[2]
IndexError: tuple index out of range
Modificar

No se puede cambiar una posición. Habría que asignar la tupla completa:

edades=('Juan',6,'Pepa',5)

Se asigna a la posición:

>>> factura [1] = 'pan'
>>> factura
['leche', 'pan', 1.2, 1.5]
Recorrer

Se pueden recorrer con un bucle for usando la función len que nos da el número de elementos de la lista o tupla (longitud):

for i in range(len(factura)):
print(factura[i])

Pero Python puede controlar automáticamente la longitud y podríamos hacer simplemente (y mucho más fácil):

for item in factura:
print(item)
Convertir

Podemos convertir una tupla en lista:

edades=list(edades)

Podemos convertir una lista en tupla:

factura=tuple(factura)

Slicing

(cortar)

Se pueden obtener trozos de una lista o tupla. En estos casos se indican dos índices: el índice del primer objeto a obtener y el del primer objeto a ignorar. Veamos:

>>> factura[1:3] #Vemos que el elemento de índice 3 ya no se toma.
('pan', 1.2)
>>> factura [:4]#Si no se indica el primer número toma desde el inicio.
('leche', 'pan', 1.2, 1.5)
>>> factura[1:3]
('pan', 1.2)
>>> factura [:3]
('leche', 'pan', 1.2)
>>> factura [0:len(factura)]#Para tomarlos todos se da la longitud total.
('leche', 'pan', 1.2, 1.5)
>>> factura [1:-1]#Un número negativo indica que empieza a contar por el final.
('pan', 1.2)
>>> factura [-1:]#Saca el último elemento.
(1.5,)

2. Haciendo funcionar las listas

A continuación te proponemos diferentes trozos de código que usan listas y funciones de Python para trabajar con ellas. ¡Averigua qué hace cada una!

>>> a = [1, 3, 5, 7]
>>> a.append(9)
>>> a
[1, 3, 5, 7, 9]

>>> b = ["Hola", "Python"]
>>> b.insert(1, "Recursos")
>>> b
['Hola', 'Recursos', 'Python']

>>> a = ["Perro", "Gato", "Caballo"]
>>> a.remove("Gato")
>>> a
['Perro', 'Caballo']

>>> a = ["Manzana", "Pera", "Kiwi"]
>>> del a[1]
>>> a
['Manzana', 'Kiwi']

>>> a = (1, 2, 3, 4)
>>> 3 in a
True

>>> a = [1, 2, 3, 4]
>>> a.extend([5, 6, 7, 8, 9])
>>> a
[1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> a = ["Python", "Java","PHP"]
>>> eliminado = a.pop(1)
>>> eliminado
'Java'
>>> a
['Python', 'PHP']

>>> a = ["Python", "Java", "PHP"]
>>> a.index("PHP")
2

>>> a = ["Perro", "Gato", "Perro", "Loro", "Perro"]
>>> a.count("Perro")
3

>>>a = [4, 7, 5, 6, 2, 1, 3]
>>> a.sort()
>>> a
[1, 2, 3, 4, 5, 6, 7]

>>> a = [1, 2, 3, 4, 5]
>>> a.reverse()
>>> a
[5, 4, 3, 2, 1]

Habilitar JavaScript

3. ¿Y para las tuplas?

De las funciones que acabamos de ver, de aplicación en las listas, ¿cuáles podemos utilizar también para las tuplas? Descúbrelo aquí:

4. Evolucionamos las estructuras

Evolución de la estructuraVas a descubrir cómo se pueden hacer evolucionar a las estructuras. Investigad en grupo: ¿Qué hace la función enumerate?

Buscad información en la web sobre esta función y probad varios ejemplos en el IDLE. Después, ponedlos en común mostrándolos al resto del grupo clase.

¿A qué se parece?

Como seguramente has averiguado, enumerate crea un objeto que es un conjunto de tuplas o de listas asignando un índice a cada elemento. Es comparable a una tabla o a una matriz de 2 columnas que incluye el número de fila.

5. Generación de conclusiones

Para conseguir alcanzar a una meta es importante que seas un buen o buena estratega. Es decir, tener métodos, técnicas, “trucos” para llegar antes o de forma más fácil donde tú quieres.
Ahora te voy a enseñar una estrategia, ¡Aprovéchala para alcanzar tu reto!
El nombre de la estrategia es generación de conclusiones. Esta estrategia te ayudará a conocer los pasos que puedes seguir para poder redactar las conclusiones, cómo hacer un resumen y trucos para elaborar una buena conclusión.
Podrás encontrar todo lo que necesitas sobre esta estrategia en el siguiente enlace a la guía de la competencia de aprender a aprender.
Tómate el tiempo que necesites y recuerda que siempre puedes preguntarle al docente o a algún compañero o compañera cuando no entiendas algo.
 
¡Ánimo, seguro que lo haces genial!

6. Saltamos al espacio bidimensional

Sala de cineY seguimos evolucionando: es posible crear estructuras de dos o más dimensiones, aunque en nuestras aplicaciones no quedaremos en dos. Ya has visto una estructura básica de dos dimensiones con la función enumerate, pero ahora vamos a trabajar con ellas propocionándoles los valores que nos sean necesarios para nuestro programa. Tras haber conocido a fondo las listas y las tuplas, debes reflexionar y sacar tus propias conclusiones sobre qué tipo de estructura de datos deberás utilizar para representar la sala del cine, el patio de butacas. Expresa tus conclusiones mediante el lenguaje de programación utilizando la sintaxis correcta.

Ya para ello, vas a programar un ejemplo relacionado con nuestro reto: simulación de una sala de cine. Vamos a comprobar si quedan asientos libres para nuestra selección de butacas y, en tal caso, reservarlos. ¡Manos a la obra!

Primer paso: Crea la sala

Comparación sala-matrizUna sala de cine puedes asemejarla a una variable bidimensional (lo que conoces como matriz en matemáticas). Para nuestro caso consideraremos una sala de cine de 6 filas y 10 butacas en cada fila. Es decir, será una matriz de dimensión 6x10.

Lo primero que tendrás que hacer es iniciarla. Para ello, ten en cuenta las siguientes recomendaciones:

  1. A la hora de elegir nuestro asiento, tendremos que saber si una butaca está o no ocupada. Así, estos dos posibles estados son los que diferencian si una butaca está disponible. ¿Has trabajado previamente con "dos estados" en programación? ¡Claro! Son los valores 0-1. Asigna cada uno de elos a un estado y tendrás la visualización de la ocupación de la sala.
  2. Recuerda la orden vista en el apartado anterior, aunque en Python, para iniciar una estructura o array bidimensional (modificada ahora para varias filas) se usa un bucle for:
    matriz = [[0]* columnas for i in range(filas)]
  3. Para probar tu código, tras inicializar la matriz con ceros no olvides poner algún 1 para que la matriz que representa la sala tenga asientos libres y asientos reservados. Así podrás comprobar todos los casos posibles a la hora de probar el funcionamiento de tu programa.

Segundo paso: muestra la sala

Sala con ceros y unosPara que el usuario sepa qué sitios puede solicitar debe conocer el estado de la sala: qué sitios están libres y qué sitios están ya reservados. ¡Muéstraselo por pantalla!

De nuevo, ten en cuenta las recomendaciones:

  1. Para recorrer un matriz o estructura bidimensional se utilizan en programación dos bucles for: uno externo (número de filas) para ir cambiando la fila y otro interno (número de columnas) que trabajará sobre cada elemento de la fila concreta en la que te encuentres, según el valor del índice del bucle externo. (Recuerda que los índices en las listas y tuplas siempre empiezan por el elemento 0).
  2. Para que una fila quede debajo de otra y la sala se muestre de la forma más real posible, debes utilizar el carácter de fin de línea al término de cada fila.

Tercer paso: pide los datos

Pedir datos al usuarioAhora deberás pedir al usuario la fila, el número de butacas que desea y el número de la primera de ellas. Debes comprobar si están libres y si no están libres, voler a pedir: fila, cuántas butacas y número de la primera butaca. Hasta que sea posible la reserva.

¿Necesitas pistas?

  1. Pide primero al usuario qué butaca quiere y en qué fila está: con la estructura bidimensional podrás comprobar si está libre o no.
  2. Reutilización de código: ¿Recuerdas el código de la sección anterior que explicaba el bucle FOR? Lo utilizábamos para comprobar si había suficientes butacas libres, según el número que se desea reservar. ¡Reutilízalo aquí! La reutilización de código es fundamental en programación.
  3. Deberás utilizar un bucle while controlado por una variable que cambie de valor cuando la reserva sea posible y permitir entonces salir del bucle.

Paso cuarto: Haz la reserva efectiva

Reserva hechaFinalmente, cambia los valores de las butacas de la sala para que esos asientos que estaban libres queden ahora reservados.

Piensa en la distribución de la sala como en una matriz: tu entrada llevará una fila y una butaca asignadas: ¡ahí tienes los números de fila y columna que debes cambiar! Y ten en cuenta el número de asientos consecutivos que reservó el cliente, estarán almacenados en la variable que utilizaste para rcoger dicho valor.

En matemática, una matriz es un arreglo bidimensional de números.

¿Funciona?

No olvides probar tu programa en tu terminal IDLE. Si tienes problemas de funcionamiento, pide siempre ayuda. En programación el desarrollo tiene a ser colaborativo ya que ¡toda ayuda es poca!:

¿Cuánto saben tus compañeros o compañeras?

En esta actividad grupal te proponemos que intentes darte cuenta de todo lo que tu equipo sabe sobre este tema. Cuando trabajamos en grupo aprendemos también en equipo. Hay compañeros que recuerdan muchas cosas, otras que hablan muy bien, otros que son muy habilidosos con las manos o con los pies, otras dibujan estupendamente… 

Todos tenemos superpoderes para resolver las actividades, pero cuando los unimos, aprendemos juntos y somos capaces de resolver cualquier desafío. Por ello es importante que en tu equipo sigáis estos consejos: 

  • Todo lo que una persona sabe lo comparte con los demás.
  • Colaboramos en las tareas para que el equipo funcione.
  • Valoramos los superpoderes de cada persona.
  • Respetamos lo que cada persona ofrece al equipo.