Anterior

15 - Contacto con tuplas y diccionarios

Por: Nacho Cabanes
Actualizado: 15-08-2020 16:57
Tiempo de lectura estimado: 6 min.

 

Versión en video (2:47 min):

Fund.Prog con Python 2020

15 - Contacto con tuplas y diccionarios

Vamos a tener un contacto muy breve con un par de conceptos un poco menos básicos, pero que son habituales en cada vez más lenguajes.

Vamos a hablar de tuplas y vamos a hablar de diccionarios, apenas un poco de cada uno.

Para entender qué son las tuplas, podemos partir de este ejemplo que habíamos hecho de listas y decir qué ocurre si yo cambio los corchetes de la declaración de la lista por paréntesis:

n1 = 5
n2 = 6
n3 = 7
n4 = 8
n5 = 9
datos = ( 5, 6, 7, 8, 9)
datos.append(15)
datos.append(20)
print("Datos 0 y 2")
print( datos[0] )
print( datos[2] )

print("Todos los datos")
for i in range(0, len(datos)):
  print( datos[ i] )

print("Todos los datos al reves")
for i in range(5, -1, -1):
  print( datos[ i] )

La idea está en que se está convirtiendo en un tipo de datos distinto, un tipo de datos llamado tupla y que tiene una diferencia con relación a las listas, que es que son inmutables, no se pueden cambiar. Por eso, si yo intento lanzar este programa. Me dice que no es válido eso de añadir el 15.

Traceback (most recent call last):
  File "main.py", line 7, in <module>
    datos.append(15)
AttributeError: 'tuple' object has no attribute 'append'

Puedo dejar estar dos líneas comentadas: la que añadía el 15 y el 20, y volver a lanzar. Y veremos que, en este caso sí que se comporta correctamente, salvando el detalle de que el segundo "for" lo habíamos empezado más allá de donde debíamos, realmente esto tiene cinco datos.

Datos 0 y 2
5
7
Todos los datos
5
6
7
8
9
Todos los datos al reves
Traceback (most recent call last):
  File "main.py", line 19, in <module>
    print( datos[ i] )
IndexError: tuple index out of range

El último sería el 4.

n1 = 5
n2 = 6
n3 = 7
n4 = 8
n5 = 9
datos = ( 5, 6, 7, 8, 9)
# datos.append(15)
# datos.append(20)
print("Datos 0 y 2")
print( datos[0] )
print( datos[2] )

print("Todos los datos")
for i in range(0, len(datos)):
  print( datos[ i] )

print("Todos los datos al reves")
for i in range(4, -1, -1):
  print( datos[ i] )

Volvemos a lanzar ahora...

Datos 0 y 2
5
7
Todos los datos
5
6
7
8
9
Todos los datos al reves
9
8
7
6
5

Ahora sí, la idea está en que una tupla se escribe con paréntesis en vez de corchetes y es inmutable, no se puede cambiar. ¿Para qué algo que no se pueda cambiar? Pues básicamente por velocidad: cada vez más lenguajes modernos permiten variantes de ciertos tipos de datos que no son modificables y a cambio son más rápidas, con lo cual, si sólo vamos a leer datos, sería preferible una tupla en vez de una lista.

¿Y qué es eso de los diccionarios?

Pues son datos a los que se accede, no por posición, sino por clave.

En Python se definen entre llaves y deberemos indicar cada uno de los campos y su valor. Por ejemplo, yo puedo tener un libro que su autor sea "Stephen King", su título sea "It", sus páginas sean 1100... ves que tengo unos datos que son texto, otros que son números...

libro1 = {
    "autor": "Stephen King", 
    "titulo": "It", 
    "paginas": 1100
}

Puedo mostrar todo ese objeto de tipo diccionario.

print(libro1)

O bien puedo acceder a cada campo, pero los campos, en vez de poner del libro, el campo 0 y el campo 1 y el campo 2, pondré, del libro. el campo "autor".

print( libro1["autor"] )

Entonces, en los casos en que nos interesa más acceder por nombre que por posición, un diccionario será la elección que deberemos hacer.

Vamos a comprobar que funciona...

libro1 = {
    "autor": "Stephen King", 
    "titulo": "It", 
    "paginas": 1100
}
print(libro1)
print( libro1["autor"] )

Si decimos que nos muestre todo, aparece tal como lo hemos introducido entre llaves, pero podemos acceder sólo al autor de ese libro, con lo cual aparece solo "Stephen King".

{'autor': 'Stephen King', 'titulo': 'It', 'paginas': 1100}
Stephen King

Ejercicio propuesto 15.1. Pide al usuario un número entero del 1 al 7 y escribe el nombre del día de la semana corres-pondiente (1=lunes, 7=domingo), usando una tupla.

Ejercicio propuesto 15.2. Pide al usuario un número entero del 1 al 12 y escribe el nombre del mes correspondiente (1=enero, 12=diciembre), usando una tupla.

Ejercicio propuesto 15.3. Pide al usuario el nombre de un mes y responde cuántos días tiene (suponiendo un año no bisiesto), usando un diccionario.

2248 visitas desde el 15-08-2020

Anterior