29 - Funciones: llamada a la función con argumentos nombrados

Esta característica de Python nos permite llamar a la función indicando en cualquier orden los parámetros de la misma, pero debemos especificar en la llamada el nombre del parámetro y el valor a enviarle.

Problema 1:

Confeccionar una función que reciba el nombre de un operario, el pago por hora y la cantidad de horas trabajadas. Debe mostrar su sueldo y el nombre. Hacer la llamada de la función mediante argumentos nombrados.

Programa: ejercicio140.py

Ver video

def calcular_sueldo(nombre,costohora,cantidadhoras):
    sueldo=costohora*cantidadhoras
    print(nombre,"trabajo",cantidadhoras,"y cobra un sueldo de",sueldo)


# bloque principal

calcular_sueldo("juan",10,120)
calcular_sueldo(costohora=12,cantidadhoras=40,nombre="ana")
calcular_sueldo(cantidadhoras=90,nombre="luis",costohora=7)

Como podemos ver no hay ningún cambio cuando definimos la función:

def calcular_sueldo(nombre,costohora,cantidadhoras):
    sueldo=costohora*cantidadhoras
    print(nombre,"trabajo",cantidadhoras,"y cobra un sueldo de",sueldo)

Podemos llamarla como ya conocemos indicando los valores directamente:

calcular_sueldo("juan",10,120)

Pero también podemos indicar los datos en cualquier orden pero con la obligación de anteceder el nombre del parámetro:

calcular_sueldo(costohora=12,cantidadhoras=40,nombre="ana")
calcular_sueldo(cantidadhoras=90,nombre="luis",costohora=7)

Importante

Ahora vamos a profundizar la función print que hemos utilizado desde los primeros conceptos.

Como hemos trabajado hasta ahora cada vez que se llama a la función print se muestran todos los datos que le enviamos separados por coma y provoca un salto de línea al final.

Por ejemplo si ejecutamos

print("uno")
print("dos")

En pantalla aparece:

uno
dos

La función print tiene un parámetro llamado end, también hay que tener en cuenta que este parámetro por defecto tiene asignado "\n" que es el salto de línea y es por eso que cada vez que se ejecuta un print se produce un salto de línea.
Podemos indicar al parámetro end otro valor, por ejemplo un guión:

print("uno",end="-")
print("dos")

Ahora el resultado de ejecutar este programa es:

uno-dos

Ahora vemos que al llamar a print pidiendo que imprima "uno" e indicando que en lugar de producir un salto de línea muestre un guión:

print("uno",end="-")

Problema 2:

Cargar una lista de 10 enteros, luego mostrarlos por pantalla a cada elemento separados por una coma.

Programa: ejercicio141.py

Ver video

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


def imprimir(lista):
    for x in range(len(lista)):
        print(lista[x], end=",")


# bloque principal

lista=cargar()
imprimir(lista)

Lo nuevo en este problema aparece cuando imprimimos los elementos de la lista, como necesitamos que se muestren todos en la misma línea y separados por coma cargamos en el parámetro end la cadena ",":

def imprimir(lista):
    for x in range(len(lista)):
        print(lista[x], end=",")

Si no indicamos el parámetro end luego aparecen todos los datos en líneas distintas en pantalla.

Otro argumento nombrado importante para la función print de Python se llama "sep", este indica que debe mostrarse entre cada dato a mostrar en la misma llamada print.
Por ejemplo si ejecutamos:

print("uno","dos","tres")

Luego el resultado es la impresión de los string en la misma línea y separados por un caracter en blanco (esto debido a que el parámetro sep tiene un valor por defecto de un espacio en blanco (sep=" "):

uno dos tres

Entonces podemos asignar al parámetro sep el valor que necesitemos, por ejemplo una coma:

print("uno","dos","tres",sep=",")

Luego el resultado en pantalla será:

uno,dos,tres

Problema propuesto

  • Elaborar una función que muestre la tabla de multiplicar del valor que le enviemos como parámetro. Definir un segundo parámetro llamado termino que por defecto almacene el valor 10. Se deben mostrar tantos términos de la tabla de multiplicar como lo indica el segundo parámetro.
    Llamar a la función desde el bloque principal de nuestro programa con argumentos nombrados.

    Ver video

Solución
ejercicio142.py

def tabla(numero, terminos=10):
    for x in range(terminos):
        va=x*numero
        print(va,",",sep="",end="")
    print()
    

# bloque principal

print("Tabla del 3")
tabla(3)
print("Tabla del 3 con 5 terminos")
tabla(3,5)
print("Tabla del 3 con 20 terminos")
tabla(terminos=20,numero=3)