CC 1002 Introduccin a la Programacin Funciones y

  • Slides: 21
Download presentation
CC 1002: Introducción a la Programación Funciones y módulos Nelson Baloian, José A. Pino

CC 1002: Introducción a la Programación Funciones y módulos Nelson Baloian, José A. Pino

funciones • Un programa tendrá normalmente varias funciones • funciones auxiliares hacen diseño más

funciones • Un programa tendrá normalmente varias funciones • funciones auxiliares hacen diseño más manejable, limpio y entendible • Ejemplo: def area. Anillo ( interior , exterior ): # Mala práctica return 3. 14 * exterior ** 2 - 3. 14 * interior ** 2 def area. Anillo ( interior , exterior ): return area. Circulo ( exterior ) - area. Circulo ( interior ) # Buena práctica: más clara, menos repeticiones

Problema “Una cadena de cines de Santiago tiene libertad para fijar los precios de

Problema “Una cadena de cines de Santiago tiene libertad para fijar los precios de las entradas. Claramente, mientras más cara sea la entrada, menos personas estarán dispuestas a pagar por ellas. En un reciente estudio de mercado, se determinó que hay una relación entre el precio al que se venden las entradas y la cantidad de espectadores promedio: a un precio de $5. 000 por entrada, 120 personas van a ver la película; por cada $500 de reducción en el precio de la entrada, los espectadores aumentan en 15. Desafortunadamente, mientras más personas ocupan la sala para ver la película, más se debe gastar en limpieza y mantenimiento general. Para reproducir una película, el cine gasta $180. 000. Asimismo, se gastan en promedio $40 por espectador por conceptos de limpieza y mantenimiento. El gerente del cine le encarga determinar cuál es la relación exacta entre las ganancias y el precio de las entradas para poder decidir a qué precio se debe vender cada entrada para maximizar las ganancias totales. ”

Identificar dependencias • Las ganancias corresponden a la diferencia entre los ingresos y los

Identificar dependencias • Las ganancias corresponden a la diferencia entre los ingresos y los gastos. • Los ingresos se generan exclusivamente a través de la venta de entradas. Corresponde al producto del valor de la entrada por el número de espectadores. • Los gastos están formados por dos ítems: un gasto fijo ($180. 000) y un gasto variable que depende del número de espectadores. • Finalmente, el enunciado del problema también especifica cómo el número de espectadores depende del precio de las entradas.

Una función por dependencia: # ganancias : int -> int # calcular ganancias como

Una función por dependencia: # ganancias : int -> int # calcular ganancias como la diferencia entre los # ingresos y los gastos dado precio. Entrada def ganancias ( precio. Entrada ): . . . # ingresos : int -> int # calcular el ingreso total , dado precio. Entrada def ingresos ( precio. Entrada ): . . . # gastos : int -> int # calcular los gastos totales , dado precio. Entrada def gastos ( precio. Entrada ): . . . # espectadores : int -> int # calcular el numero de espectadores , dado precio. Entrada def espectadores ( precio. Entrada ): . . .

Primera Regla • Antes de escribir cualquier línea de código siga la receta de

Primera Regla • Antes de escribir cualquier línea de código siga la receta de diseño para cada función: • formule el contrato, encabezado y propósito de la función, plantee ejemplos de uso relevantes y formule casos de prueba para verificar que su función se comportará correctamente.

Funciones completas # ganancias : int -> int # calcular ganancias como la diferencia

Funciones completas # ganancias : int -> int # calcular ganancias como la diferencia entre los # ingresos y los gastos dado precio. Entrada def ganancias( precio. Entrada ): return ingresos ( precio. Entrada ) - gastos( precio. Entrada ) # ingresos : int -> int # calcular el ingreso total , dado precio. Entrada def ingresos ( precio. Entrada ) : return espectadores( precio. Entrada ) * precio. Entrada # gastos : int -> int # calcular los gastos totales , dado precio. Entrada def gastos ( precio. Entrada ): return 180000 + espectadores( precio. Entrada ) * 40 # espectadores : int -> int # calcular el numero de espectadores , dado precio. Entrada def espectadores ( precio. Entrada ): return 120 + ( 5000 – precio. Entrada ) * 15/500

Segunda regla • Escribir directamente la expresión para calcular el número de espectadores en

Segunda regla • Escribir directamente la expresión para calcular el número de espectadores en todas las funciones es altamente desventajoso (Por ej. en el caso de querer modificar este cálculo). • Además el código resultante sería completamente ilegible. • Diseñe funciones auxiliares para cada dependencia entre cantidades mencionadas en la especificación de un problema y por cada dependencia descubierta al elaborar ejemplos de casos de uso. Siga la receta de diseño para cada una de ellas.

Tercera regla • Cuando hay un valor que se repite mucho es conveniente definirlo

Tercera regla • Cuando hay un valor que se repite mucho es conveniente definirlo con una variable • Ejemplo: en un programa que usa muchas veces el valor de PI podemos hacer PI = 3. 14 y usar la variable PI cada vez que sea necesario • Si es necesario cambiarlo (por ejemplo para poner más dígitos) hay que cambiarlo una vez • Dé nombres relevantes a las constantes que utilizará frecuentemente en su programa, y utilice estos nombres en vez de hacer referencia directa a su valor.

