Soluciones de ejercicios de Python con *args y **kwargs

Soluciones de ejercicios de Python con *args y **kwargs

Aquí tienes las soluciones de los ejercicios de Python con *args y **kwargs del día 22 que encontrarás en esta página.

  1. Una posible solución es esta. Se le añade *args en la zona de parámetros para poder usarlo dentro de la función y si le pasamos tres argumentos.

Puede que no entiendas porque estos argumentos en el print() llevan posiciones como si fuera un elemento iterable (estilo lista o tupla). En la teórica, he dicho que args, devuelve una tupla, por lo tanto, lo que hacemos, para que lo entiendas, es crear una tupla en la zona de parámetros y la vamos rellenando con posiciones de tupla, de modo, que podemos indicar cada parámetro dentro de la función.

def sumar(*args):
    print(args[0] + args[1] + args[2])

sumar(10, 7, 40)
  1. Pues sencillamente, tienes que aplicar lo mismo que hay en el ejercicio anterior:
def restar(*args):
    print(args[0] - args[1])

restar(100,20)
  1. El error, está en declarar *args antes que los otros dos parámetros (x, y). El orden correcto, es este:
def sumar(x, y,*args):
    print(args[0] + args [1] + args[2] + x + y)
    
sumar(10,20,30,40,50)
  1. Una posible solución es esta:
def muestra_datos(**kwargs):
    claves = tuple(kwargs.keys())
    valores = tuple(kwargs.values())
    print(f"El {claves[0]} es {valores[0]}, sus {claves[1]} son {valores[1]} y tiene {valores[2]} años de {claves[2]}." )
    
usuario1 = {"nombre":"Javier", "apellidos":"Gómez de la barca", "edad":"27"}

usuario2 = {"nombre":"Andrea", "apellidos":"Pedraza Peña", "edad":"31"}

muestra_datos(**usuario1)
muestra_datos(**usuario2)

Resultado en la consola

El nombre es Javier, sus apellidos son Gómez de la barca y tiene 27 años de edad.
El nombre es Andrea, sus apellidos son Pedraza Peña y tiene 31 años de edad.

Lo primero, que hay en la función, es **kwargs con lo que le podemos pasar un diccionario.

Creo dos variables para obtener en ellas los valores y claves de los diccionarios. A estos, los transformo a tupla con tuple(), ya que keys() y values() devuelven un tipo especial de diccionario dict_keys y dict_values.

Fíjate en las líneas 2 y 3 de este código. Estoy obteniendo el tipo que devuelven:

def muestra_datos(**kwargs):
    claves = type(kwargs.keys())
    valores = type(kwargs.values())
    
    print(claves)
    print(valores)
    
usuario1 = {"nombre":"Javier", "apellidos":"Gómez de la barca", "edad":"27"}

usuario2 = {"nombre":"Andrea", "apellidos":"Pedraza Peña", "edad":"31"}

muestra_datos(**usuario1)

Resultado en la consola

<class 'dict_keys'>
<class 'dict_values'>

Estos elementos son iterables como puedes ver en el ejemplo siguiente (fíjate en los bucles), pero no podemos acceder directamente a una posición del índice y utilizarla como una lista o tupla (hay formas, pero no quiero complicar más la cosa).

def muestra_datos(**kwargs):
    claves = kwargs.keys()
    valores = kwargs.values()
    
    for clave in claves:
        print(clave)
        
    for valor in valores:
        print(valor)
    
usuario1 = {"nombre":"Javier", "apellidos":"Gómez de la barca", "edad":"27"}

usuario2 = {"nombre":"Andrea", "apellidos":"Pedraza Peña", "edad":"31"}

muestra_datos(**usuario1)

Continuemos con el código de la resolución. Voy accediendo en el print() a las posiciones de claves o valores, según las quiero poner en la frase.

Si le pasamos ahora en la llamada, cualquier diccionario con las mismas características para las que está hecho el método, funcionará con los datos de cada uno.

Esto no es demasiado útil en cuanto a uso, pero sí que lo es para que vayas practicando formas de trabajar con **kwargs y diccionarios.

def muestra_datos(**kwargs):
    claves = tuple(kwargs.keys())
    valores = tuple(kwargs.values())
    print(f"El {claves[0]} es {valores[0]}, sus {claves[1]} son {valores[1]} y tiene {valores[2]} años de {claves[2]}." )
    
usuario1 = {"nombre":"Javier", "apellidos":"Gómez de la barca", "edad":"27"}

usuario2 = {"nombre":"Andrea", "apellidos":"Pedraza Peña", "edad":"31"}

muestra_datos(**usuario1)
muestra_datos(**usuario2)

Dejo los ejercicios aquí. A partir de ahora, cuando usemos *args y **kwargs en el curso, será casi siempre para hacer cosas más prácticas.

2 comentarios en «0»

  1. Lo hice de esta forma no está tan buena como la de la clase pero funciona
    def muestra_datos(**kwargs):
    lista_claves=[]
    lista_valores= []
    for i in kwargs.keys():
    lista_claves.append(i)

    for i in kwargs.values():
    lista_valores.append(i)

    print(f’El {lista_claves[0]} es {lista_valores[0]}, sus {lista_claves[1]} son {lista_valores[1]} y tiene {lista_valores[2]} años de {lista_claves[2]}’ )

    diccionario= dict( nombre=’Javier’, apellidos=’Gómez de la Barcas’, edad=’27’)

    diccionario2 = dict(nombre=’Anna’, apellidos=’Tambasco Baldomir’, edad=’54’)

    muestra_datos(**diccionario)
    muestra_datos(**diccionario2)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

curso de Python Entrada anterior El uso de *args y **kwargs en Python
curso de Python Entrada siguiente Ejercicios de Python con *args y **kwargs