presentacion python final
DESCRIPTION
PythonTRANSCRIPT
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
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.
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
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
• 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?
• 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?
• 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?
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?
• 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?
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?
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?
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?
• 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
>> 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
• 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?
>> 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
>> 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
• 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
>> 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
• 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
• 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
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.
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
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
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>>_
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.
Funciones
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’>
• 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.
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
• 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’
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
• 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.
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 .
• 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.
• 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
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.
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.
• 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.)
• 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
• ¿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."
• 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.
• 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.
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.
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.
• 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.
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.
• 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).
• 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.
• 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.
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.
• 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.
(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í:
• 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.
• 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
• 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.
Capítulo 4
Conditionals and recursion
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.
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
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.
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
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 =>.
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.
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.
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"
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.
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"
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.
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"
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
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"
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."
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.
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
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:
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."
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
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)
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!
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.
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:
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.
Capítulo 5
Funciones Fructíferas
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.
Valores devueltos
def area(radius):return math.pi * radius**2
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”
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.
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
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.
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.
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.
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
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))
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.
Funciones Booleanas
• Aquí tenemos un ejemplo cierto con las misma función:
>>> isDivisible(6, 3)True
“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”.
Bibliografía
• How to Think Like a Computer Scientist, Learning with Python, Allen Downey,Jeffrey Elkner,Chris Meyers