sesión 16: funciones (2). 2009/1 circuitos digitales iii 2010/1 circuitos digitales iii 2010/1...

44
Informática I Sesión 16: Funciones (2)

Upload: jose-miguel-farias-rio

Post on 24-Jan-2016

232 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

Informática ISesión 16: Funciones (2)

Page 2: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

RepasoRepaso

En el momento de crear mi_función debo seguir 2 pasos fundamentales:

1• Definición de la función

2• Llamado a la función

Page 3: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Definición de una FunciónDefinición de una Función

def nombre(param_1, param_N):

Palabra reservada que indica que estamos creando una función (definición de una función)

def

Es el nombre de la función es el nombre que le damos al conjunto de instrucciones que ella representa.

nombre

Son todos aquellos parámetros que la función necesita para su funcionamiento. Si la función no necesita parámetros se dejan los paréntesis vacios.

parámetros

Page 4: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Definición de una FunciónDefinición de una Función

Definición de una Función:

Retomando la función que calcula el máximo de dos números anteriormente mostrada:

4

def nombre de la funcion(lista de parametros formales): cuerpo de la funcion

nombre de la función Parametros

Cuerpo de la funcion

def mini(x, y): if x < y: return x else: return y

x

ymenor

mini

Page 5: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Una vez se ha definido la función, podemos pasar a la fase en el que la funcion ya se puede utilizar.

varRetorno = nomb_funcion(variables)

Para hacer que las instrucciones contenidas en una función, se ejecuten en determinado momento, no es necesario más que escribir su nombre como una línea de sentencia en el programa.

raiz=sqrt(a)print (¨el valor es:¨, val )

2 Llamado a la funciónLlamado a la función

Page 6: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Módulos

Buenas practicas de programación

Variables globales y locales

Argumentos y retornosArgumentos y retornos

A continuación…A continuación…

Page 7: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Envío de argumentosEnvío de argumentos

7

Hay dos maneras de pasar de argumentos en las funciones en Python. Teniendo la siguiente definición de una función:

• Posicionalmente: Requiere que el argumento sea pasado siguiendo el mismo orden de los parámetros de la función. Los nombres de las variables que se envían no tienen que ser iguales a los nombres de las variables de la definición:

• En este caso, las variables de la función tomaran los valores en el mismo orden en el que se envían.

def nombre(vble1, vble2, vbleN):

x = nombre(a, b, c)

Page 8: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Envío de argumentosEnvío de argumentos

8

Hay dos maneras de pasar de argumentos en las funciones en Python. Teniendo la siguiente definición de una función:

• Por palabra clave: Aquí se pasan los argumentos de la forma clave = valor. Se debe poner el nombre de la variable a la que se desea pasar el valor:

• Al utilizar este modo de envió, las variables de la función toman los valores según se especifique en el llamado sin importar el orden:

def nombre(vble1, vble2, vbleN):

x = nombre(vble1=valor1, vble2=valor2, vbleN=valorN)

x = nombre(vble2=valor1, vble1=valor2, vbleN=valor1)x = nombre(vbleN=valor1, vble2=valor2, vble1=valorN)

...

Page 9: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Envío de argumentosEnvío de argumentos

9

Realizar un programa que determine cual es menor de dos números.

def mini(x,y): if (x<y): menor = x return menor else: menor = y return menor

a = mini(1,2) # posicionalb = mini(x = 1, y = 2) # Por palabra clavec = mini(y = 2, x = 1) # Por palabra clavee = mini(1, y = 2) # Ambase = mini(y = 2, 1) # ERROR!!!

Código online

Page 10: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Parámetros por defectoParámetros por defecto

10

Es posible que en ocasiones no necesitemos enviar todos los parámetros a las funciones. Si esto ocurre tendríamos que llenar de valores innecesarios al momento de realizar el llamado:

• Por ejemplo:

def nombre(vble1, vble2, vbleN):

x = nombre(a, b, 0)x = nombre(a, 0, 0)x = nombre(a, 0) #Error: Falta un valor

Page 11: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Parámetros por defectoParámetros por defecto

11

Para evitar esto, en Python existe los valores por defecto. Estos son valores que toman las variables cuando no se envían todos los valores en el llamado

def nombre(vble1, vble2, vbleN=valorD1):

x = nombre(a, b, c)x = nombre(a, b)

x = nombre(vble1=valor1, vbleN=valor2) #Error

x = nombre(vble1=valor1, vble2=valor2)x = nombre(vbleN=valor1, vble1=valor2 , vble2=valor3)

Page 12: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Parámetros por defectoParámetros por defecto

12

def strIsIn(str1, str2, sen): if not sen: str1 = str1.lower() str2 = str2.lower() if str1 in str2: return 'Yes' else: return 'No'

s1 = 'Hola' s2 = 'holas'

print(strIsIn(s1, s2, False)) # imprime Yes

print(strIsIn(s1, s2, True)) # imprime No

print(strIsIn(s2, s1, False))

print(strIsIn(sen=False, str2=s1, str1=s2))

