Aprenda A Pensar Como Un Programador Programando En Python

72 %
28 %
Information about Aprenda A Pensar Como Un Programador Programando En Python
Technology

Published on October 8, 2009

Author: jrojas

Source: slideshare.net

Aprenda a Pensar Como un Programador con Python

Aprenda a Pensar Como un Programador con Python Allen Downey Jeffrey Elkner Chris Meyers Traducido por ´ Miguel Angel Vilella ´ Angel Arnal Iv´n Juanes a Litza Amurrio Efrain Andia C´sar Ballardini e Green Tea Press Wellesley, Massachusetts

Copyright c 2002 Allen Downey, Jeffrey Elkner, y Chris Meyers. Corregido por Shannon Turlington y Lisa Cutler. Dise˜o de la cubierta por Rebecca Gimenez. n Green Tea Press 1 Grove St. P.O. Box 812901 Wellesley, MA 02482 Se permite copiar, distribuir, y/o modificar este documento bajo los t´rminos de e la GNU Free Documentation License, Versi´n 1.1 o cualquier versi´n posterior o o publicada por la Free Software Foundation; siendo las Secciones Invariantes “Pr´logo”, “Prefacio”, y “Lista de Colaboradores”, sin texto de cubierta, y o sin texto de contracubierta. Se incluye una copia de la licencia en el ap´ndice e titulado “GNU Free Documentation License”. La GNU Free Documentation License est´ disponible en www.gnu.org o escri- a biendo a la Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. La forma original de este libro es c´digo fuente L TEX. La compilaci´n de este o A o fuente L TE A X tiene el efecto de generar una representaci´n independiente del o dispositivo de un libro de texto, que puede convertirse a otros formatos e im- primirse. El fuente L TEX de este libro y m´s informaci´n sobre el proyecto de Libro de A a o Texto de C´digo Abierto est´n disponibles en o a http://www.thinkpython.com La composici´n de este libro se realiz´ utilizando L TEX y LyX. Las ilustraciones o o A se hicieron con xfig. Todos ellos son programas gratuitos de c´digo abierto. o Historia de la impresi´n: o Abril 2002: Primera edici´n. o ISBN 0-9716775-0-6

Pr´logo o Por David Beazley Como educador, investigador, y autor de libros, estoy encantado de ver la fi- nalizaci´n de este libro. Python es un lenguaje de programaci´n divertido y o o extremadamente f´cil de usar que en los ultimos a˜os se ha hecho muy popu- a ´ n lar. Desarrollado hace diez a˜os por Guido van Rossum, su sintaxis simple y la n sensaci´n general se deriva en gran parte del ABC, un lenguaje desarrollado en o los 1980s para la ense˜anza. Sin embargo, Python tambi´n se cre´ para resolver n e o problemas reales y presenta una variedad amplia de caracter´ ısticas de lenguajes de programaci´n como C++, Java, Modula-3 y Scheme. Debido a esto, una de o las caracter´ ısticas notables de Python es su atractivo para los desarrolladores profesionales de progamaci´n, cient´ o ıficos, investigadores, artistas, y educadores. A pesar del atractivo de Python para muchas comunidades diferentes, puede que a´n se pregunte “¿por qu´ Python?” o “¿por qu´ ense˜ar programaci´n u e e n o con Python?”No es tarea f´cil responder a estas preguntas, en especial cuando a la opini´n popular est´ del lado de alternativas m´s masoquistas como C++ y o a a Java. Sin embargo, pienso que la respuesta m´s directa es que la progrmaci´n a o en Python es simplemente m´s divertida y m´s productiva. a a Cuando imparto cursos de inform´tica, quiero cubrir conceptos importantes, a hacer el material interesante y enganchar a los estudiantes. Desgraciadamente, hay una tendencia en los cursos de introducci´n a la programaci´n a prestar o o demasiada atenci´n a la abstracci´n matem´tica que hace que los estudiantes o o a se frustren con problemas farragosos relacionados con detalles nimios de la sin- taxis, compilaci´n, y la aplicaci´n de reglas aparentemente arcanas. Aunque o o tal abstraci´n y formalismo son importantes para ingenieros profesionales de la o programaci´n y estudiantes que planean continuar sus estudios de inform´tica, o a decidirse por este enfoque en un curso introductorio s´lo tiene ´xito en hacer o e aburrida la inform´tica. Cuando imparto un curso, no quiero tener un aula de a estudiantes sin inspiraci´n. Quisiera verlos intentando resolver problemas in- o teresantes, explorando ideas diferentes, probando enfoques no convencionales,

vi Pr´logo o rompiendo las reglas, y aprendiendo de sus errores. Al hacerlo, no quiero perder la mitad del semestre tratando de sortear problemas con una sintaxis abstru- sa, mensajes de error del compilador incomprensibles, o los varios cientos de maneras que un programa puede generar un error de proteci´n general. o Una de las razones por las que me gusta Python es por que proporciona un equi- librio muy bueno entre lo pr´ctico y lo conceptual. Puesto que Python es un a lenguaje interpretado, los principiantes pueden tomar el lenguaje y empezar a hacer cosas interesantes casi inmediato, sin perderse el los problemas de compila- ci´n y enlazado. Adem´s, Python viene con una gran biblioteca de m´dulos que o a o se pueden usar para hacer toda clase de tareas que abarcan desde programaci´n o para web a gr´ficos. Este enfoque pr´ctico es una buena manera de enganchar a a a estudiantes y permite que completen proyectos significativos. Sin embargo, Pyt- hon tambi´n puede servir como una base excelente para intruducir conceptos e importantes de inform´tica. Puesto que Python soporta completamente proce- a dimientos y clases, los estudiantes pueden introducirse gradualmente en temas como abstracci´n procedural, estructuras de datos, y programaci´n orientada a o objetos, que son aplicables a cursos posteriores en Java o C++. Python incluso toma prestada cierta cantidad de caracter´ ısticas de lenguajes de programaci´n o funcionales y puede usarse para intruducir conceptos que pudieran ser cubiertos en mas detalle en cursos de Scheme o Lisp. Leendo, el prefacio de Jeffrey, me sorprenden sus comentarios sobre que Pyt- hon le permite ver un “m´s alto nivel de ´xito y un bajo nivel de frustraci´n a e o 2 que puede “avanzar r´pido con mejores resultados”. Aunque estos comentarios a se refieren a sus cursos introductorios, a veces uso Python por estas mismas razones en cursos de inform´tica avanzada en la Universidad de Chicago. En a estos cursos me enfrento constantemente con la desalentadora tarea de cubrir un mont´n de material dif´ en un agotador trimestre de nueve semanas. Aun- o ıcil que es ciertamente posible para m´ infligir mucho dolor y sufrimiento usando un ı lenguaje como C++, he visto a menudo que ese estilo es ineficaz, especialmente cuando el curso se trata de un asunto sin relaci´n apenas con la “programaci´n”. o o Encuentro que usar Python me permite dedicarme m´s al asunto en cuesti´n a o mientras permito a los estudiantes completar proyectos utiles. ´ Aunque Python es todav´ un lenguaje joven y en desarollo, creo que tiene ıa un futuro brillante en la educaci´n. Este libro es un paso importante en esa o direcci´n. o David Beazley Universidad de Chicago Autor de Python Essential Reference

