DIVIDE Y VENCERÁS

Preview:

Citation preview

05/02/19

Ing. Roberto Martínez Román -rmroman@itesm.mx 1

D I V I D E Y V E N C E R Á S

Funciones

Ing. Roberto Martínez Román - rmroman@itesm.mx

Capítulo 3 y 6 del libro interactivo

¿Qué es una función?

� Las funciones en matemáticas, definen relaciones entre valores. Por ejemplo,

f(x) = sin(x)Si hacemos que x sea un valor particular como 45 grados, la función realiza un cálculo y nos regresa el resultado 0.7071.

Decimos que x es el argumento y que la función regresa un valor.

Ing. Roberto Martínez Román - rmroman@itesm.mx

05/02/19

Ing. Roberto Martínez Román -rmroman@itesm.mx 2

Funciones

Ing. Roberto Martínez Román - rmroman@itesm.mx

� Una función es un grupo de instrucciones autocontenidas dentro del programa que realiza una tarea única.

� Las funciones ayudan al programador a resolver un problema de manera más simple. En lugar de escribir un programa que resuelve un problema grande, se escriben varias funciones que resuelven problemas pequeños.

Tomado de: Starting Out with Python, 2nd. editionCopyright 2012, Pearson Education,

Funciones

Ing. Roberto Martínez Román - rmroman@itesm.mx

05/02/19

Ing. Roberto Martínez Román -rmroman@itesm.mx 3

Funciones en Python

� Las funciones en Python tienen las siguientes características:¡ Representan una operación simple.¡ Toma cero o más parámetros como entrada.¡ Pueden regresar, o no, un valor de salida.

La función es importante, porque representa el concepto de encapsulamiento.

Ing. Roberto Martínez Román - rmroman@itesm.mx

FunciónEntrada Salida

Ventajas de las funciones

Ing. Roberto Martínez Román - rmroman@itesm.mx

Código más simple Reúso de código

Mejores pruebas

Desarrollo más rápido

Trabajo en equipo

05/02/19

Ing. Roberto Martínez Román -rmroman@itesm.mx 4

Nombre de funciones

Ing. Roberto Martínez Román - rmroman@itesm.mx

� Seguimos las mismas reglas que definimos para las variables. Y agregamos:¡ Deben nombrarse con verbos en infinitivo.

÷calcularImpuesto÷resolverEcuacion÷sumarListaDeValores÷promediar÷ leerParciales÷esMayor (funciones con tipo de regreso booleano)÷estaEnRango

Definiendo funciones

Ing. Roberto Martínez Román - rmroman@itesm.mx

Indentación obligatoria

� Para definir una función en Python seguimos este formato:

def nombreDeFuncion(parámetros) :instruccionesinstrucciones

return valor # Opcional

05/02/19

Ing. Roberto Martínez Román -rmroman@itesm.mx 5

Programa con funciones

Ing. Roberto Martínez Román - rmroman@itesm.mx

def main() : # Declaración de la función

print("Hola")print("Mundo")

main() # Llama a la función main

Dibujando con la tortuga

Ing. Roberto Martínez Román - rmroman@itesm.mx

� Escribe código con funciones para dibujar las siguientes figuras.

dibujarCuadro100 dibujarCuadro50

100 px 50 px

05/02/19

Ing. Roberto Martínez Román -rmroman@itesm.mx 6

Comandos de la tortuga

Ing. Roberto Martínez Román - rmroman@itesm.mx

https://docs.python.org/3.6/library/turtle.html

Encapsular funcionalidad

Ing. Roberto Martínez Román - rmroman@itesm.mx

� Escribe una función para trazar un cuadro de longitud 100 y después úsala para reproducir las figuras anteriores.

� Modifica la función anterior para que reciba como parámetro la longitud del cuadro que va a dibujar.

05/02/19

Ing. Roberto Martínez Román -rmroman@itesm.mx 7

La función

Ing. Roberto Martínez Román - rmroman@itesm.mx

import turtleturtle.shape("turtle")

def dibujarCuadrado(longitud):turtle.forward(longitud)turtle.left(90)turtle.forward(longitud)turtle.left(90)turtle.forward(longitud)turtle.left(90)turtle.forward(longitud)turtle.left(90)

Función que regresa un valor

Ing. Roberto Martínez Román - rmroman@itesm.mx

def convertirPulgadasCm(pulgadas) :cm = 2.54 * pulgadasreturn cm

def main() :pulg = int(input("¿Cuántas pulgadas quiere convertir? "))cm = convertirPulgadasCm(pulg)print("%d pulgadas equivalen a %.2f cm" % (pulg, cm))

# Programa principalmain()

Definición de la función

Llamada a la función

05/02/19

Ing. Roberto Martínez Román -rmroman@itesm.mx 8

Función que regresa un valor

Ing. Roberto Martínez Román - rmroman@itesm.mx

def convertirPulgadasCm(pulgadas) :cm = 2.54 * pulgadasreturn cm

def main() :pulg = int(input("¿Cuántas pulgadas quiere convertir? "))cm = convertirPulgadasCm(pulg)print("%d pulgadas equivalen a %.2f cm" % (pulg, cm))

# Programa principalmain()

Parámetro

Argumento

Una copia del valor

Ejercicios

Ing. Roberto Martínez Román - rmroman@itesm.mx

� Escribe una función que convierta grados Fahrenheit a grados Celsius.

� Escribe una función que convierta dólares canadienses a pesos mexicanos.

� Escribe una función que reciba la edad de una persona en años y meses enteros, y que regrese el número aproximado de días que ha vivido. Agrega la aproximación por años bisiestos.

05/02/19

Ing. Roberto Martínez Román -rmroman@itesm.mx 9

Diseñando programas usando funciones

Ing. Roberto Martínez Román - rmroman@itesm.mx

� Diseño Arriba-Abajo. Top-Down.

main()

imprimir()calcularNomina()leerDatos()

leerEmpleados() leerPagoHora() leerHoras()

Ejercicio

Ing. Roberto Martínez Román - rmroman@itesm.mx

� Elabora un diseño Top-Down para el siguiente problema.¡ Escribe un programa que pida al usuario la altura de un triángulo

equilátero, lo dibuja en la pantalla e imprime el área y perímetro.

¡ Las funciones trigonométricas están en la librería math.¡ Las funciones trigonométricas reciben radianes como parámetro.

alturaÁrea = 5773.50Perímetro = 346.41

05/02/19

Ing. Roberto Martínez Román -rmroman@itesm.mx 10

Solución

Ing. Roberto Martínez Román - rmroman@itesm.mx

main

leer altura dibujar

calcularLado dibujarTriangulo

calcularArea calcularPerimetro imprimir

altura

altura

lado

altura

lado

altura área

altura

perímetro

área,

perímetro

Variables locales

Ing. Roberto Martínez Román - rmroman@itesm.mx

� Las variables locales son creadas dentro de una función y sólo existen dentro de esa función.

� El ámbito de la variable se refiere a la parte del programa en la cual la variable es accesible o conocida.

� El ámbito de una variable local es la función en la cual es creada.

� Puede haber variables locales en diferentes funciones con el mismo nombre.

05/02/19

Ing. Roberto Martínez Román -rmroman@itesm.mx 11

Parámetros

Ing. Roberto Martínez Román - rmroman@itesm.mx

� Los parámetros tienen el mismo ámbito de una variable local.

� Los parámetros reciben una copia del argumento, por lo tanto, los cambios que haces a un parámetro NO afectan al argumento.

Ámbito de las variables locales y parámetros

Ing. Roberto Martínez Román - rmroman@itesm.mx

def funcion_1():a = 10# instruciones# instruciones# instruciones

def funcion_2(p):q = 0# instrucionesprint(a) # error# instruciones

def funcion_3(c):p = 0 # localprint(a) # error# instrucionesprint(q) # error

05/02/19

Ing. Roberto Martínez Román -rmroman@itesm.mx 12

Variables globales

Ing. Roberto Martínez Román - rmroman@itesm.mx

� Las variables globales son accesibles en todo el programa. Incluye todas las funciones.

� El ámbito de una variable global es TODO el programa.

valor = 20def funcion():

print(valor) # accede a la variable global

funcion()print(valor) # accede a la variable global

Ámbito de las variables locales y parámetros

Ing. Roberto Martínez Román - rmroman@itesm.mx

a = 50

def funcion_1():b = 10 # locala = 5 # localprint(a)

def funcion_2(c):p = 0 # localprint(a) # globalprint(c) # local

print(a) # okfuncion_1()funcion_2(7)print(a)

05/02/19

Ing. Roberto Martínez Román -rmroman@itesm.mx 13

Variables globales

Ing. Roberto Martínez Román - rmroman@itesm.mx

� Cuando una función requiere modificar el valor de una variable global debe hacer un paso adicional.

valor = 20def funcion():

valor = 5print(valor) #local!!!

funcion()print(valor) #global!!!

valor = 20def funcion():

global valorvalor = 5print(valor) #global!

funcion()print(valor) #global!

Constantes globales

Ing. Roberto Martínez Román - rmroman@itesm.mx

� Se definen al inicio del programa y la convención es nombrarlas con mayúsculas.

IVA = 0.16

def funcion(precio) :total = precio + precio*IVAreturn total

totalAPagar = funcion(250)

Recommended