Hasta el momento, hemos trabajado con una metodología de programación lineal, es decir, todas las instrucciones de nuestro script python se ejecutan de forma secuencial de principio a fin.
Esta forma de estructurar un programa, sólo podemos llevarla a cabo para aquellos que sean muy pequeños. En el momento en el que queremos resolver problemas más complejos, será necesario utilizar la programación estructurada.
La programación estructurada busca dividir o descomponer un problema complejo en pequeños problemas, haciendo más fácil la resolución de dicho problema. Estos pequeños problemas reciben el nombre de funciones.
Índice
¿Qué es una función?
Una función en python es un conjunto de instrucciones que resuelven un problema específico. Por defecto, python incluye algunas funciones como las utilizadas anteriormente, print, len, range…
Vamos a resolver un primer problema para aclarar este tema de las funciones.
Problema
Realizar un programa que muestre un mensaje de bienvenida, solicite la carga de dos valores, muestre la suma y finalmente un mensaje de despedida.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# declaramos una función para mostrar el mensaje de bienvenida def bienvenida(): print("Bienvenido a nuestro programa") print("Este programa calculara la suma de dos valores enteros") print("********************************************************") # la segunda funcion # solicitara la carga de valores por teclado # y mostrara la suma de los valores def suma(): num1=int(input("Ingrese el primer valor:")) num2=int(input("Ingrese el segundo valor:")) suma=num1+num2 print("La suma de los valores es: ",suma) # por ultimo # la funcion para mostrar el mensaje de despedida def despedida(): print("********************************************************") print("Gracias por utilizar nuestro programa") # cargamos nuestras funciones bienvenida() suma() despedida() |
En el ejemplo anterior, podemos ver claramente como se declara una función. Utilizaremos la palabra clave def seguida del nombre de la función, el paréntesis donde se incluirán los parámetros que explicaremos a continuación y el carácter : para mostrar que hemos terminado de definir nuestra función.
A continuación añadiremos nuestro pequeño programa, en el caso de la función bienvenida() mostraremos varios mensajes por pantalla para dar la bienvenida a nuestro programa. Al igual que pasaba con las condicionales o los bucles, la indentación de la función con respecto al contenido debe de ser de 4 espacios para cada línea.
1 2 3 4 5 |
# declaramos una función para mostrar el mensaje de bienvenida def bienvenida(): print("Bienvenido a nuestro programa") print("Este programa calculara la suma de dos valores enteros") print("********************************************************") |
Una vez declaradas nuestras funciones, para cargar las mismas, lo haremos haciendo una simple llamada a la función correspondiente.
1 2 3 4 |
# cargamos nuestras funciones bienvenida() suma() despedida() |
Definición de parámetros
Además de crear nuestras funciones, como dijimos anteriormente podemos incluir parámetros con los que poder enviar ciertos datos a la función, haciendo más flexible el trabajo con estas.
Vamos a verlo en un ejemplo
Realizar el mismo ejercicio anterior, mostrar mensajes de bienvenida, despedida, solicitar la carga de dos valores y calcular la suma de ambos. En este caso vamos a realizar lo mismo pero utilizando parámetros para obtener la información.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# declaramos una función para mostrar el mensaje de bienvenida def bienvenida(mensaje): print(mensaje) print("********************************************************") # la segunda funcion # solicitara la carga de valores por teclado # y mostrara la suma de los valores def suma(): num1=int(input("Ingrese el primer valor:")) num2=int(input("Ingrese el segundo valor:")) suma=num1+num2 print("La suma de los valores es: ",suma) # por ultimo # la funcion para mostrar el mensaje de despedida def despedida(mensaje): print("********************************************************") print(mensaje) # cargamos nuestras funciones bienvenida("Bienvenido a nuestro programa") suma() despedida("Gracias por utilizar nuestro programa") |
Como vemos en el ejemplo, a las funciones bienvenida y despedida, le pasamos el mensaje a través de un parámetro al llamar a dicha función.
1 2 |
def bienvenida(mensaje): print(mensaje) |
Y cuando hacemos la llamada, especificamos el valor de ese parámetro.
1 |
bienvenida("Bienvenido a nuestro programa") |
Por parámetro, podemos pasar cualquier tipo de valor a una función, ya sea un string, entero, lista, booleano, etc.
Retorno de datos
Hemos comenzado a pensar ya un poco con la metodología de programación estructurada. Como vimos, una función la definimos mediante un nombre y a la cual podemos pasar valores por medio de sus parámetros. Otra característica de las funciones es la devolución o retorno de datos. Vamos a verlo con un ejemplo:
Realizar un programa con dos funciones. Una para solicitar datos por teclado, se deberá llamar dos veces a dicha función. La segunda para calcular la suma de ambos valores.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# Primero la funcion para cargar el valor entero def carga(): num=int(input("Ingrese el valor: ")) return num # funcion para calcular la suma def suma(num1,num2): sumar=num1+num2 print("La suma de los valores es: ",sumar) num1=carga() num2=carga() suma(num1,num2) |
Para devolver un dato, nos ayudamos de la palabra clave return, la cual indica a python que tiene que devolver dicho valor como resultado de la función.
Funciones con parámetros por defecto
En python, al igual que en muchos otros lenguajes, también podemos asignar un valor por defecto a un parámetro y en el momento de llamar a la función, cambiarlo o no.
Problema
Realizar un programa que reciba un string como parámetro y como opcional, reciba un segundo string con un carácter. La función debe mostrar el carácter opcional subrayando el primer string.
1 2 3 4 5 6 7 8 9 |
# creamos la funcion def titulo_subrayado(titulo,caracter="-"): print(titulo) print(caracter*len(titulo)) # bloque principal titulo_subrayado("Hola mundo") titulo_subrayado("Cambiando el valor opcional",".") |
Este ejemplo, al imprimirlo nos quedaría de la siguiente manera
1 2 3 4 |
Hola mundo ---------- Cambiando el valor opcional ........................... |
Vemos el parámetro opcional como tiene por defecto un valor carácter=”-“. Este parámetro obtiene este valor originalmente y podemos cambiarlo o no como hemos visto en el ejercicio anterior.
Pero que pasa si al llamar a la función alteramos el orden de los parámetros, por ejemplo al llamar lo hacemos de la siguiente manera
1 2 |
titulo_subrayado("Hola mundo") titulo_subrayado(".","Cambiando el valor opcional") |
En este caso, la consola de python nos mostraría un error, porque no podemos cambiar el orden de los parámetros a no ser que lo nombremos. En Python, al contrario que en otros lenguajes, podemos alterar el orden de los parámetros, especificándolo al llamar a dicha función. Un ejemplo sería con el anterior problema.
1 2 3 4 5 6 7 8 9 |
# creamos la funcion def titulo_subrayado(titulo,caracter="-"): print(titulo) print(caracter*len(titulo)) # bloque principal titulo_subrayado("Hola mundo") titulo_subrayado(caracter=".",titulo="Cambiando el valor opcional") |
En este caso al llamar a la función en la segunda vez, hemos cambiado el orden de los parámetros. Esto podemos hacerlo siempre y cuando especifiquemos el nombre del parámetro que estamos añadiendo.
1 |
titulo_subrayado(caracter=".",titulo="Cambiando el valor opcional") |
Funciones con cantidad de parámetros variable
Otra variante a tener en cuenta en python es la definición de una cantidad variable de parámetros. Para ello nos ayudamos del carácter asterisco precediendo al último parámetro de la función. Veámoslo con un ejemplo
Realizar una función que reciba entre 2 y n valores enteros. Retornar la suma de dichos parámetros.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# realizamos la funcion def calcular(v1,v2,*lista): suma=v1+v2 for x in range(len(lista)): suma=suma+lista[x] return suma # bloque principal print("La suma de 2 y 4:") print(calcular(2,4)) print("La suma de 1, 2, 3, 4, 5, 6, 7, 8, 9, 10") print(calcular(1,2,3,4,5,6,7,8,9,10)) |
Vemos como para declarar una lista de n valores utilizamos el carácter *
1 |
def calcular(v1,v2,*lista): |
Recorremos la lista ayudándonos de un bucle for y devolvemos el resultado obtenido.
1 2 3 |
for x in range(len(lista)): suma=suma+lista[x] return suma |
Problemas propuestos
Ejercicio 1
Realizar un programa con dos funciones. La primera debe solicitar la carga de un valor entero y mostrar el cuadrado de dicho valor. La segunda que solicite la carga de dos valores y muestre el producto de los mismos. Deberán llamar a estas dos funciones desde el bloque principal (Fuera de toda función, como en el ejemplo realizado al principio de este tema).
Ejercicio 2
Realizar un programa que tenga una función que reciba un string como parámetro. Debe mostrar la cantidad de vocales que tiene dicho string. Se deberá llamar 3 veces desde el bloque principal, con 3 strings diferentes.
Ejercicio 3
Realizar un programa que conste de 4 funciones. La primera solicitará la carga de un valor entero. La segunda calculará la suma de los valores, la tercera la resta y la cuarta mostrará cada uno de los valores. Cargar al menos dos valores enteros.
Ejercicio 4
Realizar un programa que permita ingresar por teclado los nombres de 5 artículos y sus precios, definir para ellos las siguientes funciones.
Cargar los nombres de los artículos y sus precios.
Imprimir cada artículo con sus datos.
Imprimir el nombre del artículo más caro.
Solicitar la carga de un importe por teclado, mostrar después todos los artículos con un precio inferior al insertado.
Ejercicio 5
Realizar un programa que cargue una lista de n valores enteros. Generar dos listas, una con valores negativos y otra con los valores positivos e imprimir ambas listas.
Ejercicio 6
Realizar un programa que muestre la tabla de multiplicar del valor que le enviemos como parámetro. Definir un segundo parámetro con el valor 10 por defecto. Se deben mostrar tantos términos de la tabla de multiplicar como indique el segundo parámetro. Llamar a la función desde el bloque principal nombrando los argumentos.
Ejercicio 7
Realizar un programa que reciba una serie de edades y retorne la cantidad de personas con una edad igual o superior a 18 (como mínimo deben introducirse 3 valores enteros).
Además tenéis la lista completa de ejercicios en nuestro repositorio en github.
Con esto acabamos el sexto capítulo de nuestro curso de python 3.5. Si tienen cualquier duda relacionada con el contenido explicada en este capítulo, pueden exponerla en sus comentarios y le ayudaremos a resolverla lo antes posible. Nos vemos en el siguiente capítulo con la estructura de datos de tipo tupla.
<- Anterior | Volver al índice | Siguiente -> |
hola, en los ejercicios 5, 6 y 7 no entiendo como toman los valores las funciones por ejemplo: en el ejercicio 7 como toma el valor edad, gracias
Hola Andres,
Si te fijas en la función, se inicializa la variable con el valor 0
cant=0
Luego en el bucle( for x in range(len(edades)): ) se itera sobre cada uno de los valores pasados a la función, de tal forma que la variable cant aumentará en 1 por cada iteración que se haga en el bucle.
La función range, permite especificar un rango de valores, mientras que la función len() obtiene el total de valores existentes.
Espero haber resuelto tu duda, si tienes alguna más no dudes en preguntar.
Saludos
Buenos tardes,yo la parte que no entiendo es el mensaje del ejercicio 5
# declaramos una tercera función para imprimir los valores
def imprimir(mensaje,lista):
print(“-“*10)
print(mensaje)
print(lista)
print(“-“*10
¿no se de donde toma los argumentos mensaje?
gracias
Hola Ana,
En el ejercicio que indicas, en la función imprimir, la variable mensaje es el nombre que se le da para llamar a dicha variable desde dentro de la función, te lo explico con un ejemplo.
En el código llamamos a la función con:
imprimir(“Imprimimos la lista original”,lista)
Dentro de la función imprimir los argumentos que necesita son mensaje y lista, por lo cual mensaje sería el primer valor que le pasamos, en este caso sería el texto “Imprimimos la lista original”.
Espero haber resuelto tu duda, si tienes alguna más no dudes en preguntarla.
Saludos