print(strIsIn(str2=s1, str1=s2))

def strIsIn(str1, str2, sen=True):

parámetros con valores por defecto

argumentos asignados por nombre (keyword)

argumento omitido por tener valor por defecto

Page 13: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Valores de retornoValores de retorno

13

Python es un lenguaje especial al momento de retornar valores. Ya que la mayoría de los lenguajes de alto nivel solo son capaces de retornar un único valor (variable). Por su parte, Python permite retornar toda una lista de variables de acuerdo a la siguiente expresión:• Por ejemplo:

def nombre(vble1, vble2, vbleN):...return v1,v2,.. vN

x,y,..z = nombre(a, b, c)

Page 14: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Valores de retornoValores de retorno

14

def division(dividendo, divisor): cociente = dividendo//divisorresiduo = dividendo%divisorreturn cociente,residuo

x,y = division(23,5) # Se guarda sobre x,y respectivamenteprint(“El cociente de la division es:”,x) # imprime 4print(“El residuo de la division es:”, y) # imprime 3

Page 15: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Módulos

Buenas practicas de programación

Variables globales y locales

Argumentos y retornos

Variables globales y locales

A continuación…A continuación…

Page 16: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Alcance de una variableAlcance de una variable

16

Cuando trabajamos con funciones debemos conocer muy bien los límites y alcances que tienen las variables.

Cuando utilizamos una variable dentro de una función, estas variables existe únicamente dentro del contexto de dicha función (variables locales)

Mientras que si creamos una variable por fuera de todas las funciones, ésta tiene un contexto general el cual le permite ser accedida por todas las funciones (variables globales)

Según el contexto de las variables podemos describir el comportamiento de las variables en un programa.

Page 17: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia17

La visibilidad o Scope de una variable es la parte del programa en la que esa variable está definida y puede ser utilizada.

La duración o Lifetime hace referencia al tiempo que transcurre entre la creación de una variable y el instante en que es destruida.

Visibilidad y DuraciónVisibilidad y Duración

Page 18: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Locales

Una variable local se declara dentro de una función

Son visibles solo dentro de la función

Ocultan a las variables globales con el mismo nombre.

“Nacen” y “mueren” con la función.

Clasificación de VariablesClasificación de Variables

Page 20: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Variables Globales vs localesVariables Globales vs locales

20

def f1(): global a a = a + 1 b = b + 1 global c c = 7 d = 23 print(a, b, c, d)

a=4 b=15 f1() print(a, b) print(c) print(d) Error: d no existe en este ámbito

Error: b no ha sido inicializada

variables globales

variable local

¡Las variables globales hacen que los programas sean muy difíciles de entender y depurar!

Page 21: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Variables Globales vs localesVariables Globales vs locales

21

Dados los siguientes fragmentos de código cual es la salida en pantalla para cada caso:

globalVar = 1def f1(): localVar = 2 print(globalVar) print(localVar)

f1()print(globalVar)# print(localVar) # Out of scope, so this gives an error

Código 1:

Page 22: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Variables Globales vs localesVariables Globales vs locales

22

Dados los siguientes fragmentos de código cual es la salida en pantalla para cada caso:

x = 1def f1(): x = 2 print(x) # Displays 2

f1()print(x) # Displays 1

Código 2:

x = eval(input("Enter a number: "))if x > 0: y = 4

# print(y) # This gives an error if y is not created

Código 3:

Page 23: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Variables Globales vs localesVariables Globales vs locales

23

Dados los siguientes fragmentos de código cual es la salida en pantalla para cada caso:

sum = 0for i in range(5): sum += iprint(i)

Código 4:

x = 1def increase(): global x x = x + 1 print(x) # Displays 2

increase()print(x) # Displays 2

Código 5:

Page 24: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Módulos

Buenas practicas de programación

Variables globales y locales

Argumentos y retornos

Buenas practicas de programación

A continuación…A continuación…

Page 25: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Buenas prácticasBuenas prácticas

25

Cuando tenemos problemas mas complejos, surge la necesidad de utilizar más técnicas de programación como lo son las funciones. Sin embargo, el uso de una sola función en muchas ocasiones no es suficiente para resolver el problema.

Entre las técnicas utilizadas en Python tenemos las funciones anidadas y la creación de módulos.

Page 26: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Funciones anidadasFunciones anidadas

26

def compare(): def mini(x, y): if x<y: return x else: return y age1 = int(input('Enter age of first person: ')) weight1 = int(input('Enter weight of first person: ')) age2 = int(input('Enter age of second person: ')) weight2 = int(input('Enter weight of second person: ')) young = mini(age1, age2) slim = mini(weight1, weight2) print('The young one is', young, 'years old') print('and the slim one weights', slim, 'kilos')

while(True): #print(mini(7,8)) wish = input('Do you want to compare people? ') if wish == 'no': break compare()

función anidada

función desconocida en este ámbito

Archivo: nested.py

Page 27: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Funciones anidadasFunciones anidadas

27

