Introducción a la programación Funciones PDF

Summary

Este documento ofrece una introducción a las funciones en programación, específicamente en Python. Explica los conceptos básicos y muestra ejemplos de funciones, incluyendo funciones recursivas y paso de parámetros. Proporciona un resumen claro y conciso sobre la funcionalidad de las funciones.

Full Transcript

Introducción a la programación Funciones Índice Funciones....................................................................................................................................1 1 Introducción.............................................................................................

Introducción a la programación Funciones Índice Funciones....................................................................................................................................1 1 Introducción.........................................................................................................................3 2 Conceptos básicos...............................................................................................................4 3 Funciones recursivas...........................................................................................................6 4 Paso de parámetros..............................................................................................................9 5 Valores de retorno..............................................................................................................10 6 Parámetros opcionales.......................................................................................................11 7 Funciones anidadas (funciones dentro de funciones)........................................................13 8 Documentación..................................................................................................................14 9 Módulos.............................................................................................................................16 10 Ejercicios resueltos..........................................................................................................18 11 Ejercicios propuestos.......................................................................................................21 Introducción a la programación Funciones - 2 Introducción a la programación 1 Introducción Hasta ahora, hemos estado utilizando funciones de la librería estándar de Pyhton: sabemos como hacer uso de ellas, pero no sabemos cómo crear nuestras propias funciones. De hecho, como todos los lenguajes de programación, de una u otra forma, Python permite agrupar instrucciones que se repiten a menudo en funciones. Supongamos un código que permite calcular la hipotenusa de un triángulo rectángulo, dados sus catetos. Supongamos de nuevo que, por alguna razón, es necesario hacer el mismo cálculo para dos triángulos. No nos quedaría más remedio que repetir el código en dos lugares distintos, como se puede ver a continuación. # Calcula la hipotenusa de dos triángulos import math t1_c1 = float(input(“Dame el cateto 1 del primer triángulo: ”)) t1_c2 = float(input(“Dame el cateto 2 del primer triángulo: ”)) t2_c1 = float(input(“Dame el cateto 1 del segundo triángulo: ”)) t2_c2 = float(input(“Dame el cateto 2 del segundo triángulo: ”)) h_t1 = math.sqrt(math.pow(t1_c1, 2) + math.pow(t1_c2, 2)) h_t2 = math.sqrt(math.pow(t2_c1, 2) + math.pow(t2_c2, 2)) # Repetido print(“Hipotenusa del primer triángulo:”, h_t1) print(“Hipotenusa del segundo triángulo:”, h_t2) Si bien en este caso el código repetido es muy poco, tanto que parece exagerado preocuparse por el mismo, en realidad cualquier código repetido se transforma rápidamente en un problema: cualquier error en una de las ocurrencias del código, así como cualquier mejora, será necesario repetirla en varios puntos, lo que llevaría fácilmente a errores. Podríamos, en cambio, crear la función calcula_hipotenusa(f1, f2), de manera que f1 y f2 fuesen dos valores reales representando los catetos, y la función devolviera un número real que sería la hipotenusa calculada. # Calcula la hipotenusa de dos triángulos import math def calcula_hipotenusa(c1, c2): return math.sqrt(math.pow(c1, 2) + math.pow(c2, 2)) t1_c1 = float(input(“Dame el cateto 1 del primer triángulo: ”)) t1_c2 = float(input(“Dame el cateto 2 del primer triángulo: ”)) t2_c1 = float(input(“Dame el cateto 1 del segundo triángulo: ”)) t2_c2 = float(input(“Dame el cateto 2 del segundo triángulo: ”)) h_t1 = calcula_hipotenusa(t1_c1, t1_c2) h_t2 = calcula_hipotenusa(t2_c1, t2_c2) print(“Hipotenusa del primer triángulo:”, h_t1) print(“Hipotenusa del segundo triángulo:”, h_t2) Funciones - 3 Introducción a la programación Las funciones se declaran con la palabra clave def, y el valor que devuelven se indica con la palabra clave return. En el interior de la función se pueden utilizar los parámetros como si fueran variables creadas en su interior: en realidad, es así, solo que se asignarán inicialmente con los valores que se le pasen en la llamada. 2 Conceptos básicos Las funciones permiten agrupar más de una sentencia en un bloque de código, al que además, se le pueden pasar parámetros. La palabra clave que se emplea para crear funciones es def. A continuación, el nombre de la función, y entre paréntesis, la lista de parámetros (aunque hay funciones que pueden no aceptar ninguno). Entonces, dos puntos (':') y el bloque de código. Sintaxis def (): sentencia1 sentencia2 … sentenciaN En el siguiente programa, se crea una función que muestra “Hola, mundo!” por pantalla. La función es llamada a continuación para obtener dicha funcionalidad. # Muestra “Hola, mundo!” por pantalla. def saluda(): print(“Hola, mundo!”) saluda() En el siguiente programa, se crea una función que devuelve el doble de un número pasado como parámetro. Esta función se utiliza para mostrar el doble de un entero introducido por teclado. # Calcula el doble de 4 def doble(x): return x * 2 print(“Doble de 4:”, doble(4)) En el programa anterior, se produce la llamada a la función doble(x) con el siguiente código: doble(4). Esto quiere decir que x va a ser inicializada con el valor cuatro. Así x se utiliza dentro de la función doble como si fuera una variable creada dentro de la misma con valor 4. De la misma manera, una vez se alcance el final del bloque de instrucciones dentro de la función doble(x), x dejará de existir. En este caso, la única línea de la función es return x * 2, es decir la función finaliza inmediatamente después de indicar que devuelve el resultado de la expresión, que, al tener x el valor cuatro, resulta ser ocho. Por lo tanto, la expresión doble(4) (compuesta únicamente Funciones - 4 Introducción a la programación por una llamada a la función doble(x)), se evalúa como ocho, que es lo que se muestra por pantalla: “Doble de 4: 8”. Con la misma función doble(x), se muestra un programa que muestra el doble de un número introducido por teclado. # Calcula el doble de un valor real dado def doble(x): return x * 2 x = float(input(“Dame un valor real: “)) print(“Su doble es:”, doble(x)) Una salida de ejemplo sería: Dame un valor real: 5 Su doble es: 10.0 Nótese que el nombre del parámetro puede coincidir con el nombre de otra variable, en este caso en la parte principal del programa. La variable x de la función doble(x) solo existe mientras se está en el interior de la función, ejecutando sus instrucciones, y tendrá el mismo valor que el pasado en el parámetro en el momento de la llamada a la función. Así, en realidad, el nombre de los parámetros es irrelevante. En la siguiente versión del programa, se ha cambiado el nombre del parámetro x por v. # Calcula el doble de un valor real dado def doble(v): return v * 2 x = float(input(“Dame un valor real: “)) print(“Su doble es:”, doble(x)) En el siguiente ejemplo, se crea una función que crea una texto con tantos asteriscos como el valor pasado por parámetro. Esta función se empleará para crear un histograma. # Muestra un histograma por pantalla def barra_histograma(x, max): return “*” * int(x * (10 / max)) def histograma(l): max = max(l) for x in l: print(barra_histograma(x, max) histograma([5, 8, 10]) histograma([50, 80, 100]) De nuevo se insiste en que el nombre de los parámetros dentro de las funciones no afecta en nada a otras variables con el mismo nombre fuera de ella. Así, la variable x dentro Funciones - 5 Introducción a la programación de histograma no tiene ninguna relación (aunque compartan el nombre) con la variable x dentro de barra_histograma(i1, i2). La salida del programa será: ***** ******** ********** ***** ******** ********** En el siguiente programa, se crea una función que realiza el cálculo del factorial. # Calcula el factorial de un valor natural dado def factorial(n): toret = 1 for i in range(n, 1, -1): toret *= i return toret x = int(input(“Dame un valor natural: “)) print(“El factorial de”, x, “es”, factorial(x), “.”) La salida del programa es la siguiente: Dame un valor natural: 6 El factorial de 6 es 720. 3 Funciones recursivas Las funciones recursivas son aquellas que, dentro de sus instrucciones, contienen llamadas a sí mismas. Estas llamadas tienen que producirse con parámetros distintos con los que se llamó originalmente a la función, o se producirá un error al agotar la memoria por producirse demasiadas llamadas recursivas. El código anterior del cálculo del factorial se adecua mucho a este concepto, como se puede ver a continuación. # Cálculo recursivo del factorial: n x (n – 1) hasta n == 1, que es 1 def factorial(n): toret = 1 if n > 1: toret = n * factorial(n - 1) return toret x = int(input(“Dame un valor natural: “)) print(“El factorial de”, x, “es”, factorial(x), “.”) Funciones - 6 Introducción a la programación Salida Dame un valor natural: 6 El factorial de 6 es 720. Supongamos que el usuario introduce seis por teclado, es decir x tiene valor seis. Al realizar la llamada indicada en el código, factorial(6), la primera vez que la función factorial(n) es invocada, n pasa a tener el valor 6. Dado que es mayor que 1, se evalúa la expresión n * factorial(n – 1), es decir, se multiplicará 6 (el valor de n), por la llamada a la función factorial(n) con el parámetro n – 1, o sea cinco. Dado que esta llamada tiene que producirse todavía, esta expresión queda en suspenso. Se ejecuta de nuevo la función con n valiendo cinco, llegando a la misma expresión, que queda en suspenso hasta que se ejecute factorial(4). Esta última llamada hace que se ejecute factorial(i) con n valiendo cuatro, quedándose la misma expresión en suspenso dado que es necesario calcular factorial(3). Lo mismo sucede en la siguiente llamada recursiva con la misma expresión, es decir, hasta que se calcule factorial(2). Y entonces, la misma expresión n * factorial(n – 1) queda en suspenso en la siguiente llamada recursiva hasta que se calcule factorial(1). De acuerdo, esta vez la función factorial(n) con n valiendo 1 devuelve directamente 1. Se retrocede hasta la última llamada que había quedado en suspenso, n * factorial(n – 1) con n valiendo 2, es decir 2 * factorial(1), y dado que factorial(1) ha devuelto 1, se puede ya evaluar como 2 * 1, es decir 2. Esto hace que se vuelva a la misma expresión que había quedado en suspenso cuando n valía 3, de manera que 3 * factorial(2) se evalúa como 6, dado que factorial(2) ha devuelto 2. Cuando n valía 4, se había quedado la evaluación de la expresión 4 * factorial(3) en suspenso, pero ahora se puede calcular como 4 * 6, dado que factorial(3) ha devuelto 6. Lo mismo para la expresión 5 * factorial(4), que se evalúa como 5 * 24 (120). Finalmente, la última expresión que había quedado suspendida, 6 * factorial(5), se evalúa como 30 * 120, que supone el valor final de 720. A continuación, en la Figura 1, se indica la secuencia de llamadas a factorial(n), para n = 6. Las flechas en ángulo recto hacia abajo y a la derecha, muestran el flujo de llamadas recursivas. Al llegar a toret = 1, las flechas hacia arriba indican el flujo de retorno de las llamadas recursivas, hasta volver arriba a la primera llamada, donde de hecho se hace el cálculo final. La recursividad es muy potente como herramienta para expresar conceptos (como el factorial), sin entrar en detalles sobre cómo se resuelven estos conceptos. Tan solo es necesario crear un caso regular (n * factorial(n-1) cuando n > 1 en el ejemplo) y un caso base que garantice que la recursividad no se volverá infinita (1 cuando n

Use Quizgecko on...
Browser
Browser