Escribir programas (o programar) es una actividad muy gratificante y creativa. Puedes escribir programas por muchas razones, desde por mantenerte activo hasta por resolver un problema difícil de análisis de datos o por divertirte ayudando a otros a resolver cualquier cuestión. Este libro asume que todo el mundo necesita saber programar, y que una vez que sepas programar ya encontrarás tú mismo la forma de aplicar tus recién adquiridas habilidades.
En nuestra vida diaria estamos rodeados de computadores, que van desde portátiles hasta teléfonos móviles. Podemos pensar en esos equipos como nuestros “asistentes personales”, que son capaces de ocuparse de muchas cosas por nosotros. El hardware en los equipos que usamos a diario está creado esencialmente para hacernos continuamente la pregunta, “¿Qué quieres que haga a continuación?”
Los programadores añaden un sistema operativo y un conjunto de aplicaciones al hardware y así tenemos al final un Asistente Personal Digital que resulta bastante útil y capaz de ayudarnos a hacer muchas cosas diferentes.
Nuestros equipos son rápidos, tienen gran cantidad de memoria y podrían resultarnos muy útiles si tan solo conociéramos el lenguaje que debemos hablar para explicar a la máquina qué queremos que “haga a continuación”. Si conociéramos ese lenguaje, podríamos pedirle al equipo que realizase tareas repetitivas para nosotros. Precisamente, el tipo de cosas que los computadores hacen mejor suelen ser el tipo de cosas que los humanos encuentran aburridas y soporíferas.
Por ejemplo, echa un vistazo a los primeros tres párrafos de este capítulo y dime cual es la palabra más utilizada y cuántas veces se ha usado. A pesar de que seas capaz de leer y entender las palabras en unos pocos segundos, contarlas resulta casi doloroso, porque no es el tipo de problema que las mentes humanas fueron diseñadas para resolver. Para un PC1 es justo al revés: leer y comprender texto de un trozo de papel es algo complicado para él, pero contar las palabras y decir cuántas veces se ha usado la más frecuente le resulta muy sencillo:
python words.py
Introduzca fichero:words.txt
que 8
Nuestro “asistente de análisis de información personal” nos dirá rápidamente que la palabra “que” se ha usado ocho veces en los primeros tres párrafos de este capítulo.
El hecho de que los PCs sean buenos en cosas en las que los humanos no lo son es el motivo por el que necesitas ser capaz de hablar “lenguaje de PC”. Una vez que hayas aprendido ese nuevo idioma, podrás delegar tareas mundanas en tu socio (la máquina), dejando más tiempo libre para ti, de modo que puedas dedicarte a aquellas otras cosas para las que estás más capacitado. Serás el encargado de poner la creatividad, intuición e inventiva a esa asociación.
Aunque este libro no está dirigido a programadores profesionales, la programación profesional puede ser un trabajo muy gratificante, tanto a nivel financiero como personal. Construir programas útiles, elegantes e ingeniosos para que otros los usen es una actividad muy creativa. Tu equipo o Asistente Personal Digital (PDA2), normalmente contienen muchos programas diferentes de multitud de grupos de programadores distintos, cada uno de los cuales compite por tu atención e interés. Esos programadores intentan hacerlo lo mejor que saben para adaptarse a tus necesidades y a la vez proporcionarte una buena experiencia como usuario. En algunos casos, cuando eliges un programa determinado, los programadores son directamente recompensados por tu elección.
Si pensamos en los programas como salida creativa para grupos de programadores, tal vez la figura siguiente sea una versión más apropiada de tu PDA:
Por ahora, nuestra motivación principal no es conseguir dinero o gustar más a los usuarios finales, sino ser nosotros mismos más productivos en el manejo de los datos y la información que encontraremos en nuestras vidas. Al principio, serás tanto programador como usuario final de tus propios programas. Cuando ganes en habilidad como programador y la programación se haga más creativa para ti, tus objetivos podrán cambiar hacia el desarrollo de programas para otros.
Antes de que empecemos a aprender el idioma que deberemos hablar para dar instrucciones a los PCs para desarrollar software, necesitamos aprender un poco acerca de cómo están construidos los equipos. Si desmontaras tu PC o teléfono móvil y mirases dentro, encontrarías los siguientes componentes:
Las definiciones de alto-nivel de esos componentes son las siguientes:
Aunque la mayoría de los detalles de cómo funcionan estos componentes es mejor dejarlos para los que construyen los equipos, resulta útil tener cierta terminología con la que referirnos a todas estas partes distintas mientras escribimos nuestros programas.
Como programador, tu trabajo es usar y orquestar cada uno de esos recursos para resolver el problema que necesites solucionar y analizar los datos que obtengas de la solución. Como programador, principalmente estarás “hablando” con la CPU y diciéndole qué debe hacer a continuación. A veces le dirás a la CPU que use la memoria principal, la memoria secundaria o los dispositivos de entrada/salida.
Tú debes ser la persona que conteste a la pregunta de la CPU “¿Qué hago a continuación?”. Pero sería muy incómodo encogerse hasta los 5mm de altura y meterse dentro de la máquina sólo para poder pasarle un comando tres mil millones de veces por segundo. Así que en vez de eso, deberás darle por escrito las instrucciones por adelantado. Llamaremos a esas instrucciones almacenadas un programa, y al acto de escribir las instrucciones y conseguir que sean correctas, programar.
Durante el resto de este libro, intentaremos convertirte en una persona hábil en el arte de programar. Al final serás un programador — tal vez no un programador profesional, pero al menos tendrás la capacidad de echar un vistazo a un problema de análisis de datos/información y desarrollar un programa para resolverlo.
En cierto sentido, necesitas dos habilidades para ser un programador:
Una vez que aprendas un lenguaje de programación como Python, encontrarás mucho más sencillo aprender un segundo lenguaje como JavaScript o C++. Cada nuevo lenguaje de programación tendrá un vocabulario y gramática muy diferentes, pero la forma de resolver problemas va a ser la misma en todos ellos.
Aprenderás el “vocabulario” y “frases” de Python muy rápidamente. Te costará un poco más ser capaz de escribir un programa coherente para resolver un problema nuevo. Se enseña a programar de forma muy similar a como se enseña a escribir. Se comienza leyendo y explicando programas, después se escriben programas sencillos, y poco a poco se va incrementando su complejidad. En algún momento “encuentras tu musa” y comienzas a descubrir los patrones por ti mismo, siendo capaz de tomar un problema y escribir un programa para resolverlo. Y una vez se ha alcanzado ese punto, la programación se convierte en un proceso muy agradable y creativo.
Comenzaremos con el vocabulario y estructura de los programas en Python. Ten paciencia si la simplicidad de los ejemplos te recuerdan a cuando empezaste a leer por primera vez.
A diferencia de los idiomas humanos, el vocabulario de Python es actualmente bastante reducido. Llamamos a ese “vocabulario” las “palabras reservadas”. Son palabras que tienen un significado muy especial para Python. Cuando Python encuentra esas palabras en un programa, tienen un significado y sólo uno para Python. Más adelante, cuando escribas programas, compondrás tus propias palabras, que tendrán significado para ti, llamadas variables. Tendrás una gran libertad para escoger los nombres para tus variables, pero no podrás usar ninguna de las palabras reservadas de Python.
Cuando se entrena a un perro, se usan palabras especiales como “siéntate”, “quieto”, y “traelo”. Cuando hablas con un perro y no usas ninguna de las palabras reservadas, sólo consigues que te mire con cara extraña hasta que le digas una palabra reservada. Por ejemplo, si le dices: “Me gustaría que hubiera más gente que se dedicase a pasear para mejorar su salud”, lo que la mayoría de los perros oirían sería: “bla bla bla pasear bla bla bla bla.”. Esto se debe a que “pasear” es una palabra reservada en el idioma del perro. Mucha gente sugeriría que el idioma entre humanos y gatos no tiene palabras reservadas3.
Las palabras reservadas en el idioma en que los humanos hablan con Python contiene las siguientes:
and del from not while
as elif global or with
assert else if pass yield
break except import print
class exec in raise
continue finally is return
def for lambda try
Eso es todo, y a diferencia de un perro, Python ya está completamente entrenado. Cuando utilices “try”, Python lo intentará cada vez que se lo digas sin equivocarse4.
Aprenderemos esas palabras reservadas y cómo usarlas a su debido tiempo, pero por ahora nos centraremos en la equivalencia en Python de “habla” (en el idioma humano-a-perro). Lo bueno de pedirle a Python que hable es que podemos incluso decirle qué debe decir, pasándole un mensaje entre comillas:
print '¡Hola, mundo!'
Y ya hemos escrito nuestra primera frase sintácticamente correcta en Python. La sentencia comienza con la palabra reservada print, seguida por una cadena de texto de nuestra elección, encerrada entre comillas simples.
Ahora que ya conocemos una palabra y una sentencia simple en Python, debemos aprender cómo comenzar una conversación con Python para probar nuestras nuevas habilidades.
Antes de que puedas conversar con Python, deberás instalar el software de Python en tu equipo, y aprender a ponerlo en marcha. La explicación sobre cómo conseguirlo excede el propósito de este capítulo, así que te sugiero que consultes www.pythonlearn.com, donde tengo instrucciones detalladas y capturas de pantallas sobre cómo instalar y poner en marcha Python en sistemas Macintosh y Windows5. En algún momento, terminarás en un terminal o ventana de comandos, escribirás python, y el intérprete de Pyhton comenzará a ejecutarse en modo interactivo, apareciendo algo como lo siguiente:
Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
El prompt o indicador >>>
es el modo que tiene el intérprete de Python de preguntarte:
“¿Qué quieres que haga a continuación?”. Python está preparado para tener una conversación contigo. Todo lo que tienes que hacer es hablar el idioma de Python.
Imaginemos por ejemplo que no conoces ni siquiera la más simple de las palabras o frases del lenguaje Python. Tal vez quieras usar la línea habitual que siguen los astronautas cuando aterrizan en un planeta remoto y quieren hablar con sus habitantes:
>>> Venimos en son de paz, por favor llevadnos ante vuestro lider
File "<stdin>", line 1
Venimos en son de paz, por favor llevadnos ante vuestro lider
^
SyntaxError: invalid syntax
>>>
Esto no está funcionando. A menos que pienses en algo rápido, los habitantes del planeta probablemente te clavarán sus lanzas, te ensartarán en un asador, te cocinarán sobre el fuego, y te usarán como cena.
Por suerte has comprado una copia de este libro durante el viaje, así que lo hojeas hasta llegar precisamente a esta página y pruebas de nuevo:
>>> print '¡Hola, mundo!'
¡Hola, mundo!
Esto tiene mejor aspecto, así que intentas comunicarte un poco más:
>>> print 'Tú debes ser el dios legendario que viene del cielo'
Tú debes ser el dios legendario que viene del cielo
>>> print 'Hemos estado esperándote durante mucho tiempo'
Hemos estado esperándote durante mucho tiempo
>>> print 'Nuestras leyendas dicen que debes estar muy sabroso con mostaza'
Nuestras leyendas dicen que debes estar muy sabroso con mostaza
>>> print 'Vamos a tener un festín esta noche a menos que nos digas
File "<stdin>", line 1
print 'Vamos a tener un festín esta noche a menos que nos digas
^
SyntaxError: EOL while scanning string literal
>>>
La conversación fue bien durante un rato, y entonces, en cuanto cometiste el mínimo error al usar su lenguaje, Python volvió a apuntarte con las lanzas.
En este momento, ya deberías haberte dado cuenta de que, a pesar de que Python es increíblemente complejo, potente y muy exigente con la sintaxis que debes usar para comunicarte con él, Python no es inteligente. En realidad tan sólo estás manteniendo una conversación contigo mismo, eso sí, usando una sintaxis correcta.
En cierto sentido, cuando usas un programa escrito por otra persona, la conversación se mantiene entre tú mismo y esos otros programadores, con Python actuando como intermediario. Python es un modo de que los creadores de programas puedan expresar cómo creen que deben desarrollarse las conversaciones. Y dentro de unos pocos capítulos más, tú serás uno de esos programadores que usan Python para hablar con los usuarios de sus programas.
Antes de terminar nuestra primera conversación con el intérprete de Python, probablemente debas saber cual es el modo correcto de decir “adios” cuando estás interactuando con los habitantes del Planeta Python:
>>> adios
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'adios' is not defined
>>> if you don't mind, I need to leave
File "<stdin>", line 1
if you don't mind, I need to leave
^
SyntaxError: invalid syntax
>>> quit()
Te habrás dado cuenta de que el error es diferente en los primeros dos intentos, a pesar de ser ambos incorrectos. El segundo error es diferente porque if es una palabra reservada, y Python vió la palabra reservada en la frase y creyó que estabas intentando decirle algo, pero encontró la sintaxis de la sentencia incorrecta6.
El modo correcto de decir “adios” a Python es introducir
quit() en el indicador interactivo >>>
.
Probablemente te hubiera llevado un buen rato adivinarlo,
así que es posible que el tener un libro a mano
esté empezando a resultarte útil.
Python es un lenguaje de alto nivel, que intenta ser relativamente sencillo de escribir y leer para los humanos y fácil de leer y procesar para los PCs. Hay otros lenguajes de alto nivel, como Java, C++, PHP, Ruby, Basic, Perl, JavaScript, y muchos más. El hardware existente dentro del la Unidad Central de Procesamiento (CPU) no comprende ninguno de estos lenguajes de alto nivel.
La CPU entiende un lenguaje que se llama código máquina. El código máquina es muy simple y francamente muy cansado de escribir, porque en él todo está representado por ceros y unos:
01010001110100100101010000001111
11100110000011101010010101101101
...
El código máquina superficialmente parece muy sencillo, dado que sólo hay ceros y unos, pero su sintaxis es incluso más complicada y mucho más enrevesada que la de Python. Así que muy pocos programadores utilizan este lenguaje. En vez de eso, se han construido varios traductores para permitir a los programadores escribir en lenguajes de alto nivel, como Python o JavaScript, y esos traductores convierten luego los programas a código máquina para que la CPU pueda ejecutarlos.
Dado que el código máquina está ligado al hardware del equipo, ese código no es portable a través de los diferentes tipos de hardware. Los programas escritos en lenguajes de alto nivel pueden ser trasladados a diferentes equipos usando un intérprete distinto en cada máquina, o recompilando el código para crear una versión en código máquina del programa para cada nuevo equipo.
Estos traductores de lenguajes de programación se clasifican en dos categorías generales: (1) intérpretes y (2) compiladores.
Un intérprete lee el código fuente del programa tal y como lo ha escrito el programador, analiza ese código fuente e interpreta las instrucciones al vuelo. Python es un intérprete, y cuando estamos haciéndolo funcionar de forma interactiva, podemos escribir una línea de Python (una sentencia), y Python la procesa inmediatamente y queda listo para que podamos escribir otra nueva línea.
Algunas de las líneas de Python le indican que lo que queremos es recordar cierto valor para más tarde. Debemos elegir un nombre para que ese valor sea recordado y podremos usar ese nombre simbólico para recuperar el valor después. Usamos el término variable para referirnos a las etiquetas que utilizamos para manejar esos datos almacenados.
>>> x = 6
>>> print x
6
>>> y = x * 7
>>> print y
42
>>>
En este ejemplo, le pedimos a Python que recuerde el valor seis y use la etiqueta x, para que podemos recuperar ese valor más tarde. Comprobamos que Python ha guardado de verdad el valor usando print. A continuación le pedimos a Python que recupere x, lo multiplique por siete y coloque el nuevo valor calculado en y. Finalmente, le pedimos a Python que imprima el valor que está en ese momento en y.
Aunque estemos escribiendo estos comandos en Python línea por línea, Python los está tratando como una secuencia ordenada de sentencias, de modo que las últimas sentencias son capaces de recuperar datos creados en las anteriores. Estamos escribiendo nuestro primer párrafo simple, con cuatro frases en un orden lógico y útil.
El intérprete ha sido creado para ser capaz de tener una conversación interactiva como la que se muestra más arriba. Un compilador, en cambio, necesita que le entreguen el programa completo en un archivo, y después ejecuta un proceso para traducir el código fuente de alto nivel a código máquina. A continuación el compilador guarda el código máquina resultante en un archivo para su posterior ejecución.
Si usas un sistema Windows, a menudo esos programas ejecutables en código máquina tienen un sufijo (o extensión) como “.exe” or “.dll”, que indican “executable (ejecutable)” y “dynamic link library (librería de enlace dinámico)” respectivamente. En Linux y Macintosh no hay un sufijo que marque de forma única un archivo como ejecutable.
Si abrieras un archivo ejecutable en un editor de texto, se mostraría algo completamente disparatado e ilegible:
^?ELF^A^A^A^@^@^@^@^@^@^@^@^@^B^@^C^@^A^@^@^@\xa0\x82
^D^H4^@^@^@\x90^]^@^@^@^@^@^@4^@ ^@^G^@(^@$^@!^@^F^@
^@^@4^@^@^@4\x80^D^H4\x80^D^H\xe0^@^@^@\xe0^@^@^@^E
^@^@^@^D^@^@^@^C^@^@^@^T^A^@^@^T\x81^D^H^T\x81^D^H^S
^@^@^@^S^@^@^@^D^@^@^@^A^@^@^@^A\^D^HQVhT\x83^D^H\xe8
....
No es fácil leer o escribir código máquina, así que está bien que tengamos intérpretes y compiladores que nos permitan escribir en lenguajes de alto nivel, como Python o C.
En este momento del debate acerca de compiladores e intérpretes, deberías estar preguntándote algunas cosas sobre el mismo intérprete de Python. ¿En qué lenguaje ha sido escrito? ¿Ha sido escrito en un lenguaje compilado? Cuando escribimos “python”, ¿qué es exactamente lo que ocurre?
El intérprete de Python está escrito en un lenguaje de alto nivel llamado “C”. Puedes ver el código fuente real del intérprete de Python acudiendo a www.python.org, y usar ese código como quieras. Así que el propio Python es también un programa, y está compilado en código máquina. Cuando instalaste Python en tu PC (o el vendedor lo instaló), pusiste una copia del código máquina del programa Python traducido para tu sistema. En Windows, el ejecutable en código máquina del propio Python es probablemente un archivo con un nombre similar a:
C:\Python27\python.exe
Esto ya es más de lo que en realidad necesitas saber para ser un programador en Python, pero a veces es mejor responder a estas típicas preguntillas justo al principio.
Escribir frases en el intérprete de Python es una buena forma de experimentar con las características de Python, pero no resulta recomendable para resolver problemas de cierta complejidad.
Cuando queremos escribir un programa, usamos un editor de texto para escribir las instrucciones de Python en un archivo, que se denomina script. Por convención, los scripts en Python tienen nombres que terminan en .py.
Para ejecutar un script, hay que indicarle al intérprete de Python el nombre del archivo. En una ventana de comandos de Unix o Windows, se puede escribir python hello.py así:
csev$ cat hello.py
print '¡Hola, mundo!'
csev$ python hello.py
¡Hola, mundo!
csev$
El “csev$” es el prompt (indicador) del sistema operativo, y el comando “cat hello.py” nos está mostrando que el archivo “hello.py” contiene un programa Python de una línea que imprime una cadena.
Estamos llamando al intérprete de Pyhton e indicándole que lea el código fuente del archivo “hello.py”, en vez de ir escribiendo nosotros las líneas de código Python de forma interactiva.
Habrás notado que dentro del archivo no es necesario poner quit() al final del programa. Cuando Python está leyendo el código fuente desde un archivo, sabe parar cuando alcanza el final del fichero.
La definición más básica de un programa es que se trata de una secuencia de sentencias de Python que han sido creadas para hacer algo. Incluso nuestro sencillo script hello.py es un programa. Es un programa de una sola línea y no particularmente útil, pero en su más estricta definición, es un programa Python.
Debería ser más sencillo entender qué es un programa si pensásemos en un problema que pudiera resolverse mediante programación, y a continuación estudiásemos cómo sería el programa que resolviera ese problema.
Imaginemos que estás haciendo una investigación sobre estadística social en los mensajes de Facebook, y estás interesado en saber cuál es la palabra que se usa con mayor frecuencia en una serie de mensajes. Podrías imprimir la cadena de mensajes de Facebook y estudiar detenidamente el texto, buscando la palabra más común, pero eso te llevaría mucho tiempo y probablemente cometerías errores. Sería más inteligente escribir un programa en Python para realizar la tarea rápidamente y con precisión, y así poder pasar el fin de semana haciendo algo divertido.
Por ejemplo, mira el texto siguiente acerca de un payaso y un coche. Fijate en el texto y busca cual es la palabra más utilizada y cuántas veces se repite.
el payaso corrió detrás del coche y el coche se metió en la carpa
y la carpa se cayó sobre el payaso y el coche
Después imagina que estás haciendo esta tarea buscando en millones de líneas de texto. Francamente, te resultaría más rápido aprender Python y escribir un programa para contar las palabras que revisarlas manualmente una a una.
La buena noticia es que a mí ya se me ha ocurrido un programa simple para encontrar la palabra más común en un archivo de texto. Lo he escrito, probado, y ahora te lo doy a ti para que lo uses y puedas ahorrarte algo de tiempo.
nombre = raw_input('Introduzca fichero:')
manejador = open(nombre, 'r')
texto = manejador.read()
palabras = texto.split()
contadores = dict()
for palabra in palabras:
contadores[palabra] = contadores.get(palabra,0) + 1
mayorcantidad = None
mayorpalabra = None
for palabra,contador in contadores.items():
if mayorcantidad is None or contador > mayorcantidad:
mayorpalabra = palabra
mayorcantidad = contador
print mayorpalabra, mayorcantidad
No necesitas ni siquiera saber Python para utilizar este programa. Deberás llegar hasta el capítulo 10 de este libro para comprender del todo las impresionantes técnicas que se han usado para crear el programa. Eres el usuario final, sólo tienes que utilizar el programa y maravillarte de su habilidad y de cuánto esfuerzo manual te ha ahorrado. Simplemente escribe el código en un archivo llamado words.py y ejecútalo, o descarga el código fuente de http://www.pythonlearn.com/code/ y hazlo funcionar.
Éste es un buen ejemplo de cómo Python y su lenguaje están actuando como intermediarios entre tú (el usuario final) y yo (el programador). Python es para nosotros un modo de intercambiar secuencias de instrucciones útiles (es decir, programas) en un lenguaje común que puede ser usado por cualquiera que instale Python en su equipo. Así que ninguno de nosotros estamos hablando a Python, sino que estamos comunicándonos mutuamente a través de Python.
En los próximos capítulos, aprenderemos más acerca del vocabulario, estructura de las frases, estructura de los párrafos, y estructura de las historias de Python. Aprenderemos sobre las potentes capacidades de Python y cómo usar esas capacidades juntas para crear programas útiles.
Hay ciertos modelos conceptuales de bajo nivel que se usan para construir programas. Estas estructuras no son exclusivas de los programas Python, sino que son parte de cualquier lenguaje de programación, desde el código máquina hasta los lenguajes de alto nivel.
Parece demasiado simple para ser verdad, y por supuesto nunca es tan simple. Es como decir que caminar es simplemente “poner un pie delante del otro”. El “arte” de escribir un programa es componer y entrelazar juntos estos elementos básicos muchas veces, para producir algo que sea útil a sus usuarios.
El programa anterior que calcula el número de palabras usa directamente todos estos patrones, excepto uno.
Como hemos visto en nuestra primera conversación con Python, deberemos comunicarnos de forma muy precisa cuando escribamos código Python. La mínima desviación o error provocará que Python deje de ejecutar nuestro programa.
Los programadores novatos a menudo se toman el hecho de que Python no deje espacio para errores como una prueba de que Python es perverso, odioso y cruel. Aunque a Python parece que le gustan todos los demás, reconoce a los novatos y les guarda rencor. Debido a ese rencor, Python toma sus programas perfectamente escritos y los rechaza como si fueran “inútiles” sólo para atormentarnos.
>>> primt '¡Hola, mundo!'
File "<stdin>", line 1
primt '¡Hola, mundo!'
^
SyntaxError: invalid syntax
>>> primt 'Hola, mundo'
File "<stdin>", line 1
primt 'Hola, mundo'
^
SyntaxError: invalid syntax
>>> ¡Te odio, Python!
File "<stdin>", line 1
¡Te odio, Python!
^
SyntaxError: invalid syntax
>>> si sales fuera, te daré una lección
File "<stdin>", line 1
si sales fuera, te daré una lección
^
SyntaxError: invalid syntax
>>>
Hay poco que ganar discutiendo con Python. Sólo es una herramienta. No tiene emociones, es feliz y está listo para servirte en cualquier momento que le necesites. Sus mensajes de error parecen crueles, pero son simples peticiones de ayuda de Python. Ha examinado lo que has escrito y sencillamente no es capaz de entender lo que has puesto.
Python se parece mucho a un perro: te quiere incondicionalmente, pero sólo es capaz
de entender unas pocas palabras clave, así que te mira con una expresión
adorable en su cara (>>>
),y espera a que tú le digas algo que él pueda comprender.
Cuando Python dice “SyntaxError: invalid syntax”, está simplemente agitando
su cola y diciendo: “Me parece que has dicho algo, pero es que no comprendo
lo que significa. De todos modos, sigue hablando conmigo, por favor (>>>
).”
Cuando tus programas vayan aumentando su complejidad, te encontrarás con tres tipos de errores en general:
Cuando se produce cualquiera de los tres tipos de error, se debe una vez más a que Python está intentando por todos los medios hacer exactamente lo que tú le has pedido.
Según vayas avanzando por el resto del libro, no te asustes si los conceptos no parecen encajar bien unos con otros al principio. Cuando estabas aprendiendo a hablar, no supuso un problema que durante los primeros años sólo pudieras emitir lindos balbuceos. Y también fue normal que te llevara seis meses pasar de un vocabulario simple a frases simples y que te llevara 5-6 años más pasar de frases a párrafos, y que todavía tuvieran que transcurrir unos cuantos años más hasta que fuiste capaz de escribir una historia corta interesante por ti mismo.
Pretendemos que aprendas Python mucho más rápidamente, por lo que te enseñaremos todo al mismo tiempo durante los próximos capítulos. Aún así, ten en cuenta que esto es como aprender un idioma nuevo, que lleva un tiempo absorber y comprender antes de que te resulte familiar. Eso produce cierta confusión, ya que visitaremos y volveremos a visitar temas para intentar que consigas ver el conjunto del cuadro mientras vamos definiendo los pequeños fragmentos que forman esa obra completa. A pesar de que el libro está escrito de forma lineal, y que si estás participando en un curso éste también avanzará de forma lineal, no dudes en ser no lineal en el modo en que abordes las materias. Avanza y retrocede, y lee a veces por encima. Al ojear material más avanzado sin comprender del todo los detalles tendrás una mejor comprensión del “¿por qué?” de la programación. Al revisar el material anterior e incluso al rehacer los ejercicios previos, te darás cuenta que ya has aprendido un montón de cosas, incluso si la materia que estás examinando en ese momento parece un poco impenetrable.
Normalmente, cuando uno aprende su primer lenguaje de programación, hay unos pocos momentos “¡A-já!” estupendos, en los cuales puedes levantar la vista de la roca que estás machacando con martillo y cincel, separarte unos pasos y comprobar que lo que estás intentando construir es una maravillosa escultura.
Si algo parece particularmente difícil, generalmente no vale la pena quedarse mirándolo toda la noche. Tómate un respiro, échate una siesta, come algo, explícale a alguien (quizás a tu perro) con qué estás teniendo problemas, y después vuelve a observarlo con nuevos ojos. Te aseguro que una vez que aprendas los conceptos de la programación en el libro, volverás atrás y verás que en realidad todo era fácil y elegante y que simplemente te ha llevado un poco de tiempo llegar a absorberlo.
a) Ejecutar todos los cálculos y lógica del programa
b) Recuperar páginas web de Internet
c) Almacenar información durante mucho tiempo – incluso entre ciclos de apagado y encendido
d) Recoger la entrada del usuario
a) El intérprete de Python
b) El teclado
c) El código fuente de Python
d) Un documento de un procesador de texto
>>> primt '¡Hola, mundo!'
File "<stdin>", line 1
primt '¡Hola, mundo!'
^
SyntaxError: invalid syntax
>>>
x = 123
a) Unidad Central de Procesamiento
b) Memoria Principal
c) Memoria Secundaria
d) Dispositivos de Entrada
e) Dispositivos de Salida
x = 43
x = x + 1
print x
a) 43
b) 44
c) x + 1
d) Error, porque x = x + 1 no es posible matemáticamente