presentacion python final

97
Python Capítulos 1 al 5 del libro: How to Think Like a Computer Scientist Por: Héctor L. Rodríguez, Rubén Quiñones y Alexander Hernández Clase: Lógica Matemática

Upload: alex

Post on 28-Jun-2015

1.174 views

Category:

Technology


4 download

DESCRIPTION

Python

TRANSCRIPT

Page 1: Presentacion python final

Python Capítulos 1 al 5 del libro:

How to Think Like a Computer Scientist

Por: Héctor L. Rodríguez, Rubén Quiñones y Alexander Hernández Clase: Lógica MatemáticaProfesor: Balbino García

Page 2: Presentacion python final

La Manera del Programa

La meta de este libro es enseñarnos a pensar como científicos de computadoras.

La habilidad más importante de un científico es poder resolver problemas.

Page 3: Presentacion python final

Para resolver un problema se deben seguir ciertos pasos.

Recopilar toda la información relacionada con el problema a resolver.

Establecer todas las posibles estrategias para resolver el problema.

Escoger la estrategia más adecuada de acuerdo a las circunstancias.

La Manera del Programa

Page 4: Presentacion python final

El proceso de aprender a programares una oportunidad excelente parapracticar el proceso de solucionarproblemas.

Por eso se le llama a esta parte ‘Lamanera del programa’

La Manera del Programa

Page 5: Presentacion python final

• Un programa es una secuencia de instrucciones que la computadora ejecuta una a una para realizar una o más funciones.

• El programa puede ser escrito en lenguaje de alto nivel, de bajo nivel o lenguaje de máquina.

¿Qué es un programa?

Page 6: Presentacion python final

• Existen muchos lenguajes de alto nivel tales como C++, Pascal, Basic y Fortran.

• El lenguaje de alto nivel que estudiamos en este libro se llama Python

• Los programas pueden ser ejecutados por un interprete o pueden ser compilados y convertidos a lenguaje de máquina para que el procesador de la máquina lo ejecute directamente.

• Python es un lenguaje interpretado.

¿Qué es un programa?

Page 7: Presentacion python final

• Las instrucciones que usa un programa se dividen en cinco grupos:A) Entrada – Son instrucciones que se usan para registrar data proveniente del teclado, de un archivo o cualquier otro dispositivo.B) Salida – Se usan para mostrar data o información en la pantalla, en la impresora,

para guardar data en un archivo o controlar algún dispositivo.

¿Qué es un programa?

Page 8: Presentacion python final

C) Matemáticas – Son instrucciones usadas para realizar operaciones matemáticas tales como suma, resta, multiplicación, etc.

D) Condición – Estas instrucciones se ejecutan cuando se cumple alguna condición.

E) Repetición – Se usan cuando hay que repetir ciertas partes de un programa con alguna variación.

¿Qué es un programa?

Page 9: Presentacion python final

• El proceso de depuración o ‘debugging’ es el proceso de localizar y corregir los errores que contiene un programa.

• Una de las habilidades más importantes de un programador es la de localizar y corregir errores en los programas.

• Este es un proceso cíclico y contínuo de arreglo y prueba hasta obtener el resultado deseado.

¿Qué es un depuración?

Page 10: Presentacion python final

Existen tres tipos de errores en programación:

A) Error de sintáxis – Ocurre cuando las instrucciones no se escriben correctamente y de acuerdo a las

reglas estructurales del lenguaje.

¿Qué es un depuración?

Page 11: Presentacion python final

B) Error de ejecución – Son errores causados por instrucciones que tratan de ejecutar una operación que no está permitida. Por ejemplo dividir por cero causaría un error de ‘Overflow’.

¿Qué es un depuración?

Page 12: Presentacion python final

C) Error de semántica – En este caso, el programa corre bien, en el sentido de que no aparecen mensajes de error,

pero no se obtiene el resultado esperado. Este tipo de error también se conoce como error de lógica.

¿Qué es un depuración?

Page 13: Presentacion python final

• Lenguajes naturales – Son los que la gente usa para comunicarse como el español, inglés y francés.

• Lenguajes formales – Son lenguajes diseñados para aplicaciones específicas.

• Por ejemplo, la notación usada en las operaciones matemáticas, las equaciones que expresan las reacciones químicas y los lenguajes de programación son lenguajes formales.

Lenguajes Formales y Naturales

Page 14: Presentacion python final

>> print ”Hello World!”Hello World!

• Este es el ejemplo de una instrucción ‘print’. Esta instrucción imprime en la pantalla “Hello World!”, una constante de valor alfanumérico o literal.

El Primer Programa

Page 15: Presentacion python final

