31 - Estructura de datos tipo Tupla

Hemos desarrollado gran cantidad de algoritmos empleando tipos de datos simples como enteros, flotantes, cadenas de caracteres y estructuras de datos tipo lista.

Vamos a ver otra estructura de datos llamada Tupla.

Una tupla permite almacenar una colección de datos no necesariamente del mismo tipo. Los datos de la tupla son inmutables a diferencia de las listas que son mutables.

Una vez inicializada la tupla no podemos agregar, borrar o modificar sus elementos.

La sintaxis para definir una tupla es indicar entre paréntesis sus valores:

Problema 1:

Definir varias tuplas e imprimir sus elementos.

Programa: ejercicio146.py

Ver video

tupla=(1, 2, 3)
fecha=(25, "Diciembre", 2016)
punto=(10, 2)
persona=("Rodriguez", "Pablo", 43)
print(tupla)
print(fecha)
print(punto)
print(persona)

definicion de tuplas en python

Como vemos el lenguaje Python diferencia una tupla de una lista en el momento que la definimos:

tupla=(1, 2, 3)
fecha=(25, "Diciembre", 2016)
punto=(10, 2)
persona=("Rodriguez", "Pablo", 43)

Utilizamos paréntesis para agrupar los distintos elementos de la tupla.

Podemos acceder a los elementos de una tupla en forma similar a una lista por medio de un subíndice:

print(punto[0]) # primer elemento de la tupla
print(punto[1]) # segundo elemento de la tupla

Es muy IMPORTANTE tener en cuenta que los elementos de la tupla son inmutables, es incorrecto tratar de hacer esta asignación a un elemento de la tupla:

punto[0]=70

Nos genera el siguiente error:

Traceback (most recent call last):
  File "C:/programaspython/ejercicio146.py", line 11, in 
    punto[0]=70
TypeError: 'tuple' object does not support item assignment

Utilizamos una tupla para agrupar datos que por su naturaleza están relacionados y que no serán modificados durante la ejecución del programa.

Problema 2:

Desarrollar una función que solicite la carga del dia, mes y año y almacene dichos datos en una tupla que luego debe retornar. La segunda función a implementar debe recibir una tupla con la fecha y mostrarla por pantalla.

Programa: ejercicio147.py

Ver video

def cargar_fecha():
    dd=int(input("Ingrese numero de dia:"))
    mm=int(input("Ingrese numero de mes:"))
    aa=int(input("Ingrese numero de año:"))
    return (dd,mm,aa)


def imprimir_fecha(fecha):
    print(fecha[0],fecha[1],fecha[2],sep="/")


# bloque principal

fecha=cargar_fecha()
imprimir_fecha(fecha)

definicion de tuplas en python

En la función cargar_fecha cargamos tres enteros por teclado y procedemos a crear una tupla indicando entre paréntesis los nombres de las tres variables y procedemos a retornarla:

def cargar_fecha():
    dd=int(input("Ingrese numero de dia:"))
    mm=int(input("Ingrese numero de mes:"))
    aa=int(input("Ingrese numero de año:"))
    return (dd,mm,aa)

En el bloque principal llamamos a la función cargar_fecha y el valor devuelto se almacena en la variable fecha (recordemos que la función devuelve una tupla):

fecha=cargar_fecha()

Definimos una función que recibe la tupla y procede a mostrar el contenido separado por el caracter "/":

def imprimir_fecha(fecha):
    print(fecha[0],fecha[1],fecha[2],sep="/")

Conversión de tuplas a listas y viceversa.

Otra herramienta que nos proporciona Python es la conversión de tuplas a listas y viceversa mediante las funciones:

list(parametro de tipo tupla)
tuple(parametro de tipo lista)

Problema 3:

Definir una tupla con tres valores enteros. Convertir el contenido de la tupla a tipo lista. Modificar la lista y luego convertir la lista en tupla.

Programa: ejercicio148.py

Ver video

fechatupla1=(25, 12, 2016)
print("Imprimimos la primer tupla")
print(fechatupla1)
fechalista=list(fechatupla1)
print("Imprimimos la lista que se le copio la tupla anterior")
print(fechalista)
fechalista[0]=31
print("Imprimimos la lista ya modificada")
print(fechalista)
fechatupla2=tuple(fechalista)
print("Imprimimos la segunda tupla que se le copio la lista")
print(fechatupla2)

convertir tuplas a listas y listas a tuplas en python

Empaquetado y desempaquetado de tuplas.

Podemos generar una tupla asignando a una variable un conjunto de variables o valores separados por coma:

x=10
y=30
punto=x,y
print(punto)

tenemos dos variables enteras x e y. Luego se genera una tupla llamada punto con dos elementos.

fecha=(25, "diciembre", 2016)
print(fecha)
dd,mm,aa=fecha
print("Dia",dd)
print("Mes",mm)
print("Año",aa)

El desempaquetado de la tupla "fecha" se produce cuando definimos tres variables separadas por coma y le asignamos una tupla:

dd,mm,aa=fecha

Es importante tener en cuenta de definir el mismo número de variables que la cantidad de elementos de la tupla.

Problemas propuestos

  • Confeccionar un programa con las siguientes funciones:
    1)Cargar una lista de 5 enteros.
    2)Retornar el mayor y menor valor de la lista mediante una tupla.
    Desempaquetar la tupla en el bloque principal y mostrar el mayor y menor.

    Ver video

  • Confeccionar un programa con las siguientes funciones:
    1)Cargar el nombre de un empleado y su sueldo. Retornar una tupla con dichos valores
    2)Una función que reciba como parámetro dos tuplas con los nombres y sueldos de empleados y muestre el nombre del empleado con sueldo mayor.
    En el bloque principal del programa llamar dos veces a la función de carga y seguidamente llamar a la función que muestra el nombre de empleado con sueldo mayor.
    # bloque principal
    
    empleado1=cargar_empleado()
    empleado2=cargar_empleado()
    mayor_sueldo(empleado1,empleado2)
    

    Ver video

Solución
ejercicio149.py

def cargar():
    lista=[]
    for x in range(5):
        valor=int(input("Ingrese valor"))
        lista.append(valor)
    return lista


def retornar_mayormenor(lista):
    may=lista[0]
    men=lista[0]
    for x in range(1,len(lista)):
        if lista[x]>may:
            may=lista[x]
        else:
            if lista[x]<men:
                men=lista[x]
    return (may,men)


# bloque principal

lista=cargar()
mayor,menor=retornar_mayormenor(lista)
print("Mayor valor de la lista:",mayor)
print("Menor valor de la lists:",menor)




ejercicio150.py

def cargar_empleado():
    nombre=input("Ingrese el nombre del empleado:")
    sueldo=float(input("Ingrese su sueldo:"))
    return (nombre,sueldo)


def mayor_sueldo(empleado1,empleado2):
    if empleado1[1]>empleado2[1]:
        print(empleado1[0],"tiene mayor sueldo")
    else:
        print(empleado2[0],"tiene mayor sueldo")
        

# bloque principal

empleado1=cargar_empleado()
empleado2=cargar_empleado()
mayor_sueldo(empleado1,empleado2)