Prefacio Por Jeff Elkner Este libro debe su existencia a la colaboraci´n hecha posible por la Internet y o al movimiento de software libre. Sus tres autores, un profesor universitario, un profesor de instituto y un programador profesional, todav´ tienen que conocerse ıa cara a cara, pero hemos sido capaces de colaborar estrechamente y hemos reci- bido la ayuda de mucha gente maravillosa que han donado su tiempo y esfuerzo para ayudar a mejorar este libro. Creemos que este libro es un testamento a los beneficios y futuras posibilidades de este tipo de colaboraci´n, cuyo marco han establecido Richard Stallman y la o Free Software Foundation. C´mo y por qu´ vine a usar Python o e En 1999, el examen de Advanced Placement (AP) de Ciencias de la Computa- ci´n del Claustro Escolar se realiz´ por primera vez en C++. Como en muchos o o institutos en todo el pa´ la decisi´n de cambiar de lenguaje tuvo un impacto ıs, o directo sobre el curriculum de inform´tica en el Insituto de Yorktown en Ar- a lington, Virgina, donde doy clase. Hasta ese momento, el lenguaje de ense˜anza n era Pascal tanto en nuestro curso de primer a˜o como en el AP. Al seguir con n la pr´ctica anterior de dar a los estudiantes dos a˜os de exposici´n al mismo a n o lenguaje, tomamos la decisi´n de cambiar a C++ en el aula de primer a˜o del o n curso 1997-98 de modo que estar´ ıamos en sinton´ con el cambio del Claustro ıa Escolar para el curso AP del a˜o siguiente. n Dos a˜os m´s tarde, me convenc´ de que C++ era una mala elecci´n para iniciar n a ı o a los estudiantes en la inform´tica. Aunque es un lenguaje de programaci´n a o muy poderoso, tambi´n es extremadamente dif´ de aprender y ense˜ar. Me e ıcil n encontr´ luchando constantemente con la dif´ sintaxis de C++ y sus m´ltiples e ıcil u formas de hacer las cosas, y como consecuencia perd´ muchos estudiantes sin ıa

viii Prefacio necesidad. Convencido de que deb´ de haber una elecci´n mejor para el lenguaje ıa o de nuestro curso de primer a˜o, me puse a buscar una alternativa para C++. n Necesitaba un lenguaje que funcionase tanto en las m´quinas de nuestro labo- a ratorio de Linux como en las plataformas Windows y Macintosh que la mayor´ ıa de los estudiantes ten´ en casa. Quer´ que fuera de c´digo abierto, para que ıan ıa o los estudiantes pudieran usarlo en casa sin importar su nivel econ´mico. Quer´ o ıa un lenguaje utilizado por programadores profesionales, y que tuviera una co- munidad activa de desarrolladores a su alrededor. Ten´ que soportar tanto la ıa programaci´n procedural como la orientada a objetos. Y lo m´s importante, o a ten´ que ser f´cil de aprender y de ense˜ar. Cuando investigu´ las opciones con ıa a n e estos obejetivos en mente, Python destac´ como el mejor candidato. o Ped´ a uno de los estudiantes m´s talentosos de Yorktown, Matt Ahrens, que ı a probase Python. En dos meses, no s´lo hab´ aprendido el lenguaje, sino que o ıa escribi´ una aplicaci´n llamada pyTicket que permit´ a nuestro personal infor- o o ıa mar de problemas tecnol´gicos via Web. Sab´ que Matt no pod´ terminar una o ıa ıa aplicaci´n de tal escala en tan poco tiempo con C++, y este logro, combinado o con la positiva valoraci´n de Python por parte de Matt, suger´ que Python era o ıa la soluci´n que buscaba. o Encontrar un libro de texto Una vez decidido a usar Python tanto en mis clases de inform´tica b´sica como a a en el a˜o siguiente, el problema m´s acuciante era la falta de un libro de texto n a disponible. El contenido libre vino al rescate. Anteriormente en ese a˜o, Richard Stallman n me present´ a Allen Downey. Ambos hab´ o ıamos escrito a Richard expresando nuestro inter´s en desarrollar conenidos educativos libres. Allen ya hab´ escrito e ıa un libro de texto de inform´tica de primer a˜o, How to Think Like a Com- a n puter Scientist. Cuando le´ ese libro, supe inmediatamente que quer´ usarlo ı ıa en mi clase. Era el libro de inform´tica m´s claro y pr´ctico que hab´ visto. a a a ıa Pon´ el ´nfasis en los procesos de pensamiento involucrados en la programaci´n ıa e o m´s que en las caracter´ a ısticas de un lenguaje en particular. Su lectura me hizo inmediatamente un maestro mejor. How to Think Like a Computer Scientist no era s´lo un libro excelente, sino que o se public´ bajo la licencia p´blica GNU, lo que significaba que pod´ usarse y o u ıa modificarse libremente para ajustarse a las necesidades de su usuario. Una vez que decid´ usar Python, se me ocurri´ que podr´ traducir la versi´n original ı o ıa o en Java del libro de Allen al nuevo lenguaje. Aunque no hubiera sido capaz de escribir un libro de texto por mi cuenta, tener el libro de Allen para trabajar a