• Variable – Es un nombre que identifica y almacena un valor.

• Valor – Es un número o literal que puede ser almacenado en una variable.

• Tipos de variables – Las variables se pueden clasificar de acuerdo al valor que almacenan. Por ejemplo: int, Float, String.

¿Qué es una variable?

Page 16: Presentacion python final

>> message = “Hello World!”>> n = 17>> pi = 3.1416

• La instrucción de asignación crea nuevas variables y les asigna valores.

Asignando valor a una variable

Page 17: Presentacion python final

>> type(message)<type ‘str’>>> type(n)<type ‘int’>>> type(pi)<type ‘float’>• Podemos examinar el tipo de una variable

preguntándole al interprete.

Verificando el tipo de una variable

Page 18: Presentacion python final

• Los nombres de las variables deben ser significativos y de acuerdo al tipo de valor que almacenan.

• Pueden tener un largo arbitrario y pueden contener letras, números y barritas ‘_’, aunque el primer carácter debe ser una letra.

• Pedro y pedro son dos variables diferentes.

Nombres de Variables

Page 19: Presentacion python final

>> 76trombones = ‘Banda’SyntaxError: invalid syntax>> more$ = 10000SyntaxError: invalid syntax>> class = ‘’Computer Science’SyntaxError: invalid syntax

• 76trombones es ilegal por empezar con un número y more$ porque el signo $ es ilegal.

Nombres de Variables

Page 20: Presentacion python final

• En el ejemplo anterior ‘class’ no se puede usar como variable porque ‘class’ representa una instrucción interna del lenguaje así como ‘’print’. A estas instrucciones privadas del lenguaje se les conoce en inglés como ‘keywords’.

• Python tiene 29 keywords: class, print, and, if, else, return, …, etc.

Keywords

Page 21: Presentacion python final

• Una expresión es una combinación de valores, variables y operadores que al evaluarse producen un resultado.

>> x = 1 + 2>> x3>>• En esta expresión ‘+’ es un operador y ‘1’

y ‘2’ son los operandos.

Evaluando Expresiones

Page 22: Presentacion python final

Orden de Operaciones

• Python sigue las mismas reglas que se usan en matemáticas para realizar las operaciones:1) Paréntesis2) Exponenciación ‘3*1**3 = 3’3) Multiplicación y División4) Suma y Resta5) Operadores con la misma prioridad se evalúan de izquierda a derecha.

Page 23: Presentacion python final

Operaciones con Literales• Con variables alfanuméricas (strings) no se pueden

realizar operaciones numéricas.A) Operador (+) - Une dos valores literales, el fin del primero con el principio del segundo.

Ejemplo: >> fruta = ‘Piña’ >> preparacion = ‘colada’ >> print fruta+preparación Piña colada

Page 24: Presentacion python final

Operaciones con Literales

B) Operador(*) – Repite el valor literal el número de veces que se multiplique. Ejemplo:

>> fruit = “pera ” >> n_peras = 3 * fruit >> print n_peras

pera pera pera

Page 25: Presentacion python final

Composición

• Una instrucción se puede componer con varios tipos de expresiones mientras valide las reglas de sintáxis del lenguaje.Ejemplo:>> hours = 37>> wage = 7.25>> print “Salary: ”,hours*wageSalary = 268.25>>_

Page 26: Presentacion python final

Comentarios

• Los comentarios en un programa ayudan a poder entender su lógica a personas que nunca lo han visto y también a su creador luego que ha pasado mucho tiempo.

• En el lenguaje python podemos expresar comentarios usando el signo ‘#’ o dos ‘//’Ejemplos:// Esta linea es un comentario# Esta también.

Page 27: Presentacion python final

Funciones

Page 28: Presentacion python final

Function calls• Ejemplo de un llamado de función (function call):

>>> type("32")<type ’str’>

• El nombre de la función es type y ella muestra el tipo de valor o variable.

• El valor o variable, el cual es llamado el argumento de la función, tiene que ser cerrado en paréntesis. Es común decir que una función toma un argumento y devuelve un resultado. El resultado es llamado el valor devuelto.

• En vez de obtener con print el valor devuelto, podemos asignarlo a una variable:

>>> betty = type("32")>>> print betty<type ’str’>

Page 29: Presentacion python final

• Como otro ejemplo, la función id toma el valor o una variable y devuelve unentero que actúa como único identificador del valor:

>>> id(3)134882108>>> betty = 3>>> id(betty)134882108

• Cada valor tiene un id, el cual es un número único relacionado a donde éste está guardado en la memoria de la computadora. El id de una variable es el id del valor al cual se refiere.

Page 30: Presentacion python final

