martes, 10 de septiembre de 2019

Programación en Python - Funciones

Con este artículo seguimos avanzando en la construcción del Curso de Programación en Python. Hasta los momentos hemos estudiado las estructuras más básicas que se pueden usar en Python: Variable, listas, tuplas, diccionarios, sentencias de control de flujo y de repetición, las cuales, sin embargo, nos han permitido crear programas completos y funcionales. Mas, lo visto hasta ahora esta muy lejos de ser lo mejor de los lenguajes de programación, aun quedan muchas cosas interesantes en python que nos permitirán elaborar aplicaciones más complejas. El tema que estudiaremos hoy son las funciones.

FUNCIONES

Una buena práctica en la programación es dividir el programa en partes, ya que nos permite reutilizar un segmento de código en diferentes partes del programa, pues esto se puede lograr gracias a las funciones. Supongamos que deseamos realizar una operación matemática, por ejemplo la resolvente, en diferentes partes de un programa; una opción es repetir el código la veces que sean necesario dentro del programa, pero la mejor es separar en una función esas instrucciones y llamar a la función cuando se requiera ejecutar dicho código.

Como se comentó anteriormente un función es un fragmento de código con un nombre asociado que realiza una serie de tareas y devuelve un valor. En otros lenguaje también se habla de procedimiento para algo similar que no devuelven valor. Pues en python no hay procedimientos, pero se puede emular al devolver un None (Nada).

La forma de declarar un función en python es la siguiente:

def mi_primera_funcion(dato1, dato2):
    print(dato1)
    print(dato2)

Lo que define una función es la palabra def, posteriormente, el nombre del función mi_primera_funcion y luego, entre paréntesis y separados, los argumentos dato1, dato2 que se pasan a la función. Debajo esto e indexado las instrucciones que se ejecutarán al llamar la función. En este caso imprimir el dato1 y dato2.

Lo que hemos hecho con lo anterior es definir la función. Para hacer uso de ella es necesario llamarla. Esto se logra colocando el nombre de la función y pasándole los datos correspondiente a los argumentos:

mi_primera_funcion("Tratado Tecnólogico", 3)

Al invocar esta función se ejecutará el código interno la cual consiste en imprimir lo que corresponde al dato1 (el string Tratado Tecnológico) y el dato2 (el número 3). Como nos podemos dar cuenta la asociación de argumento con el valor es de izquierda a derecha, es decir el argumento dato1 esta asociado al string y el dato2 al número.

Sin embargo también es posible modificar el orden de los parámetros si indicamos el nombre del parámetro al que asociar el valor a la hora de llamar a la función:

mi_primera_funcion(dato2 = 3, dato1 = "Tratado Tecnólogico")

Es importante que la cantidad de datos a pasar a la función coincida con la cantidad de argumentos que la función puede recibir. En este caso son dos argumentos y se pasan dos valores. Si se intentase pasar uno o más del permitido se obtendría un error.

También es posible, no obstante, definir funciones con un número variable de argumentos, o bien asignar valores por defecto a los parámetros para el caso de que no se indique ningún valor para ese parámetro al llamar a la función.

Los valores por defecto para los parámetros se definen situando un signo igual después del nombre del parámetro y a continuación el valor por defecto:

def mi_primera_funcion(dato1, dato2 = 4):
    print(dato1)
    print(dato2)

En la función anterior si le pasamos un solo dato no ocurre el error ya que el argumento dato2 tiene como valor por defecto 4. Por ejemplo:

mi_primera_funcion("Tratado Tecnólogico")

Si se le pase el valor correspondiente será ese el que utilice. Para definir funciones con un número variable de argumentos colocamos un último parámetro para la función cuyo nombre debe precederse de un signo * :

def varios_arg(dato1, dato2, *arg):
    print(dato1)
    print(dato2)
    for val in arg:
        print (val)

Esta sintaxis funciona ya que crea una tupla (en este caso de nombre arg) en la que se almacenan los valores de todos los parámetros extra pasados como argumento. Una forma de probar esto es llamando a la función pasando valores extra como parámetros:

varios_arg(1, "hola")
varios_arg(1, "hola", 3)
varios_arg(1, "hola", 3, "mundo")