Como se ve en el ejemplo anterior, el manejo de funciones dentro de funciones puede aumentar la funcionalidad del sistema, pero tambien aumenta la dificultad de entendimiento.

Además, no debemos olvidar que el orden en el desarrollo del programa es parte fundamentas para obtener soluciones eficientes.

Por estas razones, y buscar acercar Python a la mayoría de los lenguajes de programación de alto nivel, podemos realizar una función principal llamada generalmente main. Esta función será la que coordine el funcionamiento del programa.

Page 28: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Estructuras Básicas de los programasEstructuras Básicas de los programas

EncabezadoTitulo:Autor:Fecha:Descripción:

Definicion main():Proceso Principal

Definicion de funciones():Procesos internos

main():

Page 29: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia29

def main(): i = 5 j = 2 k = maxi(i, j) print("El numero mayor de",i,"y",j,"es",k) def maxi(num1,num2): if num1 > num2: result = num1 else: result = num2 return result

main()

Código online

mainmain

Page 30: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia30

mainmain

Page 31: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia31

mainmain

Page 32: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia32

mainmain

Page 33: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia33

mainmain

Page 34: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia34

mainmain

Page 35: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Especificación de una funciónEspecificación de una función

35

Docstring: comentario entre comillas triples que resume la especificación de la función

def findRoot(x, power, epsilon=0.01): ''' Asume que x y epsilon son int o float, que power es int, epsilon > 0 y power >= 1 Retorna un dato float tal que dato**power está dentro de una distancia epsilon de x Si no existe tal dato, retorna None''' if x<0 and power%2==0: return None low = min(-1.0, x) high = max(1.0, x) ans = (high + low)/2.0 while abs(ans**power - x) >= epsilon: if ans**power < x: low = ans else: high = ans ans = (high + low)/2.0 return ans

Especificación de una función: condiciones de uso de una función.• Suposiciones: requisitos de

los argumentos• Garantías: lo que la función

garantiza hacer

Las especificaciones de las funciones permiten desarrollar un programa entre varias personasArchivo: findRoot.py

Page 36: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Especificación de una funciónEspecificación de una función

36

Page 37: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Test manual de una funciónTest manual de una función

37

• Consiste en invocar la función en la consola de python de manera manual para verificar que esta funcione de acuerdo a lo que garantiza siempre y cuando los requisitos (suposiciones) necesarios para su funcionamiento se cumplan.

Valores para probar en el programa

x power epsion resultado

25 2 0.01 ?

25 3 0.0001 ?

49 7 0.001 ?

Tabla de test

x Power resultado

25 2 5

25 3 2.92

49 7 1.74

Page 38: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Test manual de una funciónTest manual de una función

38

Valores para probar en el programa

x power epsion resultado

25 2 0.01 5.000122

25 3 0.0001 2.924016

49 7 0.001 1.743637

Tabla de test

x Power resultado

25 2 5

25 3 2.924017

49 7 1.743639

Hacer el test de una manera tan manual puede volverse engorroso.

Page 39: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Funciones de TestFunciones de Test

39

def findRoot(x, power, epsilon=0.01): ... return ans

def testFindRoot(): epsilon = 0.0001 for x in (0.25, -0.25, 2, -2, 8, -8): for power in range(1,4): print('Testing x = ' + str(x) +\ ' and power = ' + str(power)) result = findRoot(x, power, epsilon) if result == None: print(' No root') else: print(' ', result**power, '~=', x)

testFindRoot()

Función para calcular raíces

Función para hacer el test de la función que calcula la raíces

Invacion de la función de test

Archivo: testFindRoot.py

Page 40: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Funciones de TestFunciones de Test

40

Page 41: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Módulos

Buenas practicas de programación

Variables globales y locales

Argumentos y retornos

Módulos

A continuación…A continuación…

Page 42: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Modularizando el códigoModularizando el código

42

• Modularizar el código hace mas fácil mantenerlo y depurarlo, así mismo, permite el reúso del código.

• Concepto clave - Modulo:– Un modulo es un archivo python en el cual se coloca se colocan las definición

de una o mas funciones.– El modulo puede ser luego importado en el programa para reúso.– El modulo puede ser colocado en el mismo directorio con sus otros programas.

main.py

import geom

...

geom.py

pi = 3.14159

def area(radio): ... ...

Page 43: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Modularizando el códigoModularizando el código

43

import geom r = input('Ingrese el radio: ')r = float(r)print('pi: ', geom.pi) print('área: ', geom.area(r)) print('perímetro: ', geom.perimetro(r))print('superficie: ', geom.sfEsfera(r))print('volumen: ', geom.volEsfera(r))

pi = 3.14159

def area(radio): return pi*(radio**2)

def perimetro(radio): return 2*pi*radio

def sfEsfera(radio): return 4*pi*(radio**2)

def volEsfera(radio): return (4/3)*pi*(radio**3)

main.py geom.py

módulos

Page 44: Sesión 16: Funciones (2). 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática I Universidad

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia

Modularizando el códigoModularizando el código

44

Archivo: main.py

Archivo: geom.py