1. PythonCapí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 Profesor: Balbino García
2. 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.
6. ¿Qué es un 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.
7. ¿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.
8. ¿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.
9. ¿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.
10. ¿Qué es un depuración? 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.
11. ¿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.
12. ¿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’.
13. ¿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.
14. Lenguajes Formales y Naturales 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.
15. El Primer Programa >> 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.
16. 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?
17. Asignando valor a una variable >> message = “Hello World!” >> n = 17 >> pi = 3.1416 La instrucción de asignación crea nuevas variables y les asigna valores.
18. Verificando el tipo de 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.
19. Nombres de Variables 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.
20. Nombres de Variables >> 76trombones = ‘Banda’ SyntaxError: invalid syntax >> more$ = 10000 SyntaxError: invalid syntax >> class = ‘’Computer Science’ SyntaxError: invalid syntax 76trombones es ilegal por empezar con un número y more$ porque el signo $ es ilegal.
21. Keywords 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.
22. Evaluando Expresiones Una expresión es una combinación de valores, variables y operadores que al evaluarse producen un resultado. >> x = 1 + 2 >> x 3 >> En esta expresión ‘+’ es un operador y ‘1’ y ‘2’ son los operandos.
23. Orden de Operaciones Python sigue las mismas reglas que se usan en matemáticas para realizar las operaciones: 1) Paréntesis 2) Exponenciación ‘3*1**3 = 3’ 3) Multiplicación y División 4) Suma y Resta 5) Operadores con la misma prioridad se evalúan de izquierda a derecha.
24. 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
25. 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
26. 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*wage Salary = 268.25 >>_
27. 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.
30. El valor o variable, el cualesllamado el argumento de la función, tieneque ser cerrado en paréntesis. Es comúndecirqueunafuncióntoma un argumento y devuelve un resultado. El resultadoesllamado el valor devuelto.
31. En vez de obtener con print el valor devuelto, podemosasignarlo a una variable: >>> betty = type("32") >>> printbetty <type ’str’>
32.
33.
34.
35. Coerción de tipo Division Supongamosquedeseamoscalcular la fracciónde unahoraque ha transcurrido. La expresión, minute / 60, hacearitmética de númerosenteros, asíque el resultadoserásiempre 0, aún a 59 minutos de una hora. Unasoluciónesconvertirminuto a decimal (floating-point)y hacerdivisión de decimalesfloating-point: >>> minute = 59 >>> float(minute) / 60 0.983333333333
36. Alternativamente, podemostomarventaja de lasreglasparaconversión de tipoautomática, la cualesllamadacoerción de tipo. Para los operadoresmatemáticos, sicualquieroperandoes un decimal (float), el otroesautomáticamenteconvertido en un decimal (float): >>> minute = 59 >>> minute / 60.0 0.983333333333 Haciendo el denominador un decimal, forzamosPhyton a hacerdivisión de decimales.
37. Funciones matemáticas En matemática, trabajamos con funcionescomo sin y log, y hemosaprendido a evaluarexpresionescomo sin(pi/2) y log(1/x). Primero, evaluamos la expresión en paréntesis (el argumento). Porejemplo, pi/2 esaproximadamente 1.571 y 1/x es 0.1 (si x fuera10.0). Entonces, evaluamos la función , lo mismobuscándolo en unatabla o realizandovarioscómputos. El seno de 1.571 es 1 y log of 0.1 is -1 (asumiendoqueeste log indica el logaritmo con base 10). Este procesopuede ser aplicadorepetidamenteparaevaluarexpresionesmascomplicadas como log(1/sin(pi/2)). Primero, evaluamos el argumento de la funciónmásinterna, luegoevalúa la función, y asísucesivamente. Pythontiene un módulomatemáticoqueprovee de lasfuncionesmatemáticasmásfamiliares. Un móduloes un archivoquecontieneunacolección de funcionesrelacionadasagrupadas.
38. Antes de quepodamosusarlasfunciones de un módulo, tenemosqueimportarlas: >>> importmath Para llamaruna de lasfunciones, tenemosqueespecificar el nombre del módulo y el nombre de la función, separadospor un punto ( dot, tambiénconocidocomoperiod). Este formatoesllamadonotación de punto (dotnotation). >>> decibel = math.log10 (17.0) >>> angle = 1.5 >> height = math.sin(angle) >El primerenunciado (statement)asigna decibel al logaritmo de 17, base 10. Tambiénhay unafunciónllamadalogquetomalogaritmo base e. El tercerenunciadoconsigue el seno del valor del ángulo variable. siny lasotrasfuncionestrigonométricas (cos, tan, etc.) tomanargumentos en radianes. Para convertir de grados a radianes, divide entre 360 y multiplicapor 2*pi.
39. Porejemplo, Para conseguir el seno de 45 grados, primerocalcula el ángulo en radianes y luegotoma el seno: >>> degrees = 45 >>> angle = degrees * 2 * math.pi / 360.0 >>> math.sin(angle) 0.707106781187 La constante pi esademás parte del módulomatemático. Si queremos, podemosrevisarlocomparándolo con la raízcuadrada de dos dividido entre dos: >>> math.sqrt(2) / 2.0 0.707106781187
40. Composición Tal comolasfuncionesmatemáticas, lasfunciones de Pythonpueden ser compuestas, o sea queusamosunaexpresióncomo parte de otra. Porejemplo, podemosusarcualquierexpresióncomo un argumentoparaunafunción: >>> x = math.cos(angle + math.pi/2) Este enunciadotoma el valor de pi, lo divide entre 2 y suma el resultado al valor del ángulo. La sumaesentoncespasadacomo un argumento a la funcióncos. Tambiénpodemostomar el resultado de unafunción y pasarlocomo un argumentoparaotro: >>> x = math.exp(math.log(10.0)) Este enunciadoconsigue la base log e de 10 y entonceseleva e a esapotencia. El resultadoesasignado a x.
41. Añadir nuevas funciones Tambiénesposibleañadirnuevasfunciones. Crearnuevasfuncionespara resolver problemasparticularesesuna de lascosasmásusadasacerca de un lenguage de programación general. En el contexto de programación, unafunciónesnombradasecuencia de enunciadosquerealizanunaoperacióndeseada. Estaoperaciónesespecificada en unadefinición de función. La sintaxisparaunafunciónes: def NAME( LIST OF PARAMETERS ): STATEMENTS Podemos hacer cualquier nombre para las funciones que creamos, exceptoaquellosnombresusadoscomopalabras clave de Python. La lista de parámetrosespecificaquéinformación, sialguna, tenemosqueproveerparausar la nuevafunción. Puedehabercualquiernúmero de enunciadosdentro de la función, perotienenqueestarseparados del margenizquierdo. En los ejemplos del libro, se usaunaseparación de dos espacios.
42. La primerapareja de funcionesque describe el libro no tieneparámetros, asíque la sintaxis se veasí: defnewLine(): print EstafunciónesllamadanewLine. El paréntesisvacíoindicaque no tieneparámetros. Estocontiene un solo enunciado, que produce unanuevalínea (newline. (Esoes lo queocurrecuando se usa un comando de print sin algúnargumento.)
43. La sintaxisparallamar la nuevafunciónes la mismaque la sintaxisparafuncionespreincluídas en Phyton: print "First Line." newLine() print "Second Line." La salidaparaeseprogramaes: First line. Second line. Nota el espacio extra entre las dos líneas
44. ¿Quésiqueríamásespacio entre laslíneas? Podemosllamar la mismafunciónrepetidamente: print "First Line." newLine() newLine() newLine() print "Second Line.“ O podríamosescribirunanuevafunciónnombradathreeLinesqueimprimetresnuevaslíneas: defthreeLines(): newLine() newLine() newLine() print "First Line." threeLines() print "Second Line."
45. Estafuncióncontienetresenunciados, todos de los cualesestánseparadospor dos espacios. Como el próximoenunciado no estáseparado, Pythonsabequeéste no es parte de la función. Hay algunascosas a notaracerca de esteprograma: 1. Se puedellamar al mismoprocedimientorepetidamente. De hecho, estoesmuycomúny útil. 2. Se puedetenerunafunciónllamando a otra; en estecasothreeLinesllama a newLine. Este ejemplomuestrados de muchasrazonesparalasquesirvecrearnuevasfunciones: • Crearunanuevafunciónnosda la oportunidad de nombrar un grupo de enunciados.
46. Las funcionespuedensimplificar un programaescondiendo un cómputocomplejodetrás de un sólocomado y usandopalabras en nuestroidioma en lugar de un códigomisterioso. • Crearunanuevafunciónpuedehacer a un programamáspequeñoeliminandocódigosrepetitivos. Porejemplo, una forma corta de imprimirnuevelíneasconsecutivasesllamandothreeLinestresveces.
47. Definiciones y sus usos Juntando los fragmentosestudiadoshastaahora, el programacompleto se veasí: defnewLine(): print defthreeLines(): newLine() newLine() newLine() print "First Line." threeLines() print "Second Line.“ Este programacontiene dos definiciones de funciones: newLine y threeLines. Las definiciones de funciones son ejecutadasigual a otrosenunciados, pero el efectoescrear la nuevafunción. Los enunciadosdentro de la función no son ejecutadoshastaque la funciónesllamada, y la definición de la función no genera resultado (output). Como es de esperar, tenemosquecrearunafunción antes de que se puedaejecutar. En otraspalabras, la definición de la funcióntieneque ser ejecutada antes de la primeravezqueesllamada.
48. Flujo de ejecuciones Para asegurarqueunafunciónesdefinida antes de su primer uso, tenemosque saber el orden en el que los enunciados son ejecutados, lo queesllamado el flujo de ejecuciones. La ejecuciónsiemprecomienza en el primer enunciado del programa. Los enunciados son ejecutadosuno a la vez, en orden de arribahaciaabajo. Las definiciones no alteran el flujo de ejecuciones del programa, pero hay querecordarque los enunciadosdentro de la función no son ejecutadoshastaque la funciónesllamada. Pese a que no escomún, podemosdefinirunafuncióndentro de otra. En estecaso, la definiciónmásinterna no esejecutadahastaque la función de másafuera sea llamada. Las llamadas a lasfunciones son como un desvío en el flujo de ejecuciones. En vez de ir al próximoenunciado, el flujobrincahacia la primeralínea de la funciónllamada, ejecutatodos los enunciadosallí y luegoregresa a recogerdondedejó. Unafunciónpuedellamar a otra.
49. Mientrasestá en el medio de unafunción , el programapuedetenerqueejecutar los enunciados en otrafunción. Peromientrasestáejecutandoesanuevafunción, el programa puede tener que ejecutar todavía otra función. Python mantienerastreo de dóndeestá, asíquecadavezqueunafuncióncompleta, el programarecogedonde se quedó en la funciónque lo llamó. Cuandollega 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.
50. Parámetros y argumentos Algunas de lasfunciones pre incluídasque se hanpresentadorequierenargumentos, los valoresquecontrolancómo la funciónhacesutrabajo. Porejemplo, siqueremoshallar el seno de un número, tenemosqueindicarquées el número. Así, sintoma un valor numéricocomoargumento. Algunasfuncionestomanmásde un argumento. Porejemplo, powtoma dos argumentos, la base y el exponente. Dentro de la función, los valoresquehanpasado son asignados a variables llamadasparámetros. Aquí hay un ejemplo de unafuncióndefinidapor el usuarioquetiene un parámetro: defprintTwice(bruce): printbruce, bruce Estafuncióntoma un sóloargumento y lo asigna a un parámetrollamadobruce. El valor del parámetro (hastaestepunto no tenemos idea de cuálserá) esimpreso dos veces, seguidoporunanuevalínea. El nombrebrucefueescogidoparasugerirque el nombrequese le de al parámetrodepende de uno, pero se debeescoger un nombrebastanteilustrativo.
51. La funciónprintTwicetrabajaparacualquiertipo (type) quepueda ser impreso: >>> printTwice(’Spam’) SpamSpam >>> printTwice(5) 5 5 >>> printTwice(3.14159) 3.14159 3.14159 En la primerallamada de función, el argumentoes un string. En el segundo, es un entero (integer). En el tercero, esuna decimal (float).
52. Las mismasreglas de composiciónqueaplican a lasfuncionespreincluídastambiénaplicanparalasfuncionesdefinidaspor el usuario, asíquepodemosusarcualquierclase de expresióncomoargumentoparaprintTwice: >>> printTwice(’Spam’*4) SpamSpamSpamSpamSpamSpamSpamSpam >>> printTwice(math.cos(math.pi)) -1.0 -1.0 Como es usual, la expresiónesevaluada antes de que la funcióncorra, asíprintTwiceimprime SpamSpamSpamSpamSpamSpamSpamSpam en vez de ’Spam’*4 ’Spam’*4.
53. Podemosademásusaruna variable comoargumento: >>> michael = ’Eric, the half a bee.’ >>> printTwice(michael) Eric, the half a bee. Eric, the half a bee. Notemosalgomuyimportante. El nombre de la variable quepasamoscomoargumento (michael) no tiene nada quever con el nombre del parámetro (bruce). No importacómo el valor fuellamado de vuelta a casa (en el caller); aquí en printTwice, llamamos a todo el mundobruce.
54. Las variables y parámetros son locales Cuandocreamosuna variable local dentro de unafunción, ésta solo existedentro de la función y no podemosusarlaafuera. Porejemplo: defcatTwice(part1, part2): cat = part1 + part2 printTwice(cat) Estafuncióntoma dos argumentos, los enlaza o relaciona(concatena) y entoncesimprime los resultados dos veces. Podemosllamar a la función con dos strings: >>> chant1 = "Pie Jesu domine, " >>> chant2 = "Dona eisrequiem." >>> catTwice(chant1, chant2) Pie Jesu domine, Dona eis requiem. Pie Jesu domine, Dona eis requiem.
55. CuandocatTwicetermina, la variable cat esdestruiday. Si tratamos de imprimirla, obtendremos un error: >>> printcat NameError: cat Los parámetros son también locales. Porejemplo, afuera de la funciónprintTwice, no hay talcosacomobruce. Si intentáramosusarla, Python se quejaría.
56. (Stack Diagrams) Diagramas de pilas Para mantenerrastreo de cuál de las variables puede ser usadodóde, esútil a vecesdibujar un diagrama de apilamiento. Como los diagramas de estado, los diagramas de pilasmuestran el valor de cada variable, peroademásmuestran la función a la quecada variable pertenece. Cadafunciónesrepresentadapor un marco. Un marcoesunacaja con el nombre de unafunción a sulado y los parametros y variables de la funciónadentro. El diagrama de pilaspara el ejemplo anterior se veasí:
57. El orden de laspilasmuestra el flujo de ejecución. printTwicefuellamadoporcatTwice y catTwicefuellamadopormain, el cuales un nombre especial para la funciónprincipal(topmost). Cuandocreamosuna variable afuera de cualquierfunción, éstapertenece a main. Cadaparámetro se refiere al mismo valor comosuargumentocorrespondiente. Así, part1 chant1, part2tiene el mismo valor quechant2 y brucetiene el mismo valor quecat. Si un error ocuredurante la llamada a la función, Pythonimprime el nombre de la función y el nombre de la funciónquellamóa éstay el nombre de la funciónquellamóa aquella, hastaregresar a main.
58. Porejemplo, sitratamos de accesarcatdesdeadentro de printTwice, obtenemos un NameError: Traceback (innermostlast): File "test.py", line 13, in __main__ catTwice(chant1, chant2) File "test.py", line 5, in catTwice printTwice(cat) File "test.py", line 9, in printTwice printcat NameError: cat
59. Estalista de funcionesesllamada un traceback. Estanos dice en quéarchivo de programafueque el error occurrió y quélínea y quéfuncionesestabanejecutándose a la vez. Estoademásmuestra la línea de códigoquecausó el error. Notemos la similaridad entre el tracebacky el diagrama de pilas. Esto no esunacoincidencia.
61. El operadorMó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 >>> printquotient 2 >>> remainder = 7 % 3 >>> printremainder 1 7 dividido entre 3 es 2 con un residuo de 1.
62. 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
63. 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.
64. Expresiones Booleanas El operador == es uno de los operadores de comparación, los otros son: x != y # x no esigual a y x > y # x es mayor quey x < y # x esmenorque y x >= y # x es mayor o igualque y x <= y # x esmenor o igualque y
65. 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 =>.
66. 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.
67. 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.
68. 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: ifx > 0: print"x is positive"
69. 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.
70. 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: ifx%2 == 0: printx, "iseven" else: printx, "isodd"
71. 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 “iseven”. Si la condición es falsa, la segundase ejecuta “isodd”. 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.
72. 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: defprintParity(x): ifx%2 == 0: printx, "iseven" else: printx, "isodd"
73. Ejecución Condicional Alternativa Para cualquier valor de x, printParitymuestra en display, el mensajeapropiado. Cuando lo llamas puedesproveer un enterocomoargumento. Ej: >>> printParity(17) 17 isodd >>> y = 17 >>> printParity(y+1) 18 iseven
74. 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"
75. Cadena Condicional elif es una abreviatura de "elseif". 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: ifchoice == ’A’: functionA() elifchoice == ’B’: functionB() elifchoice == ’C’: functionC() else: print"Invalidchoice."
76. 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.
77. Condicionales Anidadas Una condicional también se pueden anidar dentro de otra. Podríamos haber escrito elejemplo tricotomía de la siguiente manera: ifx == y: print x, "and", y, "are equal" else: ifx < y: print x, "is less than", y else: print x, "is greater than", y
78. Condicionales Anidadas En algunas ocasiones operadores lógicos proveen formas de simplificar condiciones anidadas. Ej: if0 < x: ifx < 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:
79. 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. if0 < x < 10: print "x is a positive single digit."
80. 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: importmath defprintLogarithm(x): ifx <= 0: print "Positive numbers only, please." return result= math.log(x) print "The log of x is", result
81. 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: defcountdown(n): ifn == 0: print"Blastoff!" else: printn countdown(n-1)
82. 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 llamadacountdown 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!
83. 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.
84. 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:
85. Entradas de Teclado >>> input = raw_input () What are you waiting for? >>> print input What are you waiting for? Este tipo de mensajes de entradas se llama prompt.
87. 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.
89. 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”
90. 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.
91. Desarrollo de Programas Primero la fórmula a transformar en código. distance = sqrt((x2 − x1)^2 + (y2 − y1)^2) Definimos la función defdistance(x1, y1, x2, y2): return 0.0 Vamos confeccionando los procesos paso a paso: defdistance(x1, y1, x2, y2): dx = x2 - x1 dy = y2 - y1 print "dxis", dx print "dyis", dy return 0.0
92. Desarrollo de Programas En el paso anterior todavía no recibimos resultado, pero ya vamos verificando errores. defdistance(x1, y1, x2, y2): dx = x2 - x1 dy = y2 - y1 dsquared = dx**2 + dy**2 print "dsquaredis: ", dsquared return 0.0 En este paso tampoco recibimos resultado.
93. Desarrollo de Programas defdistance(x1, y1, x2, y2): dx = x2 - x1 dy = y2 - y1 dsquared = dx**2 + dy**2 result = math.sqrt(dsquared) returnresult Ya en este paso tenemos el programa completado. Si sustituimos valores en x1, y1, x2, y2 obtendríamos un resultado.
94. 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.
95. Composición de Funciones Lo primero es definir una función para la distancia del radio. radius = distance(xc, yc, xp, yp) Podemoscomenzar con la siguienteidea: radius = distance(xc, yc, xp, yp) result = area(radius) returnresult
96. Composición de Funciones Ahorasi lo unimosobtenemos: def area2(xc, yc, xp, yp): radius = distance(xc, yc, xp, yp) result = area(radius) returnresult 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))
97. 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: defisDivisible(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.
98. Funciones Booleanas Aquí tenemos un ejemplo cierto con las misma función: >>> isDivisible(6, 3) True
99. “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”.
100. Bibliografía How to Think Like a Computer Scientist,LearningwithPython, Allen Downey,JeffreyElkner,ChrisMeyers