Conversión de tipo (Type)• Python provee una colección de funciones pre-incluidas que convierten valores de un tipo a otro.

• La función int toma cualquier valor y lo convierte en un entero, si es posible o de otra forma “protesta”:

>>> int("32")32

>>> int("Hello")ValueError: invalid literal for int(): Hello

• Int también puede convertir valores floating point a enteros, pero recordemos que eso trunca la parte fraccionaria:

>>> int(3.99999)3

>>> int(-2.3)-2

Page 31: Presentacion python final

• La función float convierte enteros y strings a números con punto decimal (floating-point):

>>> float(32)32.0

>>> float("3.14159")3.14159

• Finalmente,la función str convierte a tipo string:

>>> str(32)’32’

>>> str(3.14149)’3.14149’

Page 32: Presentacion python final

Coerción de tipo• Division

• Supongamos que deseamos calcular la fracción de una hora que ha transcurrido. La expresión,minute / 60, hace aritmética de números enteros, así que el resultado será siempre 0, aún a 59 minutosde una hora.

• Una solución es convertir minuto a decimal (floating-point) y hacer división de decimales floating-point:

>>> minute = 59>>> float(minute) / 600.983333333333

Page 33: Presentacion python final

• Alternativamente, podemos tomar ventaja de las reglas para conversión de tipo automática, la cual es llamada coerción de tipo. Para los operadores matemáticos, si cualquier operando es un decimal (float), el otro es automáticamente convertido en un decimal (float):

>>> minute = 59>>> minute / 60.00.983333333333

• Haciendo el denominador un decimal, forzamos Phyton a hacer división de decimales.

Page 34: Presentacion python final

Funciones matemáticas• En matemática, trabajamos con funciones como sin y log, y hemos aprendido a evaluar

expresiones como sin(pi/2) y log(1/x).

• Primero, evaluamos la expresión en paréntesis (el argumento). Por ejemplo, pi/2 es aproximadamente 1.571 y 1/x es 0.1 (si x fuera10.0).

• Entonces, evaluamos la función , lo mismo buscándolo en una tabla o realizando varios cómputos. El seno de 1.571 es 1 y log of 0.1 is -1 (asumiendo que este log indica el logaritmo con base 10).

• Este proceso puede ser aplicado repetidamente para evaluar expresiones mas complicadascomo log(1/sin(pi/2)). Primero, evaluamos el argumento de la función más interna,luego evalúa la función, y así sucesivamente.

• Python tiene un módulo matemático que provee de las funciones matemáticas más familiares.

• Un módulo es un archivo que contiene una colección de funciones relacionadas agrupadas .

Page 35: Presentacion python final

• Antes de que podamos usar las funciones de un módulo, tenemos que importarlas:>>> import math

• Para llamar una de las funciones, tenemos que especificar el nombre del módulo y el nombre de la función, separados por un punto ( dot, también conocido como period). Este formato es llamado notación de punto (dot notation).

• >>> decibel = math.log10 (17.0)

>>> angle = 1.5>> height = math.sin(angle)

• >El primer enunciado (statement) asigna decibel al logaritmo de 17, base 10. También hay una función llamada log que toma logaritmo base e.

• El tercer enunciado consigue el seno del valor del ángulo variable. sin y las otras funciones trigonométricas (cos, tan, etc.) toman argumentos en radianes. Para convertir de grados a radianes, divide entre 360 y multiplica por 2*pi.

Page 36: Presentacion python final

• Por ejemplo,Para conseguir el seno de 45 grados, primero calcula el ángulo en radianes y luego toma el seno:

>>> degrees = 45>>> angle = degrees * 2 * math.pi / 360.0>>> math.sin(angle)0.707106781187

• La constante pi es además parte del módulo matemático. Si queremos, podemos revisarlo comparándolo con la raíz cuadrada de dos dividido entre dos:

>>> math.sqrt(2) / 2.00.707106781187

Page 37: Presentacion python final

Composición• Tal como las funciones matemáticas, las funciones de Python pueden ser compuestas,

o sea que usamos una expresión como parte de otra.

• Por ejemplo, podemos usar cualquier expresión como un argumento para una función:>>> x = math.cos(angle + math.pi/2)

• Este enunciado toma el valor de pi, lo divide entre 2 y suma el resultado al valor del ángulo. La suma es entonces pasada como un argumento a la función cos.

• También podemos tomar el resultado de una función y pasarlo como un argumento para otro:

• >>> x = math.exp(math.log(10.0))

• Este enunciado consigue la base log e de 10 y entonces eleva e a esa potencia. El resultado es asignado a x.

Page 38: Presentacion python final