Para la primera llamada, varios_arg(1, "hola") , la tupla otros estaría vacía dado que no se han pasado más parámetros que los dos definidos por defecto, por lo tanto no se imprimiría nada. extra En la segunda llamada arg valdría (3, ) , y en la tercera (3, "mundo") .

También se puede preceder el nombre del último parámetro con ** , en cuyo caso en lugar de una tupla se utilizaría un diccionario. Las claves de este diccionario serían los nombres de los parámetros indicados al llamar a la función y los valores del diccionario, los valores asociados a estos parámetros. Veamos un ejemplo de ello:

def varios_arg(dato1, dato2, **arg):
    print(dato1)
    print(dato2)
    print(arg["tercero"])

varios_arg("Hola", 2, tercero = "Mundo")

Fijense que en esta ocasión el tercer parámetro es un dato cuyo nombre es tercero y su valor, luego dentro de la función se asocia como un diccionario con una clave arg["tercero"]. Es importante que las claves del diccionario sean iguales a los nombres de los parámetros extras, de no ser así ocasionaría un error.

EJERCICIOS

Bien, es hora de practicar. La solución de estos ejercicios los podrás encontrar acá.

Ejercicio Nro. 1: Crear un programa que tenga una función que pase en mayúscula una cadena de caracteres y otra que la pase a minúscula.

# -*- coding: utf-8 -*-
def pasar_mayuscula(texto):
    return texto.upper()

def pasar_minuscula(texto):
    return texto.lower()

t = input("Ingrese el texto a formatear: ")
t_may = pasar_mayuscula(t)
print("El texto en mayúscula es: "+t_may)
t_min = pasar_minuscula(t)
print("El texto en minúscula es: "+t_min)

Explicación:
  • Se crean dos funciones pasar_mayuscula y pasar_minuscula las que reciben como argumento el texto a cambiar el formato. Al inicio se declara y posteriormente se llaman. La función pasar_mayuscula recibe como parámetro una cadena de caracteres y se formatea con upper(), cuyo objetivo es transformar el texto en mayúscula. Por otro lado, la función pasar_minúscula es similar con la diferencia que convierte todo el texto en minúscula gracias a lower(). En ambas funciones se retorna el resultado del cambio.
  • El programa inicia cuando se solicita la usuario que introduzca un texto a formatear. Esa información se guarda en la variable t.
  • Se crea la variable t_may que recibirá el resultado de la función pasar_mayuscula, la que, más adelante, se imprime.
  • De igual forma se crea t_min recibe el resultado de pasar_minuscula, e igualmente la imprime.
Ejercicio Nro. 2: Desarrollar un programa que ejecute una de estas operaciones matemáticas: Suma, resta, división o multiplicación. Se debe crear un función que haga la operación y se le pase como parámetros los dos números y el nombre de la operación a realizar.

# -*- coding: utf-8 -*-
def operacion(num1, num2, oper = 'suma'):
    if oper.lower() == "suma":
        return num1 + num2
    elif oper.lower() == "resta":
        return num1 - num2
    elif oper.lower() == "division":
        return num1 / num2
    elif oper.lower() == "multiplicacion":
        return num1 * num2
    else:
        return "Operación inválida"

oper = input("Qué desea hacer: suma, resta, division o multiplicacion: ")
n1 = int(input("Ingrese el primer número: "))
n2 = int(input("Ingrese el segundo número: "))
result = operacion(n1, n2, oper)
print(result)

Explicación:
  • Se crea la función operacion que recibe como parámetro el num1, num2 y oper. Los dos primeros son los números con los que se hará el cálculo y el tercer recibe un string indicando la operación a realizar. La función formatea la variable oper en minúscula para pasar todo el texto en minúscula (esto se hace por si el usuario escriba la palabra de una forma diferente a la esperada, por ejemplo: Suma, SUMA, etc). A su vez, se verifica que operación indicó y se procede a retornar el cálculo. Si la opción que ingresó el usuario no coincide se retorna un texto indicando el error.
  • El programa inicia solicitando al usuario cual operación hará. Posteriormente solicitando los valores a operar. Al tener estos datos se llama la función y se pasa los datos como parámetro.
  • Al final se imprime los resultados.
Bien amigos. Con estos dos ejercicios concluimos este artículo. En el siguiente post estudiaremos la creación de Clase en Python.

0 comentarios:

Publicar un comentario