Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Definición de funciones
Índice de contenidos
I. Motivación
II. Definición de funciones
III. Argumentos
IV. La instrucción de retorno
V. Variables locales y visibilidad
VI. Documentación
VII.Haciendo una función
a = 2
b = -6
c = 4
d = (b**2 - 4*a*c)**(1/2)
x1 = (-b+d)/2/a
x2 = (-b-d)/2/a
(2.0, 1.0)
x1,x2
Informática - Grado en Física - UMU 3
Motivación
➢Resolver diferentes instancias de un mismo problema
❑Ejemplo: resolver ecuación de segundo grado
a = 1
b = 0
c = -9
d = (b**2 - 4*a*c)**(1/2)
Replicar todo el código
x1 = (-b+d)/2/a resulta poco práctico
x2 = (-b-d)/2/a
(3.0, -3.0)
x1,x2
Informática - Grado en Física - UMU 4
Motivación
➢Resolver diferentes instancias de un mismo problema
❑Ejemplo: calcular área de polígono irregular Una misma tarea se necesita
en varios pasos de un
▪ Descomposición en triángulos
programa más grande
s = (a+b+c)/2
r = s*(s-a)*(s-b)*(s-c) 6.0
sqrt(r)
Informática - Grado en Física - UMU 6
Motivación
➢Resolver diferentes instancias de un mismo problema
área PQR: 6.999999999999996
❑Ejemplo: calcular área de polígono irregular area PSR: 8.500000000000002
área total: 15.499999999999996
▪ Descomposición en triángulos
P = px,py = (-1,5)
# triángulo PSR
Q = qx,qy = (3,2)
a = sqrt( (px-sx)**2 + (py-sy)**2 )
R = rx,ry = (5,4)
b = sqrt( (px-rx)**2 + (py-ry)**2 )
S = sx,sy = (4,7)
c = sqrt( (sx-rx)**2 + (sy-ry)**2 )
# triángulo PQR
a = sqrt( (px-qx)**2 + (py-qy)**2 )
s = (a+b+c)/2
b = sqrt( (px-rx)**2 + (py-ry)**2 )
r = s*(s-a)*(s-b)*(s-c)
c = sqrt( (qx-rx)**2 + (qy-ry)**2 )
area2 = sqrt(r)
s = (a+b+c)/2
print('area PSR:',area2)
r = s*(s-a)*(s-b)*(s-c)
area1 = sqrt(r)
print('área total:',area1+area2)
print('área PQR:',area1)
Informática - Grado en Física - UMU 7
Motivación
➢Resolver diferentes instancias de un mismo problema
❑Ejemplo: calcular área de polígono irregular Una misma tarea se necesita
en varios pasos de un
▪ Descomposición en triángulos
programa más grande
✓Resultado correcto
Mucho código repetido
2 veces la fórmula de Herón
6 veces la distancia entre vértices
d = (b**2 - 4*a*c)**(1/2)
x1 = (-b+d)/2/a
x2 = (-b-d)/2/a
x1,x2
Informática - Grado en Física - UMU 9
Definición de funciones
➢Resolver el mismo problema con diferentes datos de entrada ➔
subrutina (equivalente informático del concepto de función)
❑Ejemplo: resolver ecuación de segundo grado
def ecu2g(a,b,c):
d = (b**2 - 4*a*c)**(1/2)
ecu2g(2,-6,4)
x1 = (-b+d)/2/a
x2 = (-b-d)/2/a
(2.0, 1.0)
return (x1,x2)
ecu2g(1,0,-9)
(3.0, -3.0)
Informática - Grado en Física - UMU 10
Definición de funciones
➢Función ≈ bloque de instrucciones con nombre
➢El nombre de la función debe ayudar a recordar su propósito
➢Cada vez que la usamos, ‘invocamos’ o ‘llamamos’ a la función
➢Parámetros/argumentos
❑Parámetros: permiten ejecutar un mismo algoritmo sobre diferentes
datos
❑Argumentos: datos específicos que se remiten a la función en cada
invocación con los que se reevalúa el código
Llamada/Invocación
Argumentos con los que
Nombre de la función se ejecutará la función
invocada ecu2g(2,-6,4)
Resultado devuelto por la
(2.0, 1.0) función
f(1) 6
print(b) 8
Informática - Grado en Física - UMU 18
Variables locales y visibilidad
➢Redefinir nombre global con global
❑Listas (objetos mutables) se pueden modificar sin global
❑Función pura = no modifica ningún dato global (esto es lo aconsejable, salvo en casos
justificados ➔ misma función puede ser útil para distintos programas)
a = 5
b = 8
Redefine el valor de la
def f(x):
variable global ‘b’ global b
b = a+x
print(b)
f(1) 6
print(b) 6 Informática - Grado en Física - UMU 19
Documentación
➢Uso de ‘cadenas de documentación’ o docstring
P = px,py = (-1,5)
# triángulo PSR
Q = qx,qy = (3,2)
a = sqrt( (px-sx)**2 + (py-sy)**2 )
R = rx,ry = (5,4)
b = sqrt( (px-rx)**2 + (py-ry)**2 )
S = sx,sy = (4,7)
c = sqrt( (sx-rx)**2 + (sy-ry)**2 )
# triángulo PQR
a = sqrt( (px-qx)**2 + (py-qy)**2 )
s = (a+b+c)/2
b = sqrt( (px-rx)**2 + (py-ry)**2 )
r = s*(s-a)*(s-b)*(s-c)
c = sqrt( (qx-rx)**2 + (qy-ry)**2 )
area2 = sqrt(r)
s = (a+b+c)/2
print('area PSR:',area2)
r = s*(s-a)*(s-b)*(s-c)
area1 = sqrt(r)
print('área total:',area1+area2)
print('área PQR:',area1)
Informática - Grado en Física - UMU 21
Haciendo una función
➢Calcular el área de un polígono irregular
1. Identificar qué parte convertir en función
•a) Resolver
Distanciadiferentes
entre vértices
instancias de un mismo problema
•b) Resolver
Área de el
unmismo
triángulo
problema con diferentes datos de entrada
P = px,py = (-1,5)
# triángulo PSR
Q = qx,qy = (3,2)
a = sqrt( (px-sx)**2 + (py-sy)**2 )
R = rx,ry = (5,4)
b = sqrt( (px-rx)**2 + (py-ry)**2 )
S = sx,sy = (4,7)
c = sqrt( (sx-rx)**2 + (sy-ry)**2 )
# triángulo PQR
a = sqrt( (px-qx)**2 + (py-qy)**2 )
s = (a+b+c)/2
b = sqrt( (px-rx)**2 + (py-ry)**2 )
r = s*(s-a)*(s-b)*(s-c)
c = sqrt( (qx-rx)**2 + (qy-ry)**2 )
area2 = sqrt(r)
s = (a+b+c)/2
print('area PSR:',area2)
r = s*(s-a)*(s-b)*(s-c)
area1 = sqrt(r)
print('área total:',area1+area2)
print('área PQR:',area1)
Informática - Grado en Física - UMU 22
Haciendo una función
➢Calcular el área de un polígono irregular
2. Identificar la entrada
a) Distancia entre vértices: coordenadas de los vértices
b) Área de un triángulo: lados
P = px,py = (-1,5)
# triángulo PSR
Q = qx,qy = (3,2)
a = sqrt( (px-sx)**2 + (py-sy)**2 )
R = rx,ry = (5,4)
b = sqrt( (px-rx)**2 + (py-ry)**2 )
S = sx,sy = (4,7)
c = sqrt( (sx-rx)**2 + (sy-ry)**2 )
# triángulo PQR
a = sqrt( (px-qx)**2 + (py-qy)**2 )
s = (a+b+c)/2
b = sqrt( (px-rx)**2 + (py-ry)**2 )
r = s*(s-a)*(s-b)*(s-c)
c = sqrt( (qx-rx)**2 + (qy-ry)**2 )
area2 = sqrt(r)
s = (a+b+c)/2
print('area PSR:',area2)
r = s*(s-a)*(s-b)*(s-c)
area1 = sqrt(r)
print('área total:',area1+area2)
print('área PQR:',area1)
Informática - Grado en Física - UMU 23
Haciendo una función
➢Calcular el área de un polígono irregular
3. Identificar el algoritmo
a) Distancia entre vértices: Teorema de Pitágoras
b) Área de un triángulo: Fórmula de Herón
P = px,py = (-1,5)
# triángulo PSR
Q = qx,qy = (3,2)
a = sqrt( (px-sx)**2 + (py-sy)**2 )
R = rx,ry = (5,4)
b = sqrt( (px-rx)**2 + (py-ry)**2 )
S = sx,sy = (4,7)
c = sqrt( (sx-rx)**2 + (sy-ry)**2 )
# triángulo PQR
a = sqrt( (px-qx)**2 + (py-qy)**2 )
s = (a+b+c)/2
b = sqrt( (px-rx)**2 + (py-ry)**2 )
r = s*(s-a)*(s-b)*(s-c)
c = sqrt( (qx-rx)**2 + (qy-ry)**2 )
area2 = sqrt(r)
s = (a+b+c)/2
print('area PSR:',area2)
r = s*(s-a)*(s-b)*(s-c)
area1 = sqrt(r)
print('área total:',area1+area2)
print('área PQR:',area1)
Informática - Grado en Física - UMU 24
Haciendo una función
➢Calcular el área de un polígono irregular
4. Identificar el valor de retorno
a) Distancia entre vértices: distancia
b) Área de un triángulo: área
P = px,py = (-1,5)
# triángulo PSR
Q = qx,qy = (3,2)
a = sqrt( (px-sx)**2 + (py-sy)**2 )
R = rx,ry = (5,4)
b = sqrt( (px-rx)**2 + (py-ry)**2 )
S = sx,sy = (4,7)
c = sqrt( (sx-rx)**2 + (sy-ry)**2 )
# triángulo PQR
a = sqrt( (px-qx)**2 + (py-qy)**2 )
s = (a+b+c)/2
b = sqrt( (px-rx)**2 + (py-ry)**2 )
r = s*(s-a)*(s-b)*(s-c)
c = sqrt( (qx-rx)**2 + (qy-ry)**2 )
area2 = sqrt(r)
s = (a+b+c)/2
print('area PSR:',area2)
r = s*(s-a)*(s-b)*(s-c)
area1 = sqrt(r)
print('área total:',area1+area2)
print('área PQR:',area1)
Informática - Grado en Física - UMU 25
Haciendo una función
➢Calcular el área de un polígono irregular
5. Definir la función
a) Distancia entre vértices: distancia
b) Área de un triángulo: area_triangulo
def distancia(v1x,v1y,v2x,v2y):
“““Calcula distancia entre vértices con Teorema de Pitágoras”””
return sqrt( (v1x-v2x)**2 + (v1y-v2y)**2 )
def area_triangulo(a,b,c):
“““Devuelve el área de un triángulo aplicando Fórmula de Herón”””
s = (a+b+c)/2
r = s*(s-a)*(s-b)*(s-c)
return sqrt(r)
P = px,py = (-1,5)
# triángulo PSR
Q = qx,qy = (3,2)
a = distancia(px,py,sx,sy)
R = rx,ry = (5,4)
b = distancia(px,py,rx,ry)
S = sx,sy = (4,7)
c = distancia(sx,sy,rx,ry)
# triángulo PQR
a = distancia(px,py,qx,qy)
area2 = area_triangulo(a,b,c)
b = distancia(px,py,rx,ry)
print('area PSR:',area2)
c = distancia(qx,qy,rx,ry)
area1 = area_triangulo(a,b,c)
print('área total:',area1+area2)
print('área PQR:',area1)
Informática - Grado en Física - UMU 27