Añadir nuevas funciones• También es posible añadir nuevas funciones. Crear nuevas funciones para resolver problemas

particulares es una de las cosas más usadas acerca de un lenguage de programación general.

• En el contexto de programación, una función es nombrada secuencia de enunciados que realizan una operación deseada. Esta operación es especificada en una definición de función.

• La sintaxis para una función es:

• def NAME( LIST OF PARAMETERS ):• STATEMENTS

• Podemos hacer cualquier nombre para las funciones que creamos, excepto aquellos nombres usados como palabras clave de Python. La lista de parámetros especifica qué información, si alguna, tenemos que proveer para usar la nueva función.

• Puede haber cualquier número de enunciados dentro de la función, pero tienen que estar separados del margen izquierdo. En los ejemplos del libro, se usa una separación de dos espacios.

Page 39: Presentacion python final

• La primera pareja de funciones que describe el libro no tiene parámetros, así que la sintaxis se ve así:

def newLine():print

• Esta función es llamada newLine. El paréntesis vacío indica que no tiene parámetros. Esto contiene un solo enunciado, que produce una nueva línea (newline. (Eso es lo que ocurre cuando se usa un comando de print sin algún argumento.)

Page 40: Presentacion python final

• La sintaxis para llamar la nueva función es la misma que la sintaxis para funciones preincluídas en Phyton:

print "First Line."newLine()print "Second Line."

• La salida para ese programa es:

First line.

Second line.

• Nota el espacio extra entre las dos líneas

Page 41: Presentacion python final

• ¿Qué si quería más espacio entre las líneas? Podemos llamar la misma función repetidamente:

print "First Line."newLine()newLine()newLine()print "Second Line.“

• O podríamos escribir una nueva función nombrada threeLines que imprime tres nuevas líneas:

def threeLines():newLine()newLine()newLine()print "First Line."threeLines()print "Second Line."

Page 42: Presentacion python final

• Esta función contiene tres enunciados, todos de los cuales están separados por dos espacios.

• Como el próximo enunciado no está separado, Python sabe que éste no es parte de la función.

• Hay algunas cosas a notar acerca de este programa:

• 1. Se puede llamar al mismo procedimiento repetidamente. De hecho, esto es muy común y útil.

• 2. Se puede tener una función llamando a otra; en este caso threeLines llama a newLine.

• Este ejemplo muestra dos de muchas razones para las que sirve crear nuevas funciones:

• • Crear una nueva función nos da la oportunidad de nombrar un grupo de enunciados.

Page 43: Presentacion python final

• Las funciones pueden simplificar un programa escondiendo un cómputo complejo detrás de un sólo comado y usando palabras en nuestro idioma en lugar de un código misterioso.

• • Crear una nueva función puede hacer a un programa más pequeño eliminando códigos repetitivos. Por ejemplo, una forma corta de imprimir nueve líneas consecutivas es llamando threeLines tres veces.

Page 44: Presentacion python final

Definiciones y sus usos• Juntando los fragmentos estudiados hasta ahora, el programa completo se ve así:

def newLine():printdef threeLines():newLine()newLine()newLine()print "First Line."threeLines()print "Second Line.“

• Este programa contiene dos definiciones de funciones: newLine y threeLines. Las definiciones de funciones son ejecutadas igual a otros enunciados, pero el efecto es crear la nueva función. Los enunciados dentro de la función no son ejecutados hasta que la función es llamada, y la definición de la función no genera resultado (output).

• Como es de esperar, tenemos que crear una función antes de que se pueda ejecutar. En otras palabras, la definición de la función tiene que ser ejecutada antes de la primera vez que es llamada.

Page 45: Presentacion python final

Flujo de ejecuciones• Para asegurar que una función es definida antes de su primer uso, tenemos que saber el

orden en el que los enunciados son ejecutados, lo que es llamado el flujo de ejecuciones.

• La ejecución siempre comienza en el primer enunciado del programa. Los enunciados son ejecutados uno a la vez, en orden de arriba hacia abajo.

• Las definiciones no alteran el flujo de ejecuciones del programa, pero hay que recordar que los enunciados dentro de la función no son ejecutados hasta que la función es llamada. Pese a que no es común, podemos definir una función dentro de otra.

• En este caso, la definición más interna no es ejecutada hasta que la función de más afuera sea llamada.

• Las llamadas a las funciones son como un desvío en el flujo de ejecuciones. En vez de ir al próximo enunciado, el flujo brinca hacia la primera línea de la función llamada, ejecuta todos los enunciados allí y luego regresa a recoger donde dejó.

• Una función puede llamar a otra.

Page 46: Presentacion python final

• Mientras está en el medio de una función , el programa puede tener que ejecutar los enunciados en otra función. Pero mientras está ejecutando esa nueva función, el programa puede tener que ejecutar todavía otra función. Python mantiene rastreo de dónde está, así que cada vez que una función completa, el programa recoge donde se quedó en la función que lo llamó.

• Cuando llega al final del programa, termina.

• O sea. Cuando se lee un programa, no se lee de arriba a abajo. En vez, se sigue el flujo de ejecución.

Page 47: Presentacion python final

Parámetros y argumentos• Algunas de las funciones pre incluídas que se han presentado requieren argumentos, los

valores que controlan cómo la función hace su trabajo. Por ejemplo, si queremos hallar el seno de un número, tenemos que indicar qué es el número. Así, sin toma un valor numérico como argumento.

• Algunas funciones toman más de un argumento. Por ejemplo, pow toma dos argumentos, la base y el exponente. Dentro de la función, los valores que han pasado son asignados a variables llamadas parámetros.

• Aquí hay un ejemplo de una función definida por el usuario que tiene un parámetro:

def printTwice(bruce):print bruce, bruce

• Esta función toma un sólo argumento y lo asigna a un parámetro llamado bruce.

• El valor del parámetro (hasta este punto no tenemos idea de cuál será) es impreso dos veces, seguido por una nueva línea. El nombre bruce fue escogido para sugerir que el nombre que se le de al parámetro depende de uno, pero se debe escoger un nombre bastante ilustrativo.

Page 48: Presentacion python final

• La función printTwice trabaja para cualquier tipo (type) que pueda ser impreso:

>>> printTwice(’Spam’)Spam Spam

>>> printTwice(5)5 5

>>> printTwice(3.14159)3.14159 3.14159

• En la primera llamada de función, el argumento es un string. En el segundo, es un entero (integer).

• En el tercero, es una decimal (float).

Page 49: Presentacion python final

• Las mismas reglas de composición que aplican a las funciones preincluídas también aplican para las funciones definidas por el usuario, así que podemos usar cualquier clase de expresión como argumento para printTwice:

>>> printTwice(’Spam’*4)SpamSpamSpamSpam SpamSpamSpamSpam

>>> printTwice(math.cos(math.pi))-1.0 -1.0

• Como es usual, la expresión es evaluada antes de que la función corra, así printTwice imprime SpamSpamSpamSpam SpamSpamSpamSpam en vez de ’Spam’*4 ’Spam’*4.

Page 50: Presentacion python final

• Podemos además usar una variable como argumento:

>>> michael = ’Eric, the half a bee.’>>> printTwice(michael)Eric, the half a bee. Eric, the half a bee.

• Notemos algo muy importante. El nombre de la variable que pasamos como argumento (michael) no tiene nada que ver con el nombre del parámetro (bruce).

• No importa cómo el valor fue llamado de vuelta a casa (en el caller); aquí en printTwice, llamamos a todo el mundo bruce.

Page 51: Presentacion python final

Las variables y parámetros son locales• Cuando creamos una variable local dentro de una función, ésta solo existe dentro de la

función y no podemos usarla afuera.

• Por ejemplo:

def catTwice(part1, part2):cat = part1 + part2printTwice(cat)

• Esta función toma dos argumentos, los enlaza o relaciona(concatena) y entonces imprime los resultados dos veces. Podemos llamar a la función con dos strings:

>>> chant1 = "Pie Jesu domine, ">>> chant2 = "Dona eis requiem.">>> catTwice(chant1, chant2)Pie Jesu domine, Dona eis requiem. Pie Jesu domine, Dona eis requiem.

Page 52: Presentacion python final

• Cuando catTwice termina, la variable cat es destruiday. Si tratamos de imprimirla, obtendremos un error:

>>> print catNameError: cat

• Los parámetros son también locales. Por ejemplo, afuera de la función printTwice, no hay tal cosa como bruce. Si intentáramos usarla, Python se quejaría.

Page 53: Presentacion python final

(Stack Diagrams) Diagramas de pilas

Para mantener rastreo de cuál de las variables puede ser usado dóde, es útil a veces dibujar un diagrama de apilamiento. Como los diagramas de estado, los diagramas de pilas muestran el valor de cada variable, pero además muestran la función a la que cada variable pertenece.

Cada función es representada por un marco. Un marco es una caja con el nombre de una función a su lado y los parametros y variables de la función adentro. El diagrama de pilas para el ejemplo anterior se ve así:

Page 54: Presentacion python final

• El orden de las pilas muestra el flujo de ejecución. printTwice fue llamado por catTwice y catTwice fue llamado por main, el cual es un nombre especial para la función principal(topmost). Cuando creamos una variable afuera de cualquier función, ésta pertenece a main .

• Cada parámetro se refiere al mismo valor como su argumento correspondiente. Así, part1 chant1, part2 tiene el mismo valor que chant2 y bruce tiene el mismo valor que cat.

• Si un error ocure durante la llamada a la función, Python imprime el nombre de la función y el nombre de la función que llamó a ésta y el nombre de la función que llamó a aquella, hasta regresar a main.

Page 55: Presentacion python final

• Por ejemplo, si tratamos de accesar cat desde adentro de printTwice, obtenemos un NameError:

Traceback (innermost last):File "test.py", line 13, in __main__catTwice(chant1, chant2)File "test.py", line 5, in catTwiceprintTwice(cat)File "test.py", line 9, in printTwiceprint catNameError: cat

Page 56: Presentacion python final

• Esta lista de funciones es llamada un traceback. Esta nos dice en qué archivo de programa fue que el error occurrió y qué línea y qué funciones estaban ejecutándose a la vez.

• Esto además muestra la línea de código que causó el error.

• Notemos la similaridad entre el traceback y el diagrama de pilas. Esto no es una coincidencia.

Page 57: Presentacion python final

Capítulo 4

Conditionals and recursion

Page 58: Presentacion python final

El operador Módulo (Residuo)

• El operador de módulo funciona con enteros. La operación nos da el residuo cuando el primer numero es dividido por el segundo. En Python, el operador de módulo es el símbolo de porciento (%).

Ej: >>> quotient = 7 / 3 >>> print quotient 2 >>> remainder = 7 % 3 >>> print remainder 1

• 7 dividido entre 3 es 2 con un residuo de 1.

Page 59: Presentacion python final

Expresiones Booleanas

• Una expresión booleana es una expresión que puede ser verdadera o falsa.

• Una forma de escribir una expresión lógica es utilizar el operador ==, que compara dos valores y produce un valor booleano:

Ej: >>> 5 == 5 True >>> 5 == 6 False

Page 60: Presentacion python final

Expresiones Booleanas

• En la primera declaración, los dos operandos son iguales, por lo que el valor de la expresiónes cierto, en la segunda declaración, 5 no es igual a 6, así que conseguimos Falso. Verdadero y Falso son valores especiales que están incluidas en Python.

Page 61: Presentacion python final

Expresiones Booleanas

• El operador == es uno de los operadores de comparación, los otros son:

• x != y # x no es igual a y• x > y # x es mayor que y• x < y # x es menor que y• x >= y # x es mayor o igual que y• x <= y # x es menor o igual que y

Page 62: Presentacion python final

Expresiones Booleanas

• Aunque estas operaciones son probablemente familiares para usted, los símbolos de Python son diferente de los símbolos matemáticos. Un error común es utilizar un solosigno (=) en lugar de un doble signo de igualdad (==). Recuerde que = es una asignación y == es un operador de comparación. Además, no hay tal cosa como = < o =>.

Page 63: Presentacion python final

Operadores Lógicos

• Hay tres operadores lógicos: and, or y not. La semántica (significado) de estos operadores es similar a su significado en Español.

Ej:• Por ejemplo, x> 0 y x <10 es cierto sólo si x es

mayor que 0 y menor que 10. • N%2 == 0 or n%3 == 0 es verdadero si alguna

de las condiciones es verdadera, es decir, si elnúmero es divisible por 2 o 3.

Page 64: Presentacion python final

Operadores Lógicos

• Por último, el operador not niega una expresión booleana, tal que not(x > y) es verdadero si (x > y) es falso, es decir, si x es menor o igual que y.

Page 65: Presentacion python final

Ejecución Condicional

• Para escribir programas útiles, casi siempre se necesita la capacidad de comprobar condiciones y cambiar el comportamiento del programa. Una Declaración Condicional nos da esta capacidad. La forma más simple es la condición if.

Ej: if x > 0: print "x is positive"

Page 66: Presentacion python final

Ejecución Condicional

• La expresión lógica después de la declaración if se llama la condición. Si el if escierto, entonces la declaración condicional es ejecutada. Si no, no pasa nada.

Page 67: Presentacion python final

Ejecución Condicional Alternativa

• Una segunda forma de la condición if es la ejecución de alternativas, en el que hay dosposibilidades y la condición determina cual es ejecutado. La sintaxis se parece a esto:

Ej: if x%2 == 0: print x, "is even" else: print x, "is odd"

Page 68: Presentacion python final

Ejecución Condicional Alternativa

• Si el residuo cuando x es dividido por 2 es 0, entonces sabemos que x es par, yel programa muestra el mensaje “is even”. Si la condición es falsa, la segundase ejecuta “is odd”. Dado que la condición debe ser verdadera o falsa, exactamenteuna de las alternativas será ejecutado. Las alternativas se llaman ramas, porque son las ramas en el flujo de ejecución.

Page 69: Presentacion python final

Ejecución Condicional Alternativa

• Si usted necesita comprobar la paridad de números , es posible que "envolver" el código en una función:

Ej: def printParity(x): if x%2 == 0: print x, "is even" else: print x, "is odd"

Page 70: Presentacion python final

Ejecución Condicional Alternativa

• Para cualquier valor de x, printParity muestra en display, el mensaje apropiado. Cuando lo llamas puedes proveer un entero como argumento.

Ej: >>> printParity(17) 17 is odd >>> y = 17 >>> printParity(y+1) 18 is even

Page 71: Presentacion python final

Cadena Condicional

• A veces hay más de dos posibilidades y necesitamos más de dosramas. Una forma de expresar un cálculo así es una cadena condicional:

Ej:• if x < y:• print x, "is less than", y• elif x > y:• print x, "is greater than", y• else:• print x, "and", y, "are equal"

Page 72: Presentacion python final

Cadena Condicional• elif es una abreviatura de "else if". Una vez más,

exactamente una rama se ejecutará. No hay límite al número de declaraciones elif, pero la última rama tiene que ser una declaración else:

Ej: if choice == ’A’: functionA() elif choice == ’B’: functionB() elif choice == ’C’: functionC() else: print "Invalid choice."

Page 73: Presentacion python final

Cadena Condicional• Cada condición es verificada en orden. Si la

primera es falsa, verifica la próxima, y así sucesivamente. Si una de ellas es cierta, la rama correspondiente es ejecutada y la declaración termina.

Page 74: Presentacion python final

Condicionales Anidadas• Una condicional también se pueden anidar

dentro de otra. Podríamos haber escrito elejemplo tricotomía de la siguiente manera:

if x == y: print x, "and", y, "are equal" else: if x < y: print x, "is less than", y else: print x, "is greater than", y

Page 75: Presentacion python final

Condicionales Anidadas• En algunas ocasiones operadores lógicos

proveen formas de simplificar condiciones anidadas.

Ej: if 0 < x: if x < 10: print "x is a positive single digit.“• El print se ejecuta sólo si pasa las dos

condiciones por lo tanto podemos utilizar el operador and:

Page 76: Presentacion python final

Condicionales Anidadas if 0 < x and x < 10: print "x is a positive single digit.“

• Este tipo de condiciones son comunes, por lo tanto Python provee una alternativa de sintaxis muy similar a la notación matemática.

if 0 < x < 10: print "x is a positive single digit."

Page 77: Presentacion python final

El Enunciado de Regreso• El enunciado return le permite terminar la ejecución de

una función antes de llegar al final. Una razón para usarlo es si detecta una condición de error:

import math

def printLogarithm(x): if x <= 0: print "Positive numbers only, please." return

result = math.log(x) print "The log of x is", result

Page 78: Presentacion python final

La Recursión• Ya mencionamos que es legal para una función

llamar a otra, y han vistovarios ejemplos de ello. Hemos olvidado mencionar que también es legal para unafunción llamarse ella misma. Por ejemplo:

def countdown(n): if n == 0: print "Blastoff!" else: print n countdown(n-1)

Page 79: Presentacion python final

La Recursión• Countdown espera que el parámetro, n, sea un

entero positivo. Si n es 0, el output esla palabra, "Blastoff!" De lo contrario, el output es n y luego llama a una función llamada countdown pasando a n-1 como un argumento.

• Por lo tanto si llamaramos a la función countdown (3) obtendriamos el siguiente output:

3 2 1 Blastoff!

Page 80: Presentacion python final

La Recursión Infinita• También podemos encontrar casos donde la

recursión sea infinita. Las recursiones infinitas no son infinitas realmente en Python, ya que el sistema esta diseñado para reportar cuando una recursión es repetida muchas veces.

Page 81: Presentacion python final

Entradas de Teclado• Los programas antes presentados son un tanto

estrictos a la hora de aceptar entradas de un usuario.

• Python provee instrucciones que acepten entradas del teclado.

• La mas sencilla de ellas es raw_input.• Cuando la función es llamada, el programa se

detiene y espera una entrada del usuario.• A continuación veremos un ejemplo:

Page 82: Presentacion python final

Entradas de Teclado>>> input = raw_input ()What are you waiting for?>>> print inputWhat are you waiting for?

• Este tipo de mensajes de entradas se llama prompt.

Page 83: Presentacion python final

Capítulo 5

Funciones Fructíferas

Page 84: Presentacion python final

Valores devueltos• Algunas de las funciones incluidas en el sistema

que ya hemos utilizado, como funciones matemáticas, producen un resultado. Llamar a estas funciones generan nuevos valores, los cuales usualmente son asignados a variables o son usados como parte de una expresión.

• Pero si nos fijamos ninguna de estas funciones regresan un valor.

• A continuación escribiremos funciones que regresen valores, estas son las llamadas funciones fructíferas.

Page 85: Presentacion python final

Valores devueltos

def area(radius):return math.pi * radius**2

Page 86: Presentacion python final

Desarrollo de Programas

• Mientras realizamos ejercicios con funciones mas grandes, existe un aumento en la dificultad de correr efectivamente los programas, esto es debido a que a mayor cantidad de instrucciones, aumenta la cantidad de posibles errores en el mismo.

• Para trabajar con esto se muestra una técnica llamada “incremental development”

Page 87: Presentacion python final

Desarrollo de Programas

• La meta del “incremental development” es evitar largas corridas de programas para encontrar errores, añadiendo y probando una cantidad del código a la vez.

• Como un ejemplo: Suponga que queremos encontrar la distancia entre dos puntos, con las coordenadas dadas (x1,y1) y (x2,y2). Utilizaremos la formula matemática para distancia entre dos puntos.

Page 88: Presentacion python final

Desarrollo de Programas• Primero la fórmula a transformar en código.

distance = sqrt((x2 − x1)^2 + (y2 − y1)^2)

• Definimos la función

def distance(x1, y1, x2, y2): return 0.0

• Vamos confeccionando los procesos paso a paso:

def distance(x1, y1, x2, y2): dx = x2 - x1 dy = y2 - y1 print "dx is", dx print "dy is", dy return 0.0

Page 89: Presentacion python final

Desarrollo de Programas• En el paso anterior todavía no recibimos resultado,

pero ya vamos verificando errores.

def distance(x1, y1, x2, y2): dx = x2 - x1

dy = y2 - y1 dsquared = dx**2 + dy**2 print "dsquared is: ", dsquared return 0.0

• En este paso tampoco recibimos resultado.

Page 90: Presentacion python final

Desarrollo de Programas

def distance(x1, y1, x2, y2):dx = x2 - x1dy = y2 - y1dsquared = dx**2 + dy**2result = math.sqrt(dsquared)return result

• Ya en este paso tenemos el programa completado. Si sustituimos valores en x1, y1, x2, y2 obtendríamos un resultado.

Page 91: Presentacion python final

Composición de Funciones

• Como ya hemos visto, podemos llamar una función con otra. Esto se llama Composición.

• Como ejemplo vamos a escribir una función que toma dos puntos, uno del centro del circulo y otro de un punto del perímetro y que calcule el área del circulo.

Page 92: Presentacion python final

Composición de Funciones• Lo primero es definir una función para la distancia

del radio.

radius = distance(xc, yc, xp, yp)

• Podemos comenzar con la siguiente idea:

radius = distance(xc, yc, xp, yp)

result = area(radius) return result

Page 93: Presentacion python final

Composición de Funciones• Ahora si lo unimos obtenemos:

def area2(xc, yc, xp, yp): radius = distance(xc, yc, xp, yp) result = area(radius) return result

• Creamos area2 para distinguirlo de área.

• Y como resultado obtenemos el siguiente programado.

• def area2(xc, yc, xp, yp):• return area(distance(xc, yc, xp, yp))

Page 94: Presentacion python final

Funciones Booleanas• Las funciones pueden en ocasiones regresar valores

booleanos, que en ocasiones es conveniente para esconder procesos complicados dentro de las funciones. Por ejemplo:

def isDivisible(x, y): if x % y == 0: return True else: return False

• La función anterior responde si es divisible x entre y. Y la contesta en este caso con falso.

Page 95: Presentacion python final

Funciones Booleanas

• Aquí tenemos un ejemplo cierto con las misma función:

>>> isDivisible(6, 3)True

Page 96: Presentacion python final

“Leap of faith”

• En un ejemplo anterior habíamos creado una función para verificar la divisibilidad entre dos números.

• Luego simplemente la utilizamos llamando la función isDivisible.

• De esta forma no tenemos que volver a redactar la función sino que simplemente la utilizamos llamándola sin tener que volver a redactarla. A esto le llamamos “Leap of faith”.

Page 97: Presentacion python final

Bibliografía

• How to Think Like a Computer Scientist, Learning with Python, Allen Downey,Jeffrey Elkner,Chris Meyers