ix partir de ´l me hizo posible hacerlo, mostrando al mismo tiempo que el modelo e cooperativo de desarrollo que tan buenos resultados hab´ dado en el software ıa pod´ funcionar tambi´n para el contenido educativo. ıa e El trabajo en este libro durante los dos ultimos a˜os ha sido gratificante para mis ´ n estudiantes y para m´ y mis estudiantes desempe˜aron un importante papel en ı, n el proceso. Como pod´ hacer cambios instant´neos cuando alguien encontraba ıa a un error ortogr´fico o un pasaje dif´ a ıcil, los anim´ a buscar errores en el libro e d´ndoles un punto extra cada vez que hac´ una sugerencia que terminaba a ıan como un cambio en el texto. Esto tuvo el doble beneficio de animarlos a leer el texto con m´s atenci´n y tener el texto revisado en profundidad por sus cr´ a o ıticos m´s importantes: los estudiantes que lo usan para aprender inform´tica. a a Para la segunda mitad del libro, acerca de la programaci´n orientada a objetos, o sab´ que necesitar´ a alguien con m´s experiencia real en programaci´n de ıa ıa a o la que yo ten´ para hacerlo bien. El libro se estanc´ en un estado inacabado ıa o durante buena parte de un a˜o hasta que la comunidad de c´digo abierto de n o nuevo proporcion´ los medios necesarios para su terminaci´n. o o Recib´ un correo electr´nico de Chris Meyers expresando su inter´s en el li- ı o e bro. Chris es un programador profesional que empez´ a impartir un curso de o programaci´n con Python el a˜o pasado en el Colegio de Lane Community, o n en Eugene, Oregon. La perspectiva de impartir el curso llev´ a Chris has- o ta el libro, y empez´ a colaborar con ´l inmediatamente. Hacia el final del o e a˜o escolar hab´ creado un proyecto complementario en nuesto sitio web en n ıa http://www.ibiblio.org/obp llamado Python for Fun y estaba trabajando con algunos de mis estudiantes aventajados como profesor magistral, dirigi´ndo- e les m´s all´ de donde yo pod´ llevarles. a a ıa Presentando la programaci´n con Python o El proceso de traducir y usar How to Think Like a Computer Scientist duran- te los dos ultimos a˜os ha confirmado la idoneidad de Python para ense˜ar a ´ n n estudiantes principiantes. Python simplifica enormemente los ejemplos de pro- gramaci´n y facilita la ense˜anza de los conceptos importantes en programaci´n. o n o

x Prefacio El primer ejemplo del texto ilustra esta cuesti´n. Es el tradicional programa o “hola, mundo”, que en la versi´n C++ del libro es as´ o ı: #include <iostream.h> void main() { cout << "Hola, mundo" << endl; } en la versi´n Python se convierte en: o print "Hola, Mundo" Aunque es un ejemplo trivial, destacan las ventajas de Python. El curso de Inform´tica I en Yorktown no tiene prerrequisitos, as´ que muchos de los estu- a ı diantes que ven este ejemplo est´n mirando su primer programa. Algunos de a ellos est´n sin duda un poco nerviosos, tras haber o´ que programar compu- a ıdo tadores es algo dif´ de aprender. La versi´n C++ siempre me ha obligado a ıcil o elegir entre dos opciones insatisfactorias: explicar las sentencias #include, void main(), {, y } y arriesgarme a confundir o intimidar a algunos estudiantes desde el principio, o decirles “No te preocupes de todo eso ahora, hablaremos de ello m´s tarde”, y arriesgarme a lo mismo. Los objetivos educativos en este momento a del curso son exponer a los estudiantes a la idea de una sentencia de progra- maci´n y llevarles a escribir su primer programa, present´ndoles de esta forma o a el entorno de programaci´n. La programaci´n con Python tiene exactamente lo o o que necesito para hacer estas cosas, y nada m´s. a La comparaci´n del texto explicativo de este programa para cada versi´n del o o libro ilustra mejor lo que esto significa para los estudiantes principiantes. Hay trece p´rrafos de explicaci´n de “¡Hola, mundo!” en la versi´n C++. En la a o o versi´n Python s´lo hay dos. A´n m´s importante: los once p´rrafos que faltan o o u a a no tocan las “grandes ideas” de la programaci´n de computadores, sino las o minucias de la sintaxis de C++. Encontr´ que esto mismo suced´ por todo el e ıa libro. P´rrafos enteros desapareciendo de la versi´n Python del texto porque la a o sintaxis clara de Python los hace innecesarios. El uso de un lenguaje de muy alto nivel como Python permite que el profesor deje para m´s tarde hablar sobre los detalles de bajo nivel de la m´quina hasta a a que los estudiantes tengan el fondo necesario para entender los detalles. De este modo crea la habilidad de poner pedag´gicamente “antes lo primero”. Uno de o los mejores ejemplos de ello es la manera en la cual Python maneja las variables. En C++ una variable es un nombre para un lugar que contiene una cosa. Las variables deben declararse seg´n su tipo en parte porque el tama˜o del lugar al u n que apuntan tiene que determinarse de antemano. As´ la idea de una variable ı, est´ ligada al hardware de la m´quina. El concepto poderoso y fundamental de a a