Módulos • Programación modular: técnica de diseño que separa las funciones de un programa

Módulos • Programación modular: técnica de diseño que separa las funciones de un programa en módulos, • Definen una finalidad única y contienen todo lo necesario, código fuente y variables, para cumplirla. • Un módulo representa una separación de intereses, mejorando la mantenibilidad de un software forzando límites lógicos entre sus componentes. • Facilita la búsqueda e identificación de errores. • Los módulos en Python se guardan en archivos con extensión. py

Ejemplo: funciones de triángulo Importa módulo math Para usar función sqrt

Ejemplo: funciones de triángulo Importa módulo math Para usar función sqrt

Programas interactivos • Muchas veces se requiere crear programas que poseen interacción con el

Programas interactivos • Muchas veces se requiere crear programas que poseen interacción con el usuario: pedir datos al usuario e imprimir mensajes en pantalla. • Python provee dos funciones: input y raw_input. La primera de ellas, input, recibe como parámetro un mensaje de tipo texto para el usuario y recupera el dato ingresado. >>> numero = input (’Ingrese un numero ’) -> Ingrese un numero 10 >>> numero -> 10 >>> doble = numero * 2 >>> doble -> 20

Ingreso de texto con input • Con la función input, el tipo de la

Ingreso de texto con input • Con la función input, el tipo de la variable entregado será el más adecuado a lo que ingrese el usuario. Si el usuario entrega un numero, la variable será de tipo numérico, y si el usuario entrega una palabra o frase, la variable será de tipo texto. >>> nombre = input (’Cual es su nombre ? ’) -> Cual es su nombre ? ’Enrique ’ >>> nombre -> ’Enrique ’ • Notar que valores de tipo texto deben estar entre comillas para ser identificados como tal por el interprete. Al ingresar texto sin comillas, el interprete mostrará un error en pantalla.

Ingreso de texto con raw_input • Con la función raw_input, lo que se ingrese

Ingreso de texto con raw_input • Con la función raw_input, lo que se ingrese será de tipo texto >>> numero = raw_input(’Ingrese un numero ’) -> Ingrese un numero 10 >>> numero -> ’ 10’ >>> doble = numero * 2 >>> doble -> ’ 1010’ • Notar que lo que se ingrese no contiene comillas. Es interpretado como texto por el programa.

La instrucción print >>> print ’Hola , mundo !’ -> Hola , mundo !

La instrucción print >>> print ’Hola , mundo !’ -> Hola , mundo ! • Cuando queremos mostrar más de un texto o número en una misma línea, por ejemplo dos frases seguidas, podemos unirlas por comas. Esto es equivalente a crear un elemento de tipo texto generado con el operador +. >>> nombre = input (’Cual es su nombre ? ’) -> Cual es su nombre ? ’Enrique ’ >>> apellido = input (’Cual es su apellido ? ’) -> Cual es su apellido ? ’Jorquera ’ >>> print ’Su nombre es ’, nombre , apellido -> Su nombre es Enrique Jorquera

Usando todo • Ya que sabemos cómo preguntar información al usuario, sería interesante construir

Usando todo • Ya que sabemos cómo preguntar información al usuario, sería interesante construir un programa que pregunte los lados de un triangulo al usuario y utilice nuestro modulo para calcular los valores de su perímetro y área. • Para realizar este programa, debemos realizar tres pasos: 1. Importar el módulo creado; 2. preguntar por los valores necesarios, en este caso los lados del triángulo; 3. utilizar el módulo triangulo para calcular el área y perímetro.

Usando un módulo para probar el módulo triangulo. py Se puede usar import triangulo

Usando un módulo para probar el módulo triangulo. py Se puede usar import triangulo i 1= input(‘ingrese el largo del primer lado’) i 2= input(‘ingrese el largo del segundo lado’) i 3= input(‘ingrese el largo del tercer lado’) print ‘El perimetro del triangulo es ‘, perimetro(i 1, i 2, i 3) print ‘El area del triangulo es ‘, area(i 1, i 2, i 3)

Módulo predefinido math: con funciones matemáticas • • • función significado ejemplo resultado sqrt(x)

Módulo predefinido math: con funciones matemáticas • • • función significado ejemplo resultado sqrt(x) x, math. sqrt(4) 2. 0 pow(x, y) xy math. pow(4, 0. 5) 2. 0 exp(x) ex math. exp(1) 2. 71. . . log(x) logex math. log(math. e) 1. 0 sin(x) seno de angulo x math. sin(math. pi) 0. 0 cos(x) coseno de x math. cos(math. pi) -1. 0 tan(x) tangente de x math. tan(math. pi) 0. 0 asin(x) arco-seno de x math. asin(0) 3. 14… acos(x) arco-coseno x math. acos(-1) 3. 14… atan(x) arco-tangente x math. atan(0) 3. 14… x 0 #nombre: num -> float import math: incluye funciones y valores de math. pi y math. e help(math): muestra lista completa de funciones matemáticas

Para la próxima clase (Jueves) Leer capítulo 5 del apunte!!

Para la próxima clase (Jueves) Leer capítulo 5 del apunte!!