SlideShare uma empresa Scribd logo
1 de 312
Baixar para ler offline
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 Documents . . . . . . . . . . . . . . . . . . . . . 269
   E.7.   Aggregation with Independent Works . . . . . . . . . . . . . . . 269
   E.8.   Translation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
   E.9.   Termination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
   E.10. Future Revisions of This License . . . . . . . . . . . . . . . . . 270
   E.11. Addendum: How to Use This License for Your Documents . . . 270
Cap´
   ıtulo 1

El Camino del Programa

El objetivo de este libro es ense˜arle a pensar como lo hacen los cient´
                                 n                                         ıficos
inform´ticos. Esta manera de pensar combina las mejores caracter´
       a                                                           ısticas de la
matem´tica, la ingenier´ y las ciencias naturales. Como los matem´ticos, los
       a                ıa,                                          a
cient´
     ıficos inform´ticos usan lenguajes formales para designar ideas (espec´
                 a                                                         ıfica-
mente, computaciones). Como los ingenieros, ellos dise˜an cosas, ensamblando
                                                        n
sistemas a partir de componentes y evaluando ventajas y desventajas de cada
una de las alternativas. Como los cient´
                                       ıficos, ellos observan el comportamiento
de sistemas complejos, forman hip´tesis, y prueban sus predicciones.
                                  o

La habilidad m´s importante del cient´
                a                      ıfico inform´tico es la soluci´n de pro-
                                                  a                 o
blemas. La soluci´n de problemas incluye poder formular problemas, pensar en
                   o
la soluci´n de manera creativa, y expresar una soluci´n con claridad y precisi´n.
         o                                           o                        o
Como se ver´, el proceso de aprender a programar es la oportunidad perfecta
             a
para desarrollar la habilidad de resolver problemas. Por esa raz´n este cap´
                                                                 o          ıtulo
se llama “El Camino del programa”.

A cierto nivel, usted aprender´ a programar, lo cual es una habilidad muy util
                              a                                            ´
por s´ misma. A otro nivel, usted utilizar´ la programaci´n para obtener alg´n
     ı                                    a              o                  u
resultado. Ese resultado se ver´ m´s claramente durante el proceso.
                               a a



1.1.     El lenguaje de programaci´n Python
                                  o
El lenguaje de programaci´n que aprender´ es Python. Python es un ejemplar
                         o              a
de un lenguaje de alto nivel; otros ejemplos de lenguajes de alto nivel son C,
C++, Perl y Java.
2                                                    El Camino del Programa

Como se puede deducir de la nomenclatura “lenguaje de alto nivel”, tambi´n    e
existen lenguajes de bajo nivel, a los que tambi´n se califica como lengua-
                                                     e
jes de m´quina o lenguajes ensambladores. A prop´sito, los computadores s´lo
         a                                          o                        o
ejecutan programas escritos en lenguajes de bajo nivel. Los programas de alto
nivel tienen que traducirse antes de ejecutarse. Esta traducci´n lleva tiempo, lo
                                                              o
cual es una peque˜a desventaja de los lenguajes de alto nivel.
                   n

Aun as´ las ventajas son enormes. En primer lugar, la programaci´n en lenguajes
       ı                                                         o
de alto nivel es mucho m´s f´cil; escribir programas en un lenguaje de alto nivel
                         a a
toma menos tiempo, los programas son m´s cortos y m´s f´ciles de leer, y es m´s
                                           a           a a                     a
probable que estos programas sean correctos. En segundo lugar, los lenguajes
de alto nivel son portables, lo que significa que pueden ejecutarse en tipos
diferentes de computadores sin modificaci´n alguna o con pocas modificaciones.
                                            o
Los programas escritos en lenguajes de bajo nivel s´lo pueden ser ejecutarse en
                                                    o
un tipo de computador y deben reescribirse para ejecutarlos en otro.

Debido a estas ventajas, casi todos los programa se escriben en un lenguaje de
alto nivel. Los lenguajes de bajo nivel s´lo se usan para unas pocas aplicaciones
                                         o
especiales.

Hay dos tipos de programas que traducen lenguajes de alto nivel a lenguajes
de bajo nivel: int´rpretes y compiladores. Un int´rprete lee un programa de
                    e                                   e
alto nivel y lo ejecuta, lo que significa que lleva a cabo lo que indica el programa.
Traduce el programa poco a poco, leyendo y ejecutando cada comando.


              CODIGO             INTERPRETER               SALIDA
              FUENTE



Un compilador lee el programa y lo traduce todo al mismo tiempo, antes de
ejecutar cualquiera de las instrucciones. En este caso, al programa de alto nivel
se le llama el c´digo fuente, y al programa traducido el c´digo de obje-
                o                                               o
to o el c´digo ejecutable. Una vez compilado el programa, puede ejecutarlo
         o
repetidamente sin volver a traducirlo.


CODIGO                               CODIGO
                COMPILADOR                            EJECUTOR             SALIDA
FUENTE                               OBJETO



Python se considera como lenguaje interpretado porque los programas de Pyt-
hon se ejecutan por medio de un int´rprete. Existen dos maneras de usar el
                                    e
1.2 ¿Qu´ es un programa?
       e                                                                         3

int´rprete: modo de comando y modo de gui´n. En modo de comando se escri-
   e                                         o
ben sentencias en el lenguaje Python y el int´rprete muestra el resultado.
                                             e
$ python
Python 1.5.2 (#1, Feb 1 2000, 16:32:16)
Copyright 1991-1995 Stichting Mathematish Centrum, Amsterdam
>>> print 1 + 1
2
La primera l´
            ınea de este ejemplo es el comando que pone en marcha el int´rprete
                                                                          e
Python. Las dos l´ıneas siguientes son mensajes del int´rprete. La tercera l´
                                                        e                    ınea
comienza con >>>, que es la invitaci´n del int´rprete para indicar que est´ listo.
                                     o        e                           a
Escribimos print 1 + 1 y el int´rprete contest´ 2.
                                 e               o
Alternativamente, se puede escribir el programa en un archivo y usar el int´rpre-
                                                                           e
te para ejecutar el contenido de dicho archivo. El archivo se llama, en este ca-
so, un gui´n. Por ejemplo, en un editor de texto se puede crear un archivo
           o
latoya.py que contenga esta l´ ınea:
print 1 + 1
Por acuerdo un´nime, los archivos que contienen programas de Python tienen
              a
nombres que terminan con .py.
Para ejecutar el programa, se le tiene que indicar el nombre del gui´n al int´rpre-
                                                                    o        e
te.
$ python latoya.py
2
En otros entornos de desarrollo los detalles de la ejecuci´n de programas pueden
                                                          o
ser diferentes. Aem´s, la mayor´ de programas son m´s interesantes que el
                   a              ıa                        a
mencionado.
La mayor´ de ejemplos en este libro se ejecutan desde en la l´
          ıa                                                 ınea de comando.
La l´
    ınea de comando es muy apropiada para el desarrollo de programas y para
pruebas r´pidas porque se pueden teclear las instrucciones de Python y se pue-
         a
den ejecutar inmediatamente. Una vez que un programa est´ completo, puede
                                                            a
archivarse en un gui´n para ejecutarlo o modificarlo en el futuro.
                    o


1.2.     ¿Qu´ es un programa?
            e
Un programa es una secuencia de instrucciones que especifican c´mo ejecutar
                                                              o
una computaci´n. La computaci´n puede ser algo matem´tico, como solucionar
             o               o                       a
4                                                 El Camino del Programa

un sistema de ecuaciones o determinar las ra´ de un polinomio, pero tambi´n
                                            ıces                          e
puede ser una computaci´n simb´lica, como buscar y reemplazar el texto de un
                        o       o
documento o (aunque parezca raro) compilar un programa.

Las instrucciones (comandos, ´rdenes) tienen una apariencia diferente en len-
                              o
guajes de programaci´n diferentes, pero existen algunas funciones b´sicas que
                      o                                            a
se presentan en casi todo lenguaje:

entrada: Recibir datos del teclado, o un archivo u otro aparato.

salida: Mostrar datos en el monitor o enviar datos a un archivo u otro aparato.

matem´ticas: Ejecutar operaciones b´sicas de matem´ticas como la adici´n y
       a                           a              a                   o
    la multiplicaci´n.
                   o

operaci´n condicional: Probar la veracidad de alguna condici´n y ejecutar
       o                                                    o
    una secuencia de instrucciones apropiada.

repetici´n: Ejecutar alguna acci´n repetidas veces, normalmente con alguna
        o                       o
     variaci´n.
            o

Lo crea o no, eso es todo. Todos los programas que existen, por complicados que
sean, est´n formulados exclusivamente con tales instrucciones. As´ una manera
         a                                                        ı,
de describir la programaci´n es: El proceso de romper una tarea en tareas cada
                           o
vez m´s peque˜as hasta que estas tareas sean suficientemente simples para ser
      a         n
ejecutadas con una de estas instrucciones simples.

Quiz´s esta descripci´n sea un poco ambigua. No se preocupe. Lo explicaremos
    a                o
con m´s detalle con el tema de los algoritmos.
      a



1.3.     ¿Qu´ es la depuraci´n (debugging)?
            e               o
La programaci´n es un proceso complejo y, por ser realizado por humanos, a
              o
menudo desemboca en errores. Por razones caprichosas, esos errores se llaman
bugs y el proceso de buscarlos y corregirlos se llama depuraci´n (en ingl´s
                                                               o          e
“debugging”).

Hay tres tipos de errores que pueden ocurrir en un programa, de sintaxis, en
tiempo de ejecuci´n y sem´nticos. Es muy util distinguirlos para encontrarlos
                 o        a               ´
mas r´pido.
     a
1.3 ¿Qu´ es la depuraci´n (debugging)?
       e               o                                                        5

1.3.1.    Errores sint´cticos
                      a

Python s´lo puede ejecutar un programa si el programa es correcto sint´ctica-
          o                                                                a
mente. En caso contrario, es decir si el programa no es correcto sint´cticamente,
                                                                     a
el proceso falla y devuelve un mensaje de error. El t´rmino sintaxis se refiere a
                                                     e
la estructura de cualquier programa y a las reglas de esa estructura. Por ejem-
plo, en espa˜ol la primera letra de toda oraci´n debe ser may´scula, y todas las
             n                                 o               u
oraciones deben terminar con un punto. esta oraci´n tiene un error sint´ctico.
                                                   o                      a
Esta oraci´n tambi´n
           o        e

Para la mayor´ de lectores, unos pocos errores sint´cticos no son significatvos,
              ıa                                   a
y por eso pueden leer la poes´ de e. e. cummings sin anunciar errores de sin-
                              ıa
taxis. Python no es tan permisivo. Si hay aunque sea un solo error sint´ctico
                                                                         a
en el programa, Python mostrar´ un mensaje de error y abortar´ la ejecuci´n
                                 a                               a           o
del programa. Durante las primeras semanas de su carrera como programador
pasar´, seguramente, mucho tiempo buscando errores sint´cticos. Sin embargo,
      a                                                   a
tal como adquiera experiencia tendr´ menos errores y los encontrar´ mas r´pido.
                                   a                              a      a



1.3.2.    Errores en tiempo de ejecuci´n
                                      o

El segundo tipo de error es un error en tiempo de ejecuci´n. Este error no aparece
                                                         o
hasta que se ejecuta el programa. Estos errores tambi´n se llaman excepciones
                                                       e
porque indican que algo excepcional (y malo) ha ocurrido.

Con los programas que vamos a escribir al principio, los errores en tiempo de
ejecuci´n ocurrir´n con poca frecuencia, as´ que puede pasar bastante tiempo
       o         a                         ı
hasta que vea uno.



1.3.3.    Errores sem´nticos
                     a

El tercer tipo de error es el error sem´ntico. Si hay un error de l´gica en su
                                        a                          o
programa, el programa se ejecutar´ sin ning´n mensaje de error, pero el resul-
                                   a        u
tado no ser´ el deseado. Ser´ cualquier otra cosa. Concretamente, el programa
            a                 a
har´ lo que usted le dijo.
   a

A veces ocurre que el programa escrito no es el programa que se ten´ en mente.
                                                                     ıa
El sentido o significado del programa (su sem´ntica) no es correcto. Es dif´ ha-
                                              a                             ıcil
llar errores de l´gica, porque requiere trabajar al rev´s, observando el resultado
                 o                                     e
del programa para averiguar lo que hace.
6                                                   El Camino del Programa

1.3.4.    Depuraci´n experimental
                  o
Una de las t´cnicas m´s importantes que usted aprender´ es la depuraci´n. Aun-
             e         a                                   a              o
que a veces es frustrante, la depuraci´n es una de las partes m´s intelectualmente
                                      o                        a
ricas, interesantes y estimulantes de la programaci´n.
                                                     o
La depuraci´n es una actividad parecida a la tarea de un investigador: se tie-
            o
nen que estudiar las claves para inducir los procesos y eventos llevaron a los
resultados que tiene a la vista.
La depuraci´n tambi´n es una ciencia experimental. Una vez que se tiene la
             o         e
idea de cu´l es el error, se modifica el programa y se intenta nuevamente. Si su
           a
hip´tesis fue la correcta se pueden predecir los resultados de la modificaci´n y
    o                                                                        o
estar´ m´s cerca de un programa correcto. Si su hip´tesis fue err´nea tendr´ que
      a a                                           o            o          a
idearse otra hip´tesis. Como dijo Sherlock Holmes, “Cuando se ha descartado
                 o
lo imposible, lo que queda, no importa cuan inveros´   ımil, debe ser la verdad.”
(A. Conan Doyle, The Sign of Four)
Para algunas personas, la programaci´n y la depuraci´n son lo mismo: la pro-
                                     o              o
gramaci´n es el proceso de depurar un programa gradualmente hasta que haga
        o
lo que usted quiera. La idea es que deber´ usted comenzar con un programa
                                         ıa
que haga algo y hacer peque˜as modificaciones, depur´ndolas sobre la marcha,
                            n                       a
de modo que siempre tenga un programa que funcione.
Por ejemplo, Linux es un sistema operativo que contiee miles de l´
                                                                 ıneas de c´digo,
                                                                           o
pero Linus Torvalds lo comenz´ como un programa para explorar el microproce-
                              o
sador Intel 80836. Seg´n Larry Greenfield, “Uno de los proyectos tempranos de
                      u
Linus fue un programa que alternaba la impresi´n de AAAA con BBBB. Este
                                                o
programa evolucion´ en Linux” (de The Linux Users’Guide Versi´n Beta 1).
                    o                                              o
Otros cap´
         ıtulos tratar´n m´s acerca del tema de depuraci´n y otras t´cnicas de
                      a   a                             o           e
programaci´n.
           o



1.4.     Lenguajes formales y lenguajes naturales
Los lenguajes naturales son los lenguajes hablados por seres humanos, como
el espa˜ol, el ingl´s y el franc´s. No los han dise˜ados personas (aunque se
       n           e            e                    n
intente poner cierto orden en ellos), sino que se han desarrollado naturalmente.
Los lenguajes formales son lenguajes dise˜ados por humanos y que tienen
                                                n
aplicaciones espec´ıficas. La notaci´n matem´tica, por ejemplo, es un lenguaje
                                    o          a
formal ya que se presta a la representaci´n de las relaciones entre n´meros y
                                           o                             u
s´
 ımbolos. Los qu´ımicos utilizan un lenguaje formal para representar la estructura
qu´ımica de las mol´culas. Y lo m´s importante:
                    e              a
1.4 Lenguajes formales y lenguajes naturales                                    7

     Los lenguajes de programaci´n son lenguajes formales de-
                                 o
     sarrollados para expresar computaciones.

Los lenguajes formales casi siempre tienen reglas sint´cticas estrictas. Por ejem-
                                                      a
plo, 3 + 3 = 6 es una expresi´n matem´tica correcta, pero 3 = +6$ no lo es. De
                             o         a
la misma manera, H2 0 es una nomenclatura qu´    ımica correcta, pero 2 Zz no lo
es.

Existen dos clases de reglas sint´cticas, en cuanto a unidades y estructura. Las
                                 a
unidades son los elementos b´sicos de un lenguaje, como lo son las palabras, los
                              a
n´meros y los elementos qu´
  u                          ımicos. Por ejemplo, en 3=+6$, $ no es una unidad
matem´tica aceptada (al menos hasta donde nosotros sabemos. Similarmente,
       a
2 Zz no es formal porque no hay ning´ n elemento con la abreviatura Zz.
                                       u

La segunda clase de regla sint´ctica est´ relacionada con la estructura de un
                               a        a
elemento; o sea, el orden de las unidades. La estructura de la sentencia 3=+6$
no se acepta porque no se puede escribir el s´
                                             ımbolo de igualdad seguido de un
 ımbolo positivo. Similarmente, las f´rmulas moleculares tienen que mostrar el
s´                                   o
n´mero de sub´
  u            ındice despu´s del elemento, no antes.
                           e

     A manera de pr´ctica, trate de producir una oraci´n con estructura
                     a                                 o
     aceptada pero que est´ compuesta de unidades irreconocibles. Luego
                           e
     escriba otra oraci´n con unidades aceptables pero con estructura no
                       o
     v´lida.
      a

Al leer una oraci´n, sea en un lenguaje natural o una sentencia en un lenguaje
                 o
t´cnico, se debe discernir la estructura de la oraci´n. En un lenguaje natural
 e                                                  o
este proceso, llamado an´lisis sint´ctico ocurre subconscientemente.
                         a          a

Por ejemplo cuando usted escucha la oraci´n “El otro zapato cay´”, entiende
                                            o                       o
que “el otro zapato” es el sujeto y “cay´” es el verbo. Cuando se ha analizado
                                        o
la oraci´n sint´cticamente, se puede deducir el significado, o la sem´ntica, de la
        o      a                                                    a
oraci´n. Suponiendo que sepa lo ques es un zapato y lo que es caer, entender´ el
     o                                                                       a
significado de la oraci´n.
                      o

Aunque existen muchas cosas en com´n entre los lenguajes naturales y los
                                    u
lenguajes formales—por ejemplo las unidades, la estructura, la sintaxis y la
sem´ntica—tambi´n existen muchas diferencias:
    a            e

ambig¨ edad: Los lenguajes naturales tienen much´
      u                                            ısimas ambig¨edades, que
                                                                  u
    los hablantes sortean usando claves contextuales y otra informaci´n. Los
                                                                     o
    lenguajes formales se dise˜an para estar completamente libres de am-
                                n
    big¨edades, o tanto como sea posible, lo que quiere decir que cualquier
        u
    sentencia tiene s´lo un significado, sin importar el contexto.
                     o
8                                                   El Camino del Programa

redundancia: Para reducir la ambig¨edad y los malentendidos, las lenguas na-
                                    u
    turales utilizan bastante redundancia. Como resultado suelen ser prolijos.
    Los lenguajes formales son menos redundantes y m´s concisos.
                                                       a

literalidad: Los lenguajes naturales tienen muchas met´foras y frases hechas.
                                                          a
      El significado de un dicho, por ejemplo “Estirar la pata”, es diferente al
      significado de sus sustantivos y verbos. En este ejemplo, la oraci´n no tiene
                                                                       o
      nada que ver con un pie y significa ’morirse’. Los lenguajes formales no
      difieren de su significado literal.

Los que aprenden a hablar un lenguaje natural—es decir, todo el mundo—
muchas veces tienen dificultad en adaptarse a los lenguajes formales. A veces
la diferencia entre los lenguajes formales y los naturales es comparable a la
diferencia entre la prosa y la poes´
                                   ıa:

Poes´ Se utiliza una palabra por su cualidad auditiva tanto como por su signi-
    ıa:
     ficado. El poema, en su totalidad, produce un efecto o reacci´n emocional.
                                                                 o
     La ambig¨edad no es solo com´n sino utilizada a prop´sito.
              u                    u                        o

Prosa: El significado literal de la palabra es mas importante y la estructura da
    m´s significado a´n. La prosa se presta al an´lisis m´s que la poes´ pero
      a              u                             a     a              ıa,
    todav´ contiene ambig¨edad.
          ıa                 u

Programas: El significado de un programa es inequ´  ıvoco y literal, y es enten-
    dido en su totalidad analizando las unidades y la estructura.

He aqu´ unas sugerencias para la lectura de un programa (y de otros lenguajes
        ı
formales). Primero, recuerde que los lenguajes formales son mucho m´s densos
                                                                      a
que los lenguajes naturales, y por consecuente lleva m´s tiempo leerlos. Tam-
                                                        a
bi´n, la estructura es muy importante, as´ que entonces no es una buena idea
  e                                        ı
leerlo de pies a cabeza, de izquierda a derecha. En vez de eso, aprenda a sepa-
rar las diferentes partes en su mente, identificar las unidades e interpretar la
estructura. Finalmente, ponga atenci´n a los detalles. Los fallos de puntuaci´n
                                      o                                      o
y la ortograf´ que puede obviar en el lenguaje natural, pueden suponer una
              ıa,
gran diferencia en un lenguaje formal.



1.5.     El primer programa
Tradicionalmente el primer programa en un lenguaje nuevo se llama “Hola,
mundo” (Hello world!) porque s´lo muestra las palabras “Hola a todo el mundo”.
                              o
En Python es as´
               ı:

print "Hola, mundo"
1.6 Glosario                                                                    9

Este es un ejemplo de una sentencia print, la cual no imprime nada en papel,
m´s bien muestra un valor. En este caso, el resultado es las palabras
 a

Hola, mundo

Las comillas se˜alan el comienzo y el final del valor; no aparecen en el resultado.
               n
Alguna gente eval´a la calidad de un lenguaje de programaci´n por la simplici-
                 u                                         o
dad del programa “Hola, mundo”. Si seguimos ese criterio, Python cumple con
todas sus metas.



1.6.     Glosario
soluci´n de problemas: El proceso de formular un problema, hallar la solu-
      o
     ci´n y expresar esa soluci´n.
       o                       o
lenguaje de alto nivel: Un lenguaje como Python dise˜ado para ser f´cil de
                                                    n              a
     leer y escribir para la gente.

lenguaje de bajo nivel: Un lenguaje de programaci´n dise˜ado para ser f´cil
                                                     o     n             a
     de ejecutar para un computador; tambi´n se lo llama “lenguaje de m´qui-
                                          e                            a
     na” o “lenguaje ensamblador”.
portabilidad: La cualidad de un programa que le permite ser ejecutado en
     m´s de un tipo de computador.
      a
interpretar: Ejecutar un programa escrito en un lenguaje de alto nivel tradu-
     ci´ndolo l´
       e       ınea por l´
                         ınea

compilar: Traducir un programa escrito en un lenguaje de alto nivel a un len-
    guaje de bajo nivel todo al mismo tiempo, en preparaci´n para la ejecuci´n
                                                          o                 o
    posterior.
c´digo fuente: Un programa escrito en un lenguaje de alto nivel antes de ser
 o
     compilado.

c´digo de objeto: La salida del compilador una vez que ha traducido el pro-
 o
     grama.

programa ejecutable: Otro nombre para el c´digo de objeto que est´ listo
                                          o                      a
     para ejecutarse.
gui´n: Un programa archivado (que va a ser interpretado).
   o

programa: Un conjunto de instrucciones que especifica una computaci´n.
                                                                  o
algoritmo: Un proceso general para resolver una clase completa de problemas.
10                                               El Camino del Programa

error (bug): Un error en un programa.

depuraci´n: El proceso de hallazgo y eliminaci´n de los tres tipos de errores
        o                                     o
    de programaci´n.
                 o

sintaxis: La estructura de un programa.

error sint´ctico: Un error en un programa que hace que el programa sea im-
          a
     posible de analizar sint´cticamente (e imposible de interpretar).
                             a

error en tiempo de ejecuci´n: Un error que no ocurre hasta que el progra-
                           o
     ma ha comenzado a ejecutarse e impide que el programa contin´e.
                                                                 u

excepci´n: Otro nombre para un error en tiempo de ejecuci´n.
       o                                                 o

error sem´ntico: Un error en un programa que hace que ejecute algo que no
           a
     era lo deseado.

sem´ntica: El significado de un programa.
   a

language natural: Cualquier lenguaje hablado que evolucion´ de forma natu-
                                                          o
     ral.

lenguaje formal: Cualquier lenguaje dise˜ado por humanos que tiene un
                                           n
     prop´sito espec´
          o         ıfico, como la representaci´n de ideas matem´ticas o pro-
                                              o                 a
     gramas de computadores; todos los lenguajes de programaci´n son lengua-
                                                              o
     jes formales.

unidad: Uno de los elementos b´sicos de la estructura sint´ctica de un progra-
                              a                           a
    ma, an´logo a una palabra en un lenguaje natural.
          a

an´lisis sint´ctico: La examinaci´n de un programa y el an´lisis de su estruc-
  a          a                   o                        a
     tura sint´ctica.
              a

sentencia print: Una instrucci´n que causa que el int´rprete Python muestre
                              o                      e
     un valor en el monitor.
Cap´
   ıtulo 2

Variables, expresiones y
sentencias

2.1.     Valores y tipos
El valor es uno de los elementos fundamentales (como por ejemplo una letra o
un n´mero) que manipula un programa. Los valores que hemos visto hasta el
    u
momento son 2 (el resultado de sumar 1 + 1) y Hola, mundo.
Estos valores son de distintos tipos: 2 es un entero y Hola, mundo es una
cadena, llamada as´ porque contiene una “cadena” de letras. Usted (y el
                    ı
int´rprete) puede identificar las cadenas porque est´n encerradas entre comi-
   e                                               a
llas.
La sentencia print tambi´n funciona con enteros:
                        e
>>> print 4
4
Si no est´ seguro del tipo que tiene un determinado valor, puede pregunt´rselo
         a                                                              a
al int´rprete de Python.
      e
>>> type("Hola, mundo")
<type ’string’>
>>> type(17)
<type ’int’>
No es sorprendente que las cadenas sean de tipo string (cadena en ingl´s) y
                                                                         e
los enteros sean de tipo int (por integer en ingl´s). De forma menos obvia, los
                                                 e
12                                           Variables, expresiones y sentencias

n´meros con decimales (separados por medio de un punto en ingl´s) son de tipo
 u                                                            e
float debido a la representaci´n de estos n´meros en el formato llamado de
                              o            u
coma flotante (floating-point).

>>> type(3.2)
<type ’float’>

¿Qu´ ocurre con los valores como "17" y "3.2"? Parecen n´meros, pero est´n
    e                                                   u               a
entre comillas como las cadenas.

>>> type("17")
<type ’string’>
>>> type("3.2")
<type ’string’>

Son cadenas.

Cuando escriba un entero largo, podr´ estar tentado de usar comas entre grupos
                                    ıa
de tres d´                          ´
         ıgitos, como en 1,000,000. Este no es un entero legal en Python, pero
es una expresi´n legal:
               o

>>> print 1,000,000
1 0 0

En fin, no era eso lo que quer´ ıamos. Python interpreta 1,000,000 como una
lista de tres n´meros que debe imprimir. As´ que recuerde no insertar comas en
               u                           ı
sus enteros. 1



2.2.       Variables
Una de las caracter´ ısticas m´s potentes de los lenguajes de programaci´n es
                              a                                         o
la capacidad de manipular variables. Una variable es un nombre que hace
referencia a un valor.

La sentencia de asignaci´n crea nuevas variables y les asigna un valor:
                        o

>>> mensaje = "Que onda?"
>>> n = 17
>>> pi = 3.14159

Este ejemplo muestra tres asignaciones. La primera de ellas asigna el valor
"Que onda?" a una variable nueva, de nombre mensaje. La segunda le da el
  1 El uso de la coma y el punto en n´mero es en ingl´s el contrario al uso espa˜ol, como se
                                     u               e                          n
apunt´ en una nota anterior
     o
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python
Todo Sobre El Lenguaje Python

Mais conteúdo relacionado

Mais procurados

Mais procurados (6)

Python
PythonPython
Python
 
El tutorial de pythonnnn
El tutorial de pythonnnnEl tutorial de pythonnnn
El tutorial de pythonnnn
 
Parallel Python sistemas operativos avanzados
Parallel Python sistemas operativos avanzadosParallel Python sistemas operativos avanzados
Parallel Python sistemas operativos avanzados
 
Introduccion a-python
Introduccion a-pythonIntroduccion a-python
Introduccion a-python
 
INFOSAN Tutorial python3 (1)
INFOSAN Tutorial python3 (1)INFOSAN Tutorial python3 (1)
INFOSAN Tutorial python3 (1)
 
Introducción a Python
Introducción a Python Introducción a Python
Introducción a Python
 

Destaque

Destaque (20)

Informe 555 aestable
Informe 555 aestableInforme 555 aestable
Informe 555 aestable
 
Info nivel 1 avanzado
Info nivel 1 avanzadoInfo nivel 1 avanzado
Info nivel 1 avanzado
 
Programa taller-gratuito-python
Programa taller-gratuito-pythonPrograma taller-gratuito-python
Programa taller-gratuito-python
 
Manual Basico para Encantadores de Serpientes (Python)
Manual Basico para Encantadores de Serpientes (Python)Manual Basico para Encantadores de Serpientes (Python)
Manual Basico para Encantadores de Serpientes (Python)
 
Python (práctica 3)
Python (práctica 3)Python (práctica 3)
Python (práctica 3)
 
Excel ingenieria
Excel ingenieriaExcel ingenieria
Excel ingenieria
 
Python (práctica 2)
Python (práctica 2)Python (práctica 2)
Python (práctica 2)
 
Iniciación a python
Iniciación a pythonIniciación a python
Iniciación a python
 
Python (práctica 1)
Python (práctica 1)Python (práctica 1)
Python (práctica 1)
 
Cuaderno funcion excel
Cuaderno funcion excelCuaderno funcion excel
Cuaderno funcion excel
 
Programación de Videojuegos con Python y Pilas (VI)
Programación de Videojuegos con Python y Pilas (VI)Programación de Videojuegos con Python y Pilas (VI)
Programación de Videojuegos con Python y Pilas (VI)
 
107956 excel avanzado
107956 excel avanzado107956 excel avanzado
107956 excel avanzado
 
Programación de Videojuegos con Python y Pilas (II)
Programación de Videojuegos con Python y Pilas (II)Programación de Videojuegos con Python y Pilas (II)
Programación de Videojuegos con Python y Pilas (II)
 
Python - Programación para machos
Python - Programación para machosPython - Programación para machos
Python - Programación para machos
 
Practicas de excel sena
Practicas  de excel senaPracticas  de excel sena
Practicas de excel sena
 
Python power 1
Python power 1Python power 1
Python power 1
 
Algoritmos programacion-python
Algoritmos programacion-pythonAlgoritmos programacion-python
Algoritmos programacion-python
 
Python (ejercicios)
Python (ejercicios)Python (ejercicios)
Python (ejercicios)
 
Ejercicios python
Ejercicios pythonEjercicios python
Ejercicios python
 
Escenarios de EXCEL
Escenarios de EXCELEscenarios de EXCEL
Escenarios de EXCEL
 

Semelhante a Todo Sobre El Lenguaje Python

Aprende a pensar como programador con python
Aprende a pensar como programador con pythonAprende a pensar como programador con python
Aprende a pensar como programador con pythonArnoldo Lovegood Fuentes
 
Intro Python
Intro PythonIntro Python
Intro PythonMoreLab
 
Resumen python
Resumen pythonResumen python
Resumen pythonhedaro
 
ippython 2024 completo Andrés Marzal y Isabel gracia
ippython 2024 completo Andrés Marzal y Isabel graciaippython 2024 completo Andrés Marzal y Isabel gracia
ippython 2024 completo Andrés Marzal y Isabel graciaMauro Alexis Chaves
 
programa curso python 2022.pdf
programa curso python 2022.pdfprograma curso python 2022.pdf
programa curso python 2022.pdfPabloMendivil
 
Aprender a-programar-con-python
Aprender a-programar-con-pythonAprender a-programar-con-python
Aprender a-programar-con-pythonfer zepeda
 
Intro Python
Intro PythonIntro Python
Intro Pythonctme
 
Informatica 2 tarea 1 corregida
Informatica 2 tarea 1 corregidaInformatica 2 tarea 1 corregida
Informatica 2 tarea 1 corregidaAnahiXool
 
Informatica 2 tarea 1 corregida
Informatica 2 tarea 1 corregidaInformatica 2 tarea 1 corregida
Informatica 2 tarea 1 corregidaRoss Vazquez
 
Taller netbooks parte_2
Taller netbooks parte_2Taller netbooks parte_2
Taller netbooks parte_2creandotic
 
Software libre y su utilización en la enseñanza
Software libre y su utilización en la enseñanzaSoftware libre y su utilización en la enseñanza
Software libre y su utilización en la enseñanzaN/A
 
Ponencia aniei alternativas libres
Ponencia aniei alternativas libresPonencia aniei alternativas libres
Ponencia aniei alternativas libresvic150cc
 
Lenguaje de programación Python
Lenguaje de programación PythonLenguaje de programación Python
Lenguaje de programación PythonKareliaRivas
 
Documento sin título
Documento sin títuloDocumento sin título
Documento sin títuloDiana Arano
 
Informatica 2 tarea 1
Informatica 2 tarea 1Informatica 2 tarea 1
Informatica 2 tarea 1Ross Vazquez
 

Semelhante a Todo Sobre El Lenguaje Python (20)

Aprende a pensar como programador con python
Aprende a pensar como programador con pythonAprende a pensar como programador con python
Aprende a pensar como programador con python
 
Intro Python
Intro PythonIntro Python
Intro Python
 
Resumen python
Resumen pythonResumen python
Resumen python
 
ippython 2024 completo Andrés Marzal y Isabel gracia
ippython 2024 completo Andrés Marzal y Isabel graciaippython 2024 completo Andrés Marzal y Isabel gracia
ippython 2024 completo Andrés Marzal y Isabel gracia
 
programa curso python 2022.pdf
programa curso python 2022.pdfprograma curso python 2022.pdf
programa curso python 2022.pdf
 
Aprender a-programar-con-python
Aprender a-programar-con-pythonAprender a-programar-con-python
Aprender a-programar-con-python
 
Intro Python
Intro PythonIntro Python
Intro Python
 
Gnu Linux I Educacio
Gnu Linux  I EducacioGnu Linux  I Educacio
Gnu Linux I Educacio
 
Informatica 2 tarea 1 corregida
Informatica 2 tarea 1 corregidaInformatica 2 tarea 1 corregida
Informatica 2 tarea 1 corregida
 
Informatica 2 tarea 1 corregida
Informatica 2 tarea 1 corregidaInformatica 2 tarea 1 corregida
Informatica 2 tarea 1 corregida
 
Intro python
Intro pythonIntro python
Intro python
 
Intro python
Intro pythonIntro python
Intro python
 
PYTON.pdf
PYTON.pdfPYTON.pdf
PYTON.pdf
 
Taller netbooks parte_2
Taller netbooks parte_2Taller netbooks parte_2
Taller netbooks parte_2
 
Software libre y su utilización en la enseñanza
Software libre y su utilización en la enseñanzaSoftware libre y su utilización en la enseñanza
Software libre y su utilización en la enseñanza
 
Aprender programando: motivaciones y alternativas
Aprender programando: motivaciones y alternativasAprender programando: motivaciones y alternativas
Aprender programando: motivaciones y alternativas
 
Ponencia aniei alternativas libres
Ponencia aniei alternativas libresPonencia aniei alternativas libres
Ponencia aniei alternativas libres
 
Lenguaje de programación Python
Lenguaje de programación PythonLenguaje de programación Python
Lenguaje de programación Python
 
Documento sin título
Documento sin títuloDocumento sin título
Documento sin título
 
Informatica 2 tarea 1
Informatica 2 tarea 1Informatica 2 tarea 1
Informatica 2 tarea 1
 

Último

Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 

Último (13)

Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 

Todo Sobre El Lenguaje Python

  • 1. Aprenda a Pensar Como un Programador con Python
  • 2.
  • 3. 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
  • 4. 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
  • 5. 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,
  • 6. 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
  • 7. 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
  • 8. 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
  • 9. 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
  • 10. 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
  • 11. 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
  • 12. 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
  • 13. 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.
  • 14. 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
  • 15. 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
  • 16. 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
  • 17. ´ 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
  • 18. 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
  • 19. ´ 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
  • 20. 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
  • 21. ´ 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
  • 22. 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
  • 23. ´ 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
  • 24. 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
  • 25. ´ 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
  • 26. 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 Documents . . . . . . . . . . . . . . . . . . . . . 269 E.7. Aggregation with Independent Works . . . . . . . . . . . . . . . 269 E.8. Translation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 E.9. Termination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 E.10. Future Revisions of This License . . . . . . . . . . . . . . . . . 270 E.11. Addendum: How to Use This License for Your Documents . . . 270
  • 27. Cap´ ıtulo 1 El Camino del Programa El objetivo de este libro es ense˜arle a pensar como lo hacen los cient´ n ıficos inform´ticos. Esta manera de pensar combina las mejores caracter´ a ısticas de la matem´tica, la ingenier´ y las ciencias naturales. Como los matem´ticos, los a ıa, a cient´ ıficos inform´ticos usan lenguajes formales para designar ideas (espec´ a ıfica- mente, computaciones). Como los ingenieros, ellos dise˜an cosas, ensamblando n sistemas a partir de componentes y evaluando ventajas y desventajas de cada una de las alternativas. Como los cient´ ıficos, ellos observan el comportamiento de sistemas complejos, forman hip´tesis, y prueban sus predicciones. o La habilidad m´s importante del cient´ a ıfico inform´tico es la soluci´n de pro- a o blemas. La soluci´n de problemas incluye poder formular problemas, pensar en o la soluci´n de manera creativa, y expresar una soluci´n con claridad y precisi´n. o o o Como se ver´, el proceso de aprender a programar es la oportunidad perfecta a para desarrollar la habilidad de resolver problemas. Por esa raz´n este cap´ o ıtulo se llama “El Camino del programa”. A cierto nivel, usted aprender´ a programar, lo cual es una habilidad muy util a ´ por s´ misma. A otro nivel, usted utilizar´ la programaci´n para obtener alg´n ı a o u resultado. Ese resultado se ver´ m´s claramente durante el proceso. a a 1.1. El lenguaje de programaci´n Python o El lenguaje de programaci´n que aprender´ es Python. Python es un ejemplar o a de un lenguaje de alto nivel; otros ejemplos de lenguajes de alto nivel son C, C++, Perl y Java.
  • 28. 2 El Camino del Programa Como se puede deducir de la nomenclatura “lenguaje de alto nivel”, tambi´n e existen lenguajes de bajo nivel, a los que tambi´n se califica como lengua- e jes de m´quina o lenguajes ensambladores. A prop´sito, los computadores s´lo a o o ejecutan programas escritos en lenguajes de bajo nivel. Los programas de alto nivel tienen que traducirse antes de ejecutarse. Esta traducci´n lleva tiempo, lo o cual es una peque˜a desventaja de los lenguajes de alto nivel. n Aun as´ las ventajas son enormes. En primer lugar, la programaci´n en lenguajes ı o de alto nivel es mucho m´s f´cil; escribir programas en un lenguaje de alto nivel a a toma menos tiempo, los programas son m´s cortos y m´s f´ciles de leer, y es m´s a a a a probable que estos programas sean correctos. En segundo lugar, los lenguajes de alto nivel son portables, lo que significa que pueden ejecutarse en tipos diferentes de computadores sin modificaci´n alguna o con pocas modificaciones. o Los programas escritos en lenguajes de bajo nivel s´lo pueden ser ejecutarse en o un tipo de computador y deben reescribirse para ejecutarlos en otro. Debido a estas ventajas, casi todos los programa se escriben en un lenguaje de alto nivel. Los lenguajes de bajo nivel s´lo se usan para unas pocas aplicaciones o especiales. Hay dos tipos de programas que traducen lenguajes de alto nivel a lenguajes de bajo nivel: int´rpretes y compiladores. Un int´rprete lee un programa de e e alto nivel y lo ejecuta, lo que significa que lleva a cabo lo que indica el programa. Traduce el programa poco a poco, leyendo y ejecutando cada comando. CODIGO INTERPRETER SALIDA FUENTE Un compilador lee el programa y lo traduce todo al mismo tiempo, antes de ejecutar cualquiera de las instrucciones. En este caso, al programa de alto nivel se le llama el c´digo fuente, y al programa traducido el c´digo de obje- o o to o el c´digo ejecutable. Una vez compilado el programa, puede ejecutarlo o repetidamente sin volver a traducirlo. CODIGO CODIGO COMPILADOR EJECUTOR SALIDA FUENTE OBJETO Python se considera como lenguaje interpretado porque los programas de Pyt- hon se ejecutan por medio de un int´rprete. Existen dos maneras de usar el e
  • 29. 1.2 ¿Qu´ es un programa? e 3 int´rprete: modo de comando y modo de gui´n. En modo de comando se escri- e o ben sentencias en el lenguaje Python y el int´rprete muestra el resultado. e $ python Python 1.5.2 (#1, Feb 1 2000, 16:32:16) Copyright 1991-1995 Stichting Mathematish Centrum, Amsterdam >>> print 1 + 1 2 La primera l´ ınea de este ejemplo es el comando que pone en marcha el int´rprete e Python. Las dos l´ıneas siguientes son mensajes del int´rprete. La tercera l´ e ınea comienza con >>>, que es la invitaci´n del int´rprete para indicar que est´ listo. o e a Escribimos print 1 + 1 y el int´rprete contest´ 2. e o Alternativamente, se puede escribir el programa en un archivo y usar el int´rpre- e te para ejecutar el contenido de dicho archivo. El archivo se llama, en este ca- so, un gui´n. Por ejemplo, en un editor de texto se puede crear un archivo o latoya.py que contenga esta l´ ınea: print 1 + 1 Por acuerdo un´nime, los archivos que contienen programas de Python tienen a nombres que terminan con .py. Para ejecutar el programa, se le tiene que indicar el nombre del gui´n al int´rpre- o e te. $ python latoya.py 2 En otros entornos de desarrollo los detalles de la ejecuci´n de programas pueden o ser diferentes. Aem´s, la mayor´ de programas son m´s interesantes que el a ıa a mencionado. La mayor´ de ejemplos en este libro se ejecutan desde en la l´ ıa ınea de comando. La l´ ınea de comando es muy apropiada para el desarrollo de programas y para pruebas r´pidas porque se pueden teclear las instrucciones de Python y se pue- a den ejecutar inmediatamente. Una vez que un programa est´ completo, puede a archivarse en un gui´n para ejecutarlo o modificarlo en el futuro. o 1.2. ¿Qu´ es un programa? e Un programa es una secuencia de instrucciones que especifican c´mo ejecutar o una computaci´n. La computaci´n puede ser algo matem´tico, como solucionar o o a
  • 30. 4 El Camino del Programa un sistema de ecuaciones o determinar las ra´ de un polinomio, pero tambi´n ıces e puede ser una computaci´n simb´lica, como buscar y reemplazar el texto de un o o documento o (aunque parezca raro) compilar un programa. Las instrucciones (comandos, ´rdenes) tienen una apariencia diferente en len- o guajes de programaci´n diferentes, pero existen algunas funciones b´sicas que o a se presentan en casi todo lenguaje: entrada: Recibir datos del teclado, o un archivo u otro aparato. salida: Mostrar datos en el monitor o enviar datos a un archivo u otro aparato. matem´ticas: Ejecutar operaciones b´sicas de matem´ticas como la adici´n y a a a o la multiplicaci´n. o operaci´n condicional: Probar la veracidad de alguna condici´n y ejecutar o o una secuencia de instrucciones apropiada. repetici´n: Ejecutar alguna acci´n repetidas veces, normalmente con alguna o o variaci´n. o Lo crea o no, eso es todo. Todos los programas que existen, por complicados que sean, est´n formulados exclusivamente con tales instrucciones. As´ una manera a ı, de describir la programaci´n es: El proceso de romper una tarea en tareas cada o vez m´s peque˜as hasta que estas tareas sean suficientemente simples para ser a n ejecutadas con una de estas instrucciones simples. Quiz´s esta descripci´n sea un poco ambigua. No se preocupe. Lo explicaremos a o con m´s detalle con el tema de los algoritmos. a 1.3. ¿Qu´ es la depuraci´n (debugging)? e o La programaci´n es un proceso complejo y, por ser realizado por humanos, a o menudo desemboca en errores. Por razones caprichosas, esos errores se llaman bugs y el proceso de buscarlos y corregirlos se llama depuraci´n (en ingl´s o e “debugging”). Hay tres tipos de errores que pueden ocurrir en un programa, de sintaxis, en tiempo de ejecuci´n y sem´nticos. Es muy util distinguirlos para encontrarlos o a ´ mas r´pido. a
  • 31. 1.3 ¿Qu´ es la depuraci´n (debugging)? e o 5 1.3.1. Errores sint´cticos a Python s´lo puede ejecutar un programa si el programa es correcto sint´ctica- o a mente. En caso contrario, es decir si el programa no es correcto sint´cticamente, a el proceso falla y devuelve un mensaje de error. El t´rmino sintaxis se refiere a e la estructura de cualquier programa y a las reglas de esa estructura. Por ejem- plo, en espa˜ol la primera letra de toda oraci´n debe ser may´scula, y todas las n o u oraciones deben terminar con un punto. esta oraci´n tiene un error sint´ctico. o a Esta oraci´n tambi´n o e Para la mayor´ de lectores, unos pocos errores sint´cticos no son significatvos, ıa a y por eso pueden leer la poes´ de e. e. cummings sin anunciar errores de sin- ıa taxis. Python no es tan permisivo. Si hay aunque sea un solo error sint´ctico a en el programa, Python mostrar´ un mensaje de error y abortar´ la ejecuci´n a a o del programa. Durante las primeras semanas de su carrera como programador pasar´, seguramente, mucho tiempo buscando errores sint´cticos. Sin embargo, a a tal como adquiera experiencia tendr´ menos errores y los encontrar´ mas r´pido. a a a 1.3.2. Errores en tiempo de ejecuci´n o El segundo tipo de error es un error en tiempo de ejecuci´n. Este error no aparece o hasta que se ejecuta el programa. Estos errores tambi´n se llaman excepciones e porque indican que algo excepcional (y malo) ha ocurrido. Con los programas que vamos a escribir al principio, los errores en tiempo de ejecuci´n ocurrir´n con poca frecuencia, as´ que puede pasar bastante tiempo o a ı hasta que vea uno. 1.3.3. Errores sem´nticos a El tercer tipo de error es el error sem´ntico. Si hay un error de l´gica en su a o programa, el programa se ejecutar´ sin ning´n mensaje de error, pero el resul- a u tado no ser´ el deseado. Ser´ cualquier otra cosa. Concretamente, el programa a a har´ lo que usted le dijo. a A veces ocurre que el programa escrito no es el programa que se ten´ en mente. ıa El sentido o significado del programa (su sem´ntica) no es correcto. Es dif´ ha- a ıcil llar errores de l´gica, porque requiere trabajar al rev´s, observando el resultado o e del programa para averiguar lo que hace.
  • 32. 6 El Camino del Programa 1.3.4. Depuraci´n experimental o Una de las t´cnicas m´s importantes que usted aprender´ es la depuraci´n. Aun- e a a o que a veces es frustrante, la depuraci´n es una de las partes m´s intelectualmente o a ricas, interesantes y estimulantes de la programaci´n. o La depuraci´n es una actividad parecida a la tarea de un investigador: se tie- o nen que estudiar las claves para inducir los procesos y eventos llevaron a los resultados que tiene a la vista. La depuraci´n tambi´n es una ciencia experimental. Una vez que se tiene la o e idea de cu´l es el error, se modifica el programa y se intenta nuevamente. Si su a hip´tesis fue la correcta se pueden predecir los resultados de la modificaci´n y o o estar´ m´s cerca de un programa correcto. Si su hip´tesis fue err´nea tendr´ que a a o o a idearse otra hip´tesis. Como dijo Sherlock Holmes, “Cuando se ha descartado o lo imposible, lo que queda, no importa cuan inveros´ ımil, debe ser la verdad.” (A. Conan Doyle, The Sign of Four) Para algunas personas, la programaci´n y la depuraci´n son lo mismo: la pro- o o gramaci´n es el proceso de depurar un programa gradualmente hasta que haga o lo que usted quiera. La idea es que deber´ usted comenzar con un programa ıa que haga algo y hacer peque˜as modificaciones, depur´ndolas sobre la marcha, n a de modo que siempre tenga un programa que funcione. Por ejemplo, Linux es un sistema operativo que contiee miles de l´ ıneas de c´digo, o pero Linus Torvalds lo comenz´ como un programa para explorar el microproce- o sador Intel 80836. Seg´n Larry Greenfield, “Uno de los proyectos tempranos de u Linus fue un programa que alternaba la impresi´n de AAAA con BBBB. Este o programa evolucion´ en Linux” (de The Linux Users’Guide Versi´n Beta 1). o o Otros cap´ ıtulos tratar´n m´s acerca del tema de depuraci´n y otras t´cnicas de a a o e programaci´n. o 1.4. Lenguajes formales y lenguajes naturales Los lenguajes naturales son los lenguajes hablados por seres humanos, como el espa˜ol, el ingl´s y el franc´s. No los han dise˜ados personas (aunque se n e e n intente poner cierto orden en ellos), sino que se han desarrollado naturalmente. Los lenguajes formales son lenguajes dise˜ados por humanos y que tienen n aplicaciones espec´ıficas. La notaci´n matem´tica, por ejemplo, es un lenguaje o a formal ya que se presta a la representaci´n de las relaciones entre n´meros y o u s´ ımbolos. Los qu´ımicos utilizan un lenguaje formal para representar la estructura qu´ımica de las mol´culas. Y lo m´s importante: e a
  • 33. 1.4 Lenguajes formales y lenguajes naturales 7 Los lenguajes de programaci´n son lenguajes formales de- o sarrollados para expresar computaciones. Los lenguajes formales casi siempre tienen reglas sint´cticas estrictas. Por ejem- a plo, 3 + 3 = 6 es una expresi´n matem´tica correcta, pero 3 = +6$ no lo es. De o a la misma manera, H2 0 es una nomenclatura qu´ ımica correcta, pero 2 Zz no lo es. Existen dos clases de reglas sint´cticas, en cuanto a unidades y estructura. Las a unidades son los elementos b´sicos de un lenguaje, como lo son las palabras, los a n´meros y los elementos qu´ u ımicos. Por ejemplo, en 3=+6$, $ no es una unidad matem´tica aceptada (al menos hasta donde nosotros sabemos. Similarmente, a 2 Zz no es formal porque no hay ning´ n elemento con la abreviatura Zz. u La segunda clase de regla sint´ctica est´ relacionada con la estructura de un a a elemento; o sea, el orden de las unidades. La estructura de la sentencia 3=+6$ no se acepta porque no se puede escribir el s´ ımbolo de igualdad seguido de un ımbolo positivo. Similarmente, las f´rmulas moleculares tienen que mostrar el s´ o n´mero de sub´ u ındice despu´s del elemento, no antes. e A manera de pr´ctica, trate de producir una oraci´n con estructura a o aceptada pero que est´ compuesta de unidades irreconocibles. Luego e escriba otra oraci´n con unidades aceptables pero con estructura no o v´lida. a Al leer una oraci´n, sea en un lenguaje natural o una sentencia en un lenguaje o t´cnico, se debe discernir la estructura de la oraci´n. En un lenguaje natural e o este proceso, llamado an´lisis sint´ctico ocurre subconscientemente. a a Por ejemplo cuando usted escucha la oraci´n “El otro zapato cay´”, entiende o o que “el otro zapato” es el sujeto y “cay´” es el verbo. Cuando se ha analizado o la oraci´n sint´cticamente, se puede deducir el significado, o la sem´ntica, de la o a a oraci´n. Suponiendo que sepa lo ques es un zapato y lo que es caer, entender´ el o a significado de la oraci´n. o Aunque existen muchas cosas en com´n entre los lenguajes naturales y los u lenguajes formales—por ejemplo las unidades, la estructura, la sintaxis y la sem´ntica—tambi´n existen muchas diferencias: a e ambig¨ edad: Los lenguajes naturales tienen much´ u ısimas ambig¨edades, que u los hablantes sortean usando claves contextuales y otra informaci´n. Los o lenguajes formales se dise˜an para estar completamente libres de am- n big¨edades, o tanto como sea posible, lo que quiere decir que cualquier u sentencia tiene s´lo un significado, sin importar el contexto. o
  • 34. 8 El Camino del Programa redundancia: Para reducir la ambig¨edad y los malentendidos, las lenguas na- u turales utilizan bastante redundancia. Como resultado suelen ser prolijos. Los lenguajes formales son menos redundantes y m´s concisos. a literalidad: Los lenguajes naturales tienen muchas met´foras y frases hechas. a El significado de un dicho, por ejemplo “Estirar la pata”, es diferente al significado de sus sustantivos y verbos. En este ejemplo, la oraci´n no tiene o nada que ver con un pie y significa ’morirse’. Los lenguajes formales no difieren de su significado literal. Los que aprenden a hablar un lenguaje natural—es decir, todo el mundo— muchas veces tienen dificultad en adaptarse a los lenguajes formales. A veces la diferencia entre los lenguajes formales y los naturales es comparable a la diferencia entre la prosa y la poes´ ıa: Poes´ Se utiliza una palabra por su cualidad auditiva tanto como por su signi- ıa: ficado. El poema, en su totalidad, produce un efecto o reacci´n emocional. o La ambig¨edad no es solo com´n sino utilizada a prop´sito. u u o Prosa: El significado literal de la palabra es mas importante y la estructura da m´s significado a´n. La prosa se presta al an´lisis m´s que la poes´ pero a u a a ıa, todav´ contiene ambig¨edad. ıa u Programas: El significado de un programa es inequ´ ıvoco y literal, y es enten- dido en su totalidad analizando las unidades y la estructura. He aqu´ unas sugerencias para la lectura de un programa (y de otros lenguajes ı formales). Primero, recuerde que los lenguajes formales son mucho m´s densos a que los lenguajes naturales, y por consecuente lleva m´s tiempo leerlos. Tam- a bi´n, la estructura es muy importante, as´ que entonces no es una buena idea e ı leerlo de pies a cabeza, de izquierda a derecha. En vez de eso, aprenda a sepa- rar las diferentes partes en su mente, identificar las unidades e interpretar la estructura. Finalmente, ponga atenci´n a los detalles. Los fallos de puntuaci´n o o y la ortograf´ que puede obviar en el lenguaje natural, pueden suponer una ıa, gran diferencia en un lenguaje formal. 1.5. El primer programa Tradicionalmente el primer programa en un lenguaje nuevo se llama “Hola, mundo” (Hello world!) porque s´lo muestra las palabras “Hola a todo el mundo”. o En Python es as´ ı: print "Hola, mundo"
  • 35. 1.6 Glosario 9 Este es un ejemplo de una sentencia print, la cual no imprime nada en papel, m´s bien muestra un valor. En este caso, el resultado es las palabras a Hola, mundo Las comillas se˜alan el comienzo y el final del valor; no aparecen en el resultado. n Alguna gente eval´a la calidad de un lenguaje de programaci´n por la simplici- u o dad del programa “Hola, mundo”. Si seguimos ese criterio, Python cumple con todas sus metas. 1.6. Glosario soluci´n de problemas: El proceso de formular un problema, hallar la solu- o ci´n y expresar esa soluci´n. o o lenguaje de alto nivel: Un lenguaje como Python dise˜ado para ser f´cil de n a leer y escribir para la gente. lenguaje de bajo nivel: Un lenguaje de programaci´n dise˜ado para ser f´cil o n a de ejecutar para un computador; tambi´n se lo llama “lenguaje de m´qui- e a na” o “lenguaje ensamblador”. portabilidad: La cualidad de un programa que le permite ser ejecutado en m´s de un tipo de computador. a interpretar: Ejecutar un programa escrito en un lenguaje de alto nivel tradu- ci´ndolo l´ e ınea por l´ ınea compilar: Traducir un programa escrito en un lenguaje de alto nivel a un len- guaje de bajo nivel todo al mismo tiempo, en preparaci´n para la ejecuci´n o o posterior. c´digo fuente: Un programa escrito en un lenguaje de alto nivel antes de ser o compilado. c´digo de objeto: La salida del compilador una vez que ha traducido el pro- o grama. programa ejecutable: Otro nombre para el c´digo de objeto que est´ listo o a para ejecutarse. gui´n: Un programa archivado (que va a ser interpretado). o programa: Un conjunto de instrucciones que especifica una computaci´n. o algoritmo: Un proceso general para resolver una clase completa de problemas.
  • 36. 10 El Camino del Programa error (bug): Un error en un programa. depuraci´n: El proceso de hallazgo y eliminaci´n de los tres tipos de errores o o de programaci´n. o sintaxis: La estructura de un programa. error sint´ctico: Un error en un programa que hace que el programa sea im- a posible de analizar sint´cticamente (e imposible de interpretar). a error en tiempo de ejecuci´n: Un error que no ocurre hasta que el progra- o ma ha comenzado a ejecutarse e impide que el programa contin´e. u excepci´n: Otro nombre para un error en tiempo de ejecuci´n. o o error sem´ntico: Un error en un programa que hace que ejecute algo que no a era lo deseado. sem´ntica: El significado de un programa. a language natural: Cualquier lenguaje hablado que evolucion´ de forma natu- o ral. lenguaje formal: Cualquier lenguaje dise˜ado por humanos que tiene un n prop´sito espec´ o ıfico, como la representaci´n de ideas matem´ticas o pro- o a gramas de computadores; todos los lenguajes de programaci´n son lengua- o jes formales. unidad: Uno de los elementos b´sicos de la estructura sint´ctica de un progra- a a ma, an´logo a una palabra en un lenguaje natural. a an´lisis sint´ctico: La examinaci´n de un programa y el an´lisis de su estruc- a a o a tura sint´ctica. a sentencia print: Una instrucci´n que causa que el int´rprete Python muestre o e un valor en el monitor.
  • 37. Cap´ ıtulo 2 Variables, expresiones y sentencias 2.1. Valores y tipos El valor es uno de los elementos fundamentales (como por ejemplo una letra o un n´mero) que manipula un programa. Los valores que hemos visto hasta el u momento son 2 (el resultado de sumar 1 + 1) y Hola, mundo. Estos valores son de distintos tipos: 2 es un entero y Hola, mundo es una cadena, llamada as´ porque contiene una “cadena” de letras. Usted (y el ı int´rprete) puede identificar las cadenas porque est´n encerradas entre comi- e a llas. La sentencia print tambi´n funciona con enteros: e >>> print 4 4 Si no est´ seguro del tipo que tiene un determinado valor, puede pregunt´rselo a a al int´rprete de Python. e >>> type("Hola, mundo") <type ’string’> >>> type(17) <type ’int’> No es sorprendente que las cadenas sean de tipo string (cadena en ingl´s) y e los enteros sean de tipo int (por integer en ingl´s). De forma menos obvia, los e
  • 38. 12 Variables, expresiones y sentencias n´meros con decimales (separados por medio de un punto en ingl´s) son de tipo u e float debido a la representaci´n de estos n´meros en el formato llamado de o u coma flotante (floating-point). >>> type(3.2) <type ’float’> ¿Qu´ ocurre con los valores como "17" y "3.2"? Parecen n´meros, pero est´n e u a entre comillas como las cadenas. >>> type("17") <type ’string’> >>> type("3.2") <type ’string’> Son cadenas. Cuando escriba un entero largo, podr´ estar tentado de usar comas entre grupos ıa de tres d´ ´ ıgitos, como en 1,000,000. Este no es un entero legal en Python, pero es una expresi´n legal: o >>> print 1,000,000 1 0 0 En fin, no era eso lo que quer´ ıamos. Python interpreta 1,000,000 como una lista de tres n´meros que debe imprimir. As´ que recuerde no insertar comas en u ı sus enteros. 1 2.2. Variables Una de las caracter´ ısticas m´s potentes de los lenguajes de programaci´n es a o la capacidad de manipular variables. Una variable es un nombre que hace referencia a un valor. La sentencia de asignaci´n crea nuevas variables y les asigna un valor: o >>> mensaje = "Que onda?" >>> n = 17 >>> pi = 3.14159 Este ejemplo muestra tres asignaciones. La primera de ellas asigna el valor "Que onda?" a una variable nueva, de nombre mensaje. La segunda le da el 1 El uso de la coma y el punto en n´mero es en ingl´s el contrario al uso espa˜ol, como se u e n apunt´ en una nota anterior o