xi lo que es una variable ya es suficientemente dif´ para estudiantes principiantes ıcil (tanto de inform´tica como de ´lgebra). Octetos y direcciones no ayudan a la a a comprensi´n. En Python una variable es un nombre que se˜ala una cosa. Este o n es un concepto mucho m´s intuitivo para estudiantes principiantes y est´ m´s a a a cerca del significado de “variable” que aprendieron en su clase de matem´ticas. a Este a˜o tuve muchas menos dificultades ense˜ando lo que son las variables que n n en el anterior, y pas´ menos tiempo ayud´ndoles con los problemas derivados e a de su uso. Otro ejemplo de c´mo Python ayuda en la ense˜anza y aprendizaje de la pro- o n gramaci´n es en su sintaxis para las funciones. Mis estudiantes siempre han o tenido una gran dificultad comprendiendo las funciones. El problema principal se centra alrededor de la diferencia entre la definici´n de una funci´n y la llama- o o da a una funci´n, y la distinci´n asociada entre un par´metro y un argumento. o o a Python viene al rescate con una sintaxis a la que no le falta belleza. La defini- ci´n de una funci´n empieza con la palabra clave def, y simplemente digo a mis o o estudiantes: “cuando definas una funci´n, empieza con def, seguido del nombre o de la funci´n que est´s definiendo; cuando llames a una funci´n, simplemente di o e o (escribe) su nombre”. Los par´metros van con las definiciones; los argumentos a con las llamadas. No hay tipo de retorno, tipos de par´metros, o par´metro por a a referencia y valor de por medio, por lo que ahora soy capaz de ense˜ar funciones n en la mitad de tiempo que antes, con mejor comprensi´n. o El uso de Python ha mejorado la eficacia de nuestro programa de inform´ticaa para todos los estudiantes. Veo un mayor nivel general de ´xito y un menor e nivel de frustraci´n del que experiment´ durante los dos a˜os que ense˜´ C++. o e n ne Avanzo m´s r´pido con mejores resultados. M´s estudiantes terminan el curso a a a con la habilidad de crear programas utiles y con la actitud positiva hacia la ´ experiencia de programaci´n que esto engendra. o Formar una comunidad He recibido correos electr´nicos de todos los rincones del planeta de parte o de gente que usa este libro para aprender o enese˜ar a programar. Ha em- n pezando a surgir una comunidad de usuarios, y muchas personas han contri- buido al proyecto mandando materiales a trav´s del sitio web complementario e http://www.thinkpython.com. Con la publicaci´n de este libro en forma impresa, espero que continue y se o acelere el crecimiento de la comunidad de usuarios. La emergencia de esta co- munidad de usuarios y la posibilidad que sugiere para colaboraciones similares entre educadores han sido para m´ las partes m´s excitantes de trabajar en este ı a proyecto. Trabajando juntos, podemos incrementar la calidad de los materiales

xii Prefacio disponibles para nuestro uso y ahorrar un tiempo valioso. Les invito a unirse a nuestra comunidad y espero con impaciencia saber algo de ustedes. Por favor, escriban a los autores a feedback@thinkpython.com. Jeffrey Elkner Escuela Secundaria Yortown Arlington, Virginia

Lista de Colaboradores Parafraseando la filosof´ de la Free Software Foundation, este libro es libre ıa como la libre expresi´n, pero no necesariamente gratis como la pizza gratis. o Se hizo realidad a causa de una colaboraci´n que no habr´ sido posible sin o ıa la GNU Free Documentation License. As´ que queremos agradecer a la Free ı Software Foundation por desarrollar esta licencia y, por supuesto, ponerla a nuestra disposici´n. o Tambi´n nos gustar´ dar las gracias a los m´s de cien lectores de aguda vista e ıa a que se han preocupado de enviarnos sugerencias y correcciones en los dos ulti- ´ mos a˜os. Siguiendo el esp´ n ıritu del software libre, decidimos expresar nuestra gratitud en la forma de una lista de colaboradores. Desgraciadamente, esta listo no est´ completa, pero hacemos lo que podemos para mantenerla actualizada. a Si se toma el tiempo de echar un vistazo a la lista, ver´ que cada una de las a personas que aparecen le ha ahorrado a usted y a los lectores que le sucedan la confusi´n de un error t´cnico o una explicaci´n poco clara simplemente en- o e o vi´ndonos una nota. a Pos imposible que parezca tras tantas correcciones, todav´ puede haber ıa errores en el libro. Si se encontrara con una, esperamos que se tome un minuto para ponerse en contacto con nosotros. La direcci´n de correo es o feedback@thinkpython.com. Si cambiamos algo a partir de su sugerencia, apa- recer´ en la siguiente versi´n de la lista de colaboradores (a no ser que pida a o quedar omitido). ¡Gracias! Lloyd Hugh Allen envi´ una correcci´n de la Secci´n 8.4. o o o Yvon Boulianne envi´ una correcci´n de un error sem´ntico en el Cap´ o o a ıtulo 5. Fred Bremmer comunic´ una correcci´n de la Secci´n 2.1. o o o Jonah Cohen escribi´ los scripts en Perl para convertir la fuente L TEX del o A libro en hermoso HTML.

xiv Lista de Colaboradores Michael Conlon envi´ una correcci´n gramatical del Cap´ o o ıtulo 2 y una mejora del estilo del Cap´ ıtulo 1, e inici´ una discusi´n sobre aspectos o o t´cnicos de los int´rpretes. e e Benoit Girard envi´ una correcci´n de un divertido error de la Secci´n 5.6. o o o Courtney Gleason y Katherine Smith escribieron horsebet.py, que se us´ como un caso de estudio en una versi´n temprana del libro. Su pro- o o grama puede encontrarse en el sitio web. Lee Harr comunic´ m´s correcciones de las que tenemos sitio para enume- o a rar aqu´ y de verdad deber´ aparecer como uno de los principales editores ı, ıa del texto. James Kaylin es un estudiante que us´ el texto. Envi´ numerosas correc- o o ciones. David Kershaw arregl´ la funci´n catTwice que no funcionaba en la Sec- o o ci´n 3.10. o Eddie Lam ha enviado numerosas correcciones de los Cap´ ıtulos 1, 2 y 3. Tambi´n arregl´ el Makefile de forma que crea un ´ e o ındice la primera vez que se ejecuta y nos ayud´ a preparar un esquema de versiones. o Man-Yong Lee envi´ una correcci´n del c´digo de ejemplo de la Secci´n o o o o 2.4. David Mayo se˜al´ que la palabra “unconscientemente”en el Cap´ n o ıtulo 1 deb´ cambiarse por “subconscientemente”. ıa Chris McAloon envi´ varias correciones de las Secciones 3.9 y 3.10. o Matthew J. Moelter ha sido un colaborador durante mucho tiempo y ha enviado numerosas correcciones y sugerencias. Simon Dicon Montford inform´ de una definici´n de funci´n faltante y o o o varios errores tipogr´ficos en el Cap´ a ıtulo 3. Tambi´n encontr´ errores en e o la funci´n incrementa del Cap´ o ıtulo 13. John Ouzts corrigi´ la definici´n de “valor de retorno”del Cap´ o o ıtulo 3. Kevin Parks envi´ valiosos comentarios y sugerencias acerca de c´mo me- o o jorar la distribuci´n del libro. o David Pool envi´ un error tipogr´fico en el glosario del Cap´ o a ıtulo 1, y tambi´n amables palabras de ´nimo. e a

xv Michael Schmitt envi´ una correcci´n del Cap´ o o ıtulo sobre archivos y excep- ciones. Robin Shaw se˜al´ un error en la Secci´n 13.1, donde la funci´n impri- n o o o meHora se usaba en un ejemplo sin haberla definido. Paul Sleigh encontr´ un error en el Cap´ o ıtulo 7 y un error en el script Perl de Jonah Cohen que, a partir de L TEX genera, el HTML. A Craig T. Snydal est´ poniendo a prueba el texto en un curso en la Uni- a versidad de Drew. Ha contribuido con varias sugerencias y correcciones de importancia. Ian Thomas y sus estudiantes usan el texto en un curso de programaci´n. o Son los primeros en probar los Cap´ ıtulos de la segunda mitad del libro, y han hecho numerosas correcciones y sugerencias. Keith Verheyden envi´ una correcci´n del Cap´ o o ıtulo 3. Peter Winstanley nos hizo saber de un persistente error en nuestro lat´ ın del Cap´ ıtulo 3. Chris Wrobel hizo correcciones al c´digo del Cap´ o ıtulo sobre E/S de archi- vos y excepciones. Moshe Zadka ha hecho contribuciones inestimables al proyecto. Adem´s a de escribir el primer borrador del Cap´ ıtulo sobre diccionarios, propor- cion´ una gu´ continuada en las primeras etapas del libro. o ıa Christoph Zwerschke envi´ varias correcciones y sugerencias pedag´gicas, o o y explic´ la diferencia entre gleich y selbe. o James Mayer envi´ un cargamento de errores tipogr´ficos y ortogr´ficos, o a a incluyendo dos en la lista de colaboradores. Hayden McAfee pill´ una inconsistencia potencialmente confusa entre dos o ejemplos. ´ Angel Arnal es parte de un equipo internacional de traductores que tra- bajan en la versi´n en espa˜ol del texto. Tambi´n ha encontrado varios o n e errores en la versi´n inglesa. o Tauhidul Hoque y Lex Berezhny crearon las ilustraciones del Cap´ ıtulo 1 y mejoraron muchas de las otras ilustraciones. Dr. Michele Alzetta pill´ un error en el Cap´ o ıtulo 8 y envi´ varios comen- o tarios y sugerencias pedag´gicas interesantes sobre Fibonacci y La Mona. o

xvi Lista de Colaboradores Andy Mitchell pill´ un error tipogr´fico en el Cap´ o a ıtulo 1 y un ejemplo err´neo en el Cap´ o ıtulo 2. Kalin Harvey sugiri´ una clarificaci´n al Cap´ o o ıtulo 7 y detect´ varios errores o tipogr´ficos. a Christopher P. Smith encontr´ varios errores tipogr´ficos y nos est´ ayu- o a a dando a preparar la actualizaci´n del libro para Python 2.2. o David Hutchins pill´ un error tipogr´fico en el Pr´logo. o a o Gregor Lingl ense˜a Python en un instituto de Viena, Austria. Est´ tra- n a bajando en una traducci´n del libro al alem´n, y pill´ un par de errores o a o graves en el Cap´ ıtulo 5. Julie Peters encontr´ un error tipogr´fico en el Prefacio. o a

´ Indice general Pr´logo o v Prefacio vii Lista de Colaboradores xiii 1. El Camino del Programa 1 1.1. El lenguaje de programaci´n Python . . . . . . . . . . . . . . . o 1 1.2. ¿Qu´ es un programa? . . . . . . . . . . . . . . . . . . . . . . . e 3 1.3. ¿Qu´ es la depuraci´n (debugging)? . . . . . . . . . . . . . . . . e o 4 1.4. Lenguajes formales y lenguajes naturales . . . . . . . . . . . . . 6 1.5. El primer programa . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.6. Glosario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2. Variables, expresiones y sentencias 11 2.1. Valores y tipos . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2. Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.3. Nombres de variables y palabras reservadas . . . . . . . . . . . 13 2.4. Sentencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.5. Evaluar expresiones . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.6. Operadores y expresiones . . . . . . . . . . . . . . . . . . . . . 16

xviii ´ Indice general 2.7. El orden de las operaciones . . . . . . . . . . . . . . . . . . . . 17 2.8. Las operaciones sobre cadenas . . . . . . . . . . . . . . . . . . . 17 2.9. Composici´n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 18 2.10. Los comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.11. Glosario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3. Funciones 21 3.1. Llamadas a funciones . . . . . . . . . . . . . . . . . . . . . . . . 21 3.2. Conversi´n de tipos . . . . . . . . . . . . . . . . . . . . . . . . . o 22 3.3. Coerci´n de tipos . . . . . . . . . . . . . . . . . . . . . . . . . . o 22 3.4. Funciones matem´ticas . . . . . . . . . . . . . . . . . . . . . . . a 23 3.5. Composici´n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 24 3.6. A˜adir funciones nuevas . . . . . . . . . . . . . . . . . . . . . . n 24 3.7. Las definiciones y el uso . . . . . . . . . . . . . . . . . . . . . . 26 3.8. Flujo de ejecuci´n . . . . . . . . . . . . . . . . . . . . . . . . . . o 27 3.9. Par´metros y argumentos . . . . . . . . . . . . . . . . . . . . . a 28 3.10. Las variables y los par´metros son locales . . . . . . . . . . . . a 29 3.11. Diagramas de pila . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.12. Funciones con resultado . . . . . . . . . . . . . . . . . . . . . . 31 3.13. Glosario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4. Condicionales y recursividad 35 4.1. El operador m´dulo . . . . . . . . . . . . . . . . . . . . . . . . . o 35 4.2. Expresiones booleanas . . . . . . . . . . . . . . . . . . . . . . . 36 4.3. Operadores l´gicos . . . . . . . . . . . . . . . . . . . . . . . . . o 36 4.4. Ejecuci´n condicional . . . . . . . . . . . . . . . . . . . . . . . . o 37 4.5. Ejecuci´n alternativa . . . . . . . . . . . . . . . . . . . . . . . . o 37 4.6. Condiciones encadenadas . . . . . . . . . . . . . . . . . . . . . . 38

´ Indice general xix 4.7. Condiciones anidadas . . . . . . . . . . . . . . . . . . . . . . . . 39 4.8. La sentencia return . . . . . . . . . . . . . . . . . . . . . . . . 40 4.9. Recursividad . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.10. Diagramas de pila para funciones recursivas . . . . . . . . . . . 42 4.11. Recursividad infinita . . . . . . . . . . . . . . . . . . . . . . . . 43 4.12. Entrada por teclado . . . . . . . . . . . . . . . . . . . . . . . . 44 4.13. Glosario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 5. Funciones productivas 47 5.1. Valores de retorno . . . . . . . . . . . . . . . . . . . . . . . . . 47 5.2. Desarrollo de programas . . . . . . . . . . . . . . . . . . . . . . 48 5.3. Composici´n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 51 5.4. Funciones booleanas . . . . . . . . . . . . . . . . . . . . . . . . 52 5.5. M´s recursividad . . . . . . . . . . . . . . . . . . . . . . . . . . a 53 5.6. Acto de fe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 5.7. Un ejemplo m´s . . . . . . . . . . . . . . . . . . . . . . . . . . . a 56 5.8. Comprobaci´n de tipos . . . . . . . . . . . . . . . . . . . . . . . o 57 5.9. Glosario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 6. Iteraci´n o 61 6.1. Asignaci´n m´ltiple . . . . . . . . . . . . . . . . . . . . . . . . . o u 61 6.2. La sentencia while . . . . . . . . . . . . . . . . . . . . . . . . . 62 6.3. Tablas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 6.4. Tablas de dos dimensiones . . . . . . . . . . . . . . . . . . . . . 66 6.5. Encapsulado y generalizaci´n . . . . . . . . . . . . . . . . . . . o 67 6.6. M´s encapsulaci´n . . . . . . . . . . . . . . . . . . . . . . . . . a o 68 6.7. Variables locales . . . . . . . . . . . . . . . . . . . . . . . . . . 69 6.8. M´s generalizaci´n . . . . . . . . . . . . . . . . . . . . . . . . . a o 70 6.9. Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 6.10. Glosario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

xx ´ Indice general 7. Cadenas 75 7.1. Un tipo de datos compuesto . . . . . . . . . . . . . . . . . . . . 75 7.2. Longitud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 7.3. Recorrido y el bucle for . . . . . . . . . . . . . . . . . . . . . . 76 7.4. Porciones de cadenas . . . . . . . . . . . . . . . . . . . . . . . . 78 7.5. Comparaci´n de cadenas . . . . . . . . . . . . . . . . . . . . . . o 78 7.6. Las cadenas son inmutables . . . . . . . . . . . . . . . . . . . . 79 7.7. Una funci´n “encuentra” . . . . . . . . . . . . . . . . . . . . . . o 80 7.8. Bucles y conteo . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 7.9. El m´dulo “string” . . . . . . . . . . . . . . . . . . . . . . . . . o 81 7.10. Clasificaci´n de caracteres . . . . . . . . . . . . . . . . . . . . . o 82 7.11. Glosario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 8. Listas 85 8.1. Valores de una lista . . . . . . . . . . . . . . . . . . . . . . . . . 85 8.2. Acceso a los elementos . . . . . . . . . . . . . . . . . . . . . . . 86 8.3. Longitud (tama˜o) de una lista . . . . . . . . . . . . . . . . . . n 87 8.4. Pertenencia a una lista . . . . . . . . . . . . . . . . . . . . . . . 88 8.5. Listas y bucles for . . . . . . . . . . . . . . . . . . . . . . . . . 88 8.6. Operaciones con listas . . . . . . . . . . . . . . . . . . . . . . . 89 8.7. Porciones (slices) . . . . . . . . . . . . . . . . . . . . . . . . . . 90 8.8. Las listas son mutables . . . . . . . . . . . . . . . . . . . . . . . 90 8.9. Borrado en una lista . . . . . . . . . . . . . . . . . . . . . . . . 91 8.10. Objetos y valores . . . . . . . . . . . . . . . . . . . . . . . . . . 91 8.11. Alias (poner sobrenombres) . . . . . . . . . . . . . . . . . . . . 92 8.12. Clonar listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 8.13. Listas como par´meteros . . . . . . . . . . . . . . . . . . . . . . a 94 8.14. Listas anidadas . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

´ Indice general xxi 8.15. Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 8.16. Cadenas y listas . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 8.17. Glosario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 9. Tuplas 99 9.1. Mutabilidad y tuplas . . . . . . . . . . . . . . . . . . . . . . . . 99 9.2. Asignaci´n de tuplas . . . . . . . . . . . . . . . . . . . . . . . . 100 o 9.3. Tuplas como valor de retorno . . . . . . . . . . . . . . . . . . . 101 9.4. N´meros aleatorios . . . . . . . . . . . . . . . . . . . . . . . . . 101 u 9.5. Lista de n´meros aleatorios . . . . . . . . . . . . . . . . . . . . 102 u 9.6. Conteo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 9.7. Muchos baldes . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 9.8. Una soluci´n en una sola pasada . . . . . . . . . . . . . . . . . 106 o 9.9. Glosario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 10.Diccionarios 109 10.1. Operaciones sobre diccionarios . . . . . . . . . . . . . . . . . . . 110 10.2. M´todos del diccionario . . . . . . . . . . . . . . . . . . . . . . 111 e 10.3. Asignaci´n de alias y copiado . . . . . . . . . . . . . . . . . . . 112 o 10.4. Matrices dispersas . . . . . . . . . . . . . . . . . . . . . . . . . 112 10.5. Pistas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 10.6. Enteros largos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 10.7. Contar letras . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 10.8. Glosario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 11.Archivos y excepciones 119 11.1. Archivos de texto . . . . . . . . . . . . . . . . . . . . . . . . . . 121 11.2. Escribir variables . . . . . . . . . . . . . . . . . . . . . . . . . . 123 11.3. Directorios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

xxii ´ Indice general 11.4. Encurtido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 11.5. Excepciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 11.6. Glosario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 12.Clases y objetos 131 12.1. Tipos compuestos definidos por el usuario . . . . . . . . . . . . 131 12.2. Atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 12.3. Instancias como par´metro . . . . . . . . . . . . . . . . . . . . . 133 a 12.4. Mismidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 12.5. Rect´ngulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 a 12.6. Instancias como valores de retorno . . . . . . . . . . . . . . . . 136 12.7. Los objetos son mudables . . . . . . . . . . . . . . . . . . . . . 136 12.8. Copiado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 12.9. Glosario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 13.Clases y funciones 141 13.1. Hora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 13.2. Funciones puras . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 13.3. Modificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 13.4. ¿Qu´ es mejor? . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 e 13.5. Desarrollo de prototipos frente a planificaci´n . . . . . . . . . . 145 o 13.6. Generalizaci´n o . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 13.7. Algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 13.8. Glosario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 14.Clases y m´todos e 149 14.1. Caracter´ ısticas de la orientaci´n a objetos . . . . . . . . . . . . 149 o 14.2. imprimeHora . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 14.3. Otro ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

´ Indice general xxiii 14.4. Un ejemplo m´s complicado . . . . . . . . . . . . . . . . . . . . 152 a 14.5. Argumentos opcionales . . . . . . . . . . . . . . . . . . . . . . . 153 14.6. El m´todo de inicializaci´n . . . . . . . . . . . . . . . . . . . . . 154 e o 14.7. Revisi´n de los Puntos . . . . . . . . . . . . . . . . . . . . . . . 155 o 14.8. Sobrecarga de operadores . . . . . . . . . . . . . . . . . . . . . 156 14.9. Polimorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 14.10. Glosario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 15.Conjuntos de objetos 161 15.1. Composici´n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 o 15.2. Objetos Carta . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 15.3. Atributos de clase y el m´todo e str . . . . . . . . . . . . . . 163 15.4. Comparaci´n de naipes . . . . . . . . . . . . . . . . . . . . . . . 164 o 15.5. Mazos de naipes . . . . . . . . . . . . . . . . . . . . . . . . . . 165 15.6. Impresi´n del mazo de naipes . . . . . . . . . . . . . . . . . . . 166 o 15.7. Barajar el mazo . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 15.8. Eliminaci´n y reparto de los naipes . . . . . . . . . . . . . . . . 168 o 15.9. Glosario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 16.Herencia 171 16.1. Herencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 16.2. Una mano de cartas . . . . . . . . . . . . . . . . . . . . . . . . 172 16.3. El reparto de los naipes . . . . . . . . . . . . . . . . . . . . . . 173 16.4. Mostremos la mano . . . . . . . . . . . . . . . . . . . . . . . . . 174 16.5. La clase JuegoDeCartas . . . . . . . . . . . . . . . . . . . . . . 175 16.6. La clase ManoDeLaMona . . . . . . . . . . . . . . . . . . . . . . . 176 16.7. La clase JuegoDeLaMona . . . . . . . . . . . . . . . . . . . . . . 177 16.8. Glosario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

xxiv ´ Indice general 17.Listas enlazadas 183 17.1. Referencias incrustadas . . . . . . . . . . . . . . . . . . . . . . . 183 17.2. La clase Nodo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 17.3. Listas como colecciones . . . . . . . . . . . . . . . . . . . . . . . 185 17.4. Listas y recursividad . . . . . . . . . . . . . . . . . . . . . . . . 186 17.5. Listas infinitas . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 17.6. Teorema fundamental de la ambig¨edad . . . . . . . . . . . . . 188 u 17.7. Modificar listas . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 17.8. Envoltorios y ayudantes . . . . . . . . . . . . . . . . . . . . . . 190 17.9. La clase ListaEnlazada . . . . . . . . . . . . . . . . . . . . . . 190 17.10. Invariantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 17.11. Glosario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 18.Pilas 195 18.1. Tipos abstractos de datos . . . . . . . . . . . . . . . . . . . . . 195 18.2. El TAD Pila . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 18.3. C´mo implementar pilas con listas de Python . . . . . . . . . . 196 o 18.4. Uso de push y pop . . . . . . . . . . . . . . . . . . . . . . . . . 197 18.5. Usar una pila para evaluar postfijo . . . . . . . . . . . . . . . . 198 18.6. An´lisis sint´ctico . . . . . . . . . . . . . . . . . . . . . . . . . . 199 a a 18.7. Evaluar un postfijo . . . . . . . . . . . . . . . . . . . . . . . . . 199 18.8. Clientes y proveedores . . . . . . . . . . . . . . . . . . . . . . . 200 18.9. Glosario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 19.Colas 203 19.1. El TAD Cola . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 19.2. Cola Enlazada . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 19.3. Rendimiento t´ ıpico . . . . . . . . . . . . . . . . . . . . . . . . . 205

´ Indice general xxv 19.4. Cola Enlazada Mejorada . . . . . . . . . . . . . . . . . . . . . . 205 19.5. Cola priorizada . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 19.6. La clase Golfista . . . . . . . . . . . . . . . . . . . . . . . . . 209 19.7. Glosario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 ´ 20. Arboles 211 20.1. Crear ´rboles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 a 20.2. Recorrer ´rboles a . . . . . . . . . . . . . . . . . . . . . . . . . . 213 ´ 20.3. Arboles de expresi´n . . . . . . . . . . . . . . . . . . . . . . . . 213 o 20.4. Recorrido de un ´rbol . . . . . . . . . . . . . . . . . . . . . . . 214 a 20.5. Construir un ´rbol de expresi´n . . . . . . . . . . . . . . . . . . 216 a o 20.6. Manejar errores . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 20.7. El ´rbol de animales . . . . . . . . . . . . . . . . . . . . . . . . 221 a 20.8. Glosario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 A. Depuraci´n o 225 A.1. Errores de sintaxis . . . . . . . . . . . . . . . . . . . . . . . . . 225 A.2. Errores en tiempo de ejecuci´n . . . . . . . . . . . . . . . . . . 227 o A.3. Errores sem´nticos . . . . . . . . . . . . . . . . . . . . . . . . . 231 a B. Crear un nuevo tipo de datos 235 B.1. Multiplicaci´n de fracciones . . . . . . . . . . . . . . . . . . . . 236 o B.2. Suma de fracciones . . . . . . . . . . . . . . . . . . . . . . . . . 237 B.3. Algoritmo de Euclides . . . . . . . . . . . . . . . . . . . . . . . 238 B.4. Comparar fracciones . . . . . . . . . . . . . . . . . . . . . . . . 239 B.5. Forzando la m´quina . . . . . . . . . . . . . . . . . . . . . . . . 240 a B.6. Glosario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241

xxvi ´ Indice general C. Listados Completos de Python 243 C.1. Clase Punto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 C.2. Clase Hora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 C.3. Cartas, mazos y juegos . . . . . . . . . . . . . . . . . . . . . . . 245 C.4. Lists Enlazadas . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 C.5. Clase Pila . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 C.6. Colas y colas priorizadas . . . . . . . . . . . . . . . . . . . . . . 251 C.7. ´ Arboles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 C.8. ´ Arboles de expresi´n . . . . . . . . . . . . . . . . . . . . . . . . 254 o C.9. Adivina el animal . . . . . . . . . . . . . . . . . . . . . . . . . . 255 C.10. Fraction class . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 D. Lecturas recomendadas 259 D.1. Libros y sitios web sobre Python . . . . . . . . . . . . . . . . . 260 D.2. Libros recomendados sobre inform´tica en general . . . . . . . . 261 a E. GNU Free Documentation License 263 E.1. Applicability and Definitions . . . . . . . . . . . . . . . . . . . 264 E.2. Verbatim Copying . . . . . . . . . . . . . . . . . . . . . . . . . 265 E.3. Copying in Quantity . . . . . . . . . . . . . . . . . . . . . . . . 265 E.4. Modifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 E.5. Combining Documents . . . . . . . . . . . . . . . . . . . . . . . 268 E.6. Collections of Documen

Add a comment

Related presentations

Presentación que realice en el Evento Nacional de Gobierno Abierto, realizado los ...

In this presentation we will describe our experience developing with a highly dyna...

Presentation to the LITA Forum 7th November 2014 Albuquerque, NM

Un recorrido por los cambios que nos generará el wearabletech en el futuro

Um paralelo entre as novidades & mercado em Wearable Computing e Tecnologias Assis...

Microsoft finally joins the smartwatch and fitness tracker game by introducing the...

Related pages

Aprende a pensar como un programador en python - es.scribd.com

Aprenda a Pensar Como un Programador. ... Este no es un entero legal en Python, pero es una expresi´n legal: o >>> print 1,000,000 1 0 0 En fin, ...
Read more

Aprenda a pensar como un programador con Python - TUSTOOLS

... aprenda-a-pensar-como-un-programador-con-python.rar ... [URL=http://uploading.com/51cm9484/aprenda-a-pensar-como-un-programador ... Programando en ...
Read more

Aprende a pensar como un programador en python - Documents

Share Aprende a pensar como un programador en python. ... Aprenda a Pensar Como un Programador con Python Aprenda a Pensar Como un Programador con ...
Read more

5 Libros sobre Python para empezar - comoprogramar.org

... DAprenda a Pensar Como un Programador con Python: E ... Aprenda a Pensar Como un Programador con Python: ... (LEMP) en Ubuntu 14.04 ...
Read more

Aprenda A Pensar Como Un Programador Programando En Python ...

1. Aprenda a Pensar Como un Programador con Python 2. Aprenda a Pensar Como un Programador con PythonAllen DowneyJeffrey Elkner Chris Meyers Traducido por ...
Read more

como pensar como un ceo at Rapidshare | cognitivefiles.com

Aprenda a pensar como un programador ... a_pensar_como_un_programador_programando_en_python ... a_pensar_como_un_programador_programando_en ...
Read more

¡Quiero Aprender Python! - Wiki PyAr - Python Argentina

El programador combina ambas: ... El Tutorial de Python en Español ; Aprenda a pensar como un ... o incluso en Python, y quiero leer algo un poquito ...
Read more

como pensar como un ceo audio at Rapidshare ...

Aprenda a pensar como un programador ... a_pensar_como_un_programador_programando_en_python ... a_pensar_como_un_programador_programando_en ...
Read more

Aprender a programar con Python: una experiencia docente

a programar con Python y C. Python es un lenguaje que est´a en ... que ya han adoptado Python como parte de sus curr´ıcula en inform´atica o como ...
Read more