IWI131 Programación


Funciones



Departamento de Informática
Universidad Técnica Federico Santa María

Funciones

Hasta el momento se ha visto que existen funciones ya definidas que pueden ser utilizadas. Ejemplo de estas funciones son:

  • abs()
  • print()
  • float()
  • etc.

Sin embargo, en ocasiones necesitamos crear funciones para realizar ciertas tareas específicas. Para realizar esto, se deben tener presente 2 aspectos:

  • La definición de la función.
  • El adecuado llamado de la función previamente definida.

Definición de una función

Para definir una función se debe utilizar la palabra reservada def, seguida de la siguiente sintaxis:

def nombre_funcion(parametro1, parametro2, ...):

Toda función definida debe tener un nombre luego de la palabra def. Este nombre cumple las mismas restricciones de nombres de variables.

Los parámetros de entradas entre paréntesis redondos ( ). Estos parámetros deben ir separados por comas y pueden ser una cantidad variable. Se termina al final con el caracter dos puntos :.

Definición de una función

Después de escribir la primera línea de código de la función, se deben escribir todas las instrucciones. Estas instrucciones deben estar indentadas de tal manera que todas esten dentro de la función

En la mayoria de los casos, las funciones tienen una instrucción especial representada por la palabra reservada return. Esta instrucción especial nos indica el momento en que nos salimos de la función, retornando algun valor de interes.

En trinket, una función es:

In [1]:
from IPython.display import IFrame
IFrame("https://trinket.io/embed/blocks/0cda3d2969?hideGeneratedCode=true", width="100%", height="400")
Out[1]:

Un ejemplo de la misma función en Python es:

In [2]:
def discriminante(a,b,c):
    resultado = b**2-4*a*c
    return resultado

Con esto, ya hemos desarrollado nuestra primera función, pero ahora nos hace falta poder utilizarla.

Llamado de la función

Una vez la función es creada, como en el ejemplo anterior, podemos utilizarla. A este proceso comunmente se le llama: llamar la función.

Para llamar a una función, se debe saber el nombre de esta y los parámetros que recibe. Es importante respetar el número de parámetros.

En Trinket, una función puede ser llamada al usar su bloque respectivo e ingresando los parámetros requeridos.

In [3]:
from IPython.display import IFrame
IFrame("https://trinket.io/embed/blocks/1b661715ca?hideGeneratedCode=true", width="100%", height="400")
Out[3]:

Siguiendo el ejemplo anterior, llamar a una función en Python consiste en lo siguiente:

In [4]:
var_resultado = discriminante(1,4,2)

Con lo anterior, guardamos el dato que calcula la función (variable resultado) en la variable var_resultado. Veamos que nos entrega:

In [5]:
var_resultado
Out[5]:
8

Recuerde utilizar una variable para guardar lo que entrega la función.

Si quisieramos hacer un programa que nos pudiera resolver las ecuaciones de segundo grado, nuestro código podría ser:

In [6]:
def discriminante(a,b,c):
    resultado = b**2-4*a*c
    return resultado

p1 = float(input('Ingrese el valor a:'))
p2 = float(input('Ingrese el valor b:'))
p3 = float(input('Ingrese el valor c:'))

var_resultado = discriminante(p1,p2,p3)

if var_resultado < 0:
    print('La ecuacion no tiene solucion real')
elif var_resultado == 0:
    sol = -p2 / (2*p1)
    print('La solucion es unica y es sol=', sol)
else:
    sol = (-p2 - (var_resultado**0.5))/(2*p1)
    sol2 = (-p2 + (var_resultado**0.5))/(2*p1)
    print('Las soluciones son:')
    print('sol=', sol)
    print('sol2=', sol2)
Ingrese el valor a:1
Ingrese el valor b:-1
Ingrese el valor c:-12
Las soluciones son:
sol= -3.0
sol2= 4.0

Diferencia entre print() y return

print() y return pueden tener un comportamiento muy parecido, pero no se les debe confundir, ya que son instrucciones completamente diferentes.

  • return es el resultado de una funcion, por lo tanto solo debe ir dentro de una función.
  • print() es una salida de un programa, puede ir tanto en una función (aunque no es tan común) como en el código de un programa principal (el main).
  • return se comporta muy parecido al print() cuando a la función se le llama de la consola (shell).
  • Lo anterior cambia cuando el codigo se ejecuta desde el archivo.

Recordemos la función, la cual estará guardada en un archivo llamado prueba.py:

In [7]:
def discriminante(a,b,c):
    resultado = b**2-4*a*c
    return resultado

Al ejecutar el archivo prueba.py no nos mostrará ningun resultado por pantalla, ya que el return no se comporta como un print() cuando se ejecuta desde un archivo.

Para obtener resultado por pantalla, se debe llamar la función:

In [8]:
discriminante(1,2,4)
Out[8]:
-12

Si queremos que al ejecutar el archivo prueba.py muestre inmediatamente el resultado de la función, debemos llamar a la función incluyendo un print().

Nuestro archivo prueba.py entonces quedaria como:

In [9]:
def discriminante(a,b,c):
    resultado = b**2-4*a*c
    return resultado

print(discriminante(1,2,4))
-12

Debemos ejecutar la función desde la consola para que nos entregue el resultado. Y al llamarla, debemos entregarle los valores de los parámetros. NO OLVIDAR!!

Lo que hace python es cargar la función en memoria y luego mostrar por pantalla (gracias al print()) el resultado de llamarla.

Ejercicios

1.- Escriba la función promedio(n1, n2, n3) que reciba las notas de los 3 certámenes de la asignatura y retorne el valor del promedio.

In [10]:
def promedio(n1, n2, n3):
    suma = p1 + p2 + p3
    prom = suma/3
    return prom

2.- El riesgo de que una persona sufra enfermedades coronarias depende de su edad y su índice de masa corporal.

El Indice de masa corporal (IMC) es el cociente entre el peso del individuo en kilos y el cuadrado de su estatura en metros.

Escriba una función que reciba como parámetros la estatura, el peso y la edad de la persona , y le entregue su condición de riesgo.

edad < 45 edad ≥ 45
IMC < 22 bajo medio
IMC ≥ 22 medio alto
In [11]:
def IMC(est, peso, edad):
    indice = peso/(est**2)
    if edad < 45:
        if indice < 22.0:
            condicion = 'bajo'
        else:
            condicion = 'medio'
    else:
        if indice < 22.0:
            condicion = 'medio'
        else:
            condicion = 'alto'
    return condicion

3.- Un viajero desea saber cuánto tiempo tomó un viaje que realizó. Él conoce la duración (en minutos) de cada uno de los tramos del viaje por separado.

Desarrolle un programa, que contenga al menos una función, que permita ingresar los tiempos de viaje de los tramos y entregue como resultado el tiempo total de viaje en formato: horas horas con minutos minutos

El programa deja de pedir tiempos de viaje cuando se ingresa un 0.

Ejemplo:

  • Duración del tramo: 15
  • Duración del tramo: 30
  • Duración del tramo: 87
  • Duración del tramo: 0
  • Tiempo total de viaje : 2 horas con 12 minutos
In [12]:
def transformacion(total_min):
    horas = total_min/60
    return int(horas)

def transformacion2(total_min):
    minutos = total_min%60
    return minutos

flag = True
total_min = 0
while flag:
    minutos = int(input('Duracion del tramo: '))
    if minutos == 0:
        flag = False
    else:
        total_min = total_min + minutos

horas = transformacion(total_min)
minutos = transformacion2(total_min)
print('Tiempo total de viaje:', horas, 'horas con', minutos, 'minutos')
Duracion del tramo: 40
Duracion del tramo: 30
Duracion del tramo: 60
Duracion del tramo: 70
Duracion del tramo: 0
Tiempo total de viaje: 3 horas con 20 minutos

4.- Realice el ruteo del problema anterior con las siguientes duraciones de tramos: 40, 35, 60, 70.

In [ ]: