Anterior

6 - Creación de funciones

Por: Nacho Cabanes
Actualizado: 18-04-2019 09:53
Tiempo de lectura estimado: 7 min.

 

Python

6 - Creación de funciones

En muchos casos, nos encontraremos con tareas que tenemos que repetir varias veces en distintos puntos de nuestro programa. Si tecleamos varias veces el mismo fragmento de programa no sólo tardaremos más en escribir: además el programa final resultará menos legible, y será más también será más fácil que cometamos algún error alguna de las veces que volvemos a teclear el fragmento repetitivo, o que decidamos hacer una modificación y olvidemos hacerla en alguno de los fragmentos. Por eso, conviene evitar que nuestro programa contenga código repetitivo. Una de las formas de evitarlo es usar "funciones".

6.1. Una función simple

Las funciones en Python se definen con la palabra "def", seguida por el nombre de la función, unos paréntesis (que estarán vacíos en este primer acercamiento) y un símbolo de "dos puntos". Todo el cuerpo de la función deberá estar tabulado hacia la derecha (igual que hacíamos con las condiciones y con los bucles):

def subrayar():
    for i in range(0, 20):
        print( "-", end="" )
    print()
 
print ( " Primer ejemplo" )
subrayar()
print ( " Segundo ejemplo" )
subrayar()
print ( " Tercer ejemplo" )
subrayar()

Esta es una función que subraya el texto que acabamos de escribir, dibujando 20 guiones debajo de él.

Ejercicios propuestos:

  • 6.1.1. Crea una función "saludar", que escriba el texto Hola en pantalla

  • 6.1.2. Crea una función "mostrarPares", que escriba en pantalla los números pares del 2 al 20, separados por un espacio en blanco.

6.2. Parámetros

En general, podremos hacer que la función sea más versátil si le indicamos datos adicionales ("parámetros"). En el caso de nuestra función "subrayar", le podríamos indicar el texto que hay que escribir y subrayar, de modo que nuestro programa sería menos repetitivo, y además podría saber qué cantidad exacta de guiones dibujar en cada caso, en vez de dibujar siempre 20 (deberían ser tantos como la longitud del texto):

def escribirSubrayado(texto):
    print(texto)
    for i in range(0, len(texto)):
        print( "-", end="" )
    print()
 
escribirSubrayado ( "Primer ejemplo" )
escribirSubrayado ( "Segundo ejemplo" )
escribirSubrayado ( "Tercer ejemplo" ) 

Si tenemos que indicar varios parámetros, bastaría con separarlos mediante comas.

Ejercicios propuestos:

  • 6.2.1. Crea una función "saludarA", que escriba el texto Hola en pantalla, seguido del nombre que se le indique como parámetro, entre admiraciones (por ejemplo, si el texto es "Nacho", escribirá "¡Hola, Nacho!")
  • 6.2.2. Crea una función "mostrarParesEntre", que escriba en pantalla los números pares que hay entre los dos números que se le indiquen como parámetro (por ejemplo, 2 y 20, o 13 y 17).
  • 6.2.3. Crea una función que reciba como parámetro un texto y lo escriba centrado en pantalla (suponiendo una anchura de 80 columnas)

6.3. Funciones que devuelven un valor

Hay muchas funciones, como las matemáticas, que deben devolver resultados. En ese caso, usaremos la palabra "return". Por ejemplo, podríamos calcular el máximo de dos números así:

def maximo(n1,n2):
    if n1 > n2:
        return n1
    else:
        return n2
 
print("El máximo de 5 y 12 es:")
print( maximo(5,12) )
print("El máximo de 25 y 12 es:")
print( maximo(25,12) )

Ejercicios propuestos:

  • 6.3.1. Crea una función que reciba un número entero y devuelva la cantidad de divisores que tiene (por ejemplo, para el número 16, sus divisores son 1, 2, 4, 8, 16, luego la respuesta debería ser 5).

  • 6.3.2. Crea una función que reciba dos números enteros y devuelva la cantidad de números primos que hay entre ellos, incluyendo ambos extremos (por ejemplo, para los números 3 y 7, la respuesta debería ser 3, porque el 3, el 5 y el 7 son primos, pero el 4 y el 6 no lo son).

También se pueden devolver valores no numéricos, como cadenas o valores de verdad (verdadero, "True" o falso, "False"), de modo que así podría ser una función (poco eficiente) que nos diga si un número es primo o no:

# Comprobación de si un número es primo (ineficiente),
# aplicando la definición: divisible sólo entre 1 y él mismo
 
def esPrimo(n):
    cantidadDivisores = 0
    for i in range(1, n+1):
        if n % i == 0:
            cantidadDivisores = cantidadDivisores + 1
    if cantidadDivisores <= 2:  # Si solo hay 2 divisores, es primo
        return True
    else:                       # Si hay más, no es primo
        return False
 
# Prueba: mostrar los primos del 1 al 30
for i in range(1, 31):
    if esPrimo(i):
        print(i)

Ejercicios propuestos:

  • 6.3.3. Crea un programa que pida dos número enteros al usuario y diga si alguno de ellos es múltiplo del otro. Crea una función EsMultiplo (que devolverá True o False) que te ayude a que el cuerpo del programa sea legible.

Nota: En algunos lenguajes de programación, a las funciones que no devuelven un valor se les llama Procedimientos o Subrutinas.

12400 visitas desde el 18-04-2019

Anterior