Sunteți pe pagina 1din 48

Python para informatica

La exploracion de la informacion

Version 0.0.9-d2

Charles Severance

Derechos reservados 2009- Charles Severance.


Resena historica:
Octubre 2013: Revision mayor a Captulos 13 y 14 para cambiar a JSON y usar OAuth.
Se agrego un captulo nuevo sobre Visualizacion.
Septiembre 2013: Publicacion del libro en Amazon CreateSpace.
Enero 2010: Publicacion del libro utilizando Espresso Book machine de la Universidad
de Michigan.
Diciembre 2009: Revision mayor a captulos 2-10 de Pensar Python: Como pensar como
un cientfico de computo y escribir captulos 1 y 11-15 para producir Python para
informatica: La exploracion de la informacion.
Junio 2008: Revision mayor, se cambio el ttulo a Pensar Python: Como pensar como
un cientfico de computo.
Agosto 2007: Revision mayor, se cambio el ttulo a Como pensar como un programador
(Python).
Abril 2002: Primera edicion de Como pensar como un cientfico de computo.

Esta obra esta bajo la licencia de Creative Common Atribucion-NoCommercial-Derivada


3.0 de la licencia generica. Esta licencia esta disponible en creativecommons.org/
licenses/by-nc-sa/3.0/. Usted puede ver lo que el autor considera uso comercial
y no comercial de este material como tambien excepciones a la licencia en el Apendice
titulado Detalles de derechos de autor.
La fuente de la version de LATEX de Pensar Python: Como pensar como un cientfico de
computo de este libro esta disponible en http://www.thinkpython.com.

Prologo
Python para Informatica: La remezcla de un libro abierto
Es natural que para aquellos academicos que continuamente han escuchado
publique o perezca quieran siempre crear algo desde su inicio. Este libro es
un experimento al no iniciarse de cero sino mas bien remezclando el libro titulado Pensar Python: Como pensar como un cientfico de computo escrito por
Allen B. Downey, Jeff Elkner y otros.
En diciembre de 2009 me estaba preparando para ensenar SI502 - Programacion
en red (Networked Programming) en la Universidad de Michigan, por quinta vez
seguida, y decid que era hora de escribir una gua didactica para Python que se
enfocara en la exploracion de datos en vez de en entender algoritmos y abstracciones. Mi meta en SI502 es ensenarle a la gente destrezas para manejar datos en
la vida diaria utilizando Python. Pocos de mis estudiantes planeaban ser programadores de computadoras profesionales. La mayora, en cambio, planeaban ser
bibliotecarios, administradores, abogados, biologos, economistas, etc. y simplemente queran desarrollar destrezas en el manejo de la tecnologa en su campo.
Pareca como si no se pudiera encontrar el libro perfecto orientado al manejo de
los datos en Python para el curso que planeaba ensenar, as que decid yo mismo
escribir tal libro. Afortunadamente, en una reunion de la facultad tres semanas
antes de empezar a escribir mi nuevo libro desde cero, durante una jornada de vacaciones, el Dr. Atul Prakash me mostro el libro Pensar Python el cual e l haba
usado para ensenar su curso de Python durante ese semestre. Es un texto de Informatica muy bien escrito con un e nfasis en explicaciones pequenas, directas y
faciles de aprender.
La estructura global se ha cambiado de modo que se logre hacer el analisis de los
datos tan rapido como sea posible y, desde el principio, tiene una serie de ejemplos
y ejercicios sobre el analisis de los datos.
Los captulos 2 al 10 son similares al libro Pensar Python pero han sufrido grandes
cambios. Los ejemplos numerados y los ejercicios se han reemplazado con ejercicios que tienen que ver con el manejo de datos. Los temas se presentan en el
orden necesario para ir construyendo soluciones de analisis de datos cada vez mas
sofisticadas. Algunos temas como try y except se han desplazado para presentarlos como parte del captulo sobre afirmaciones condicionales (conditionals). A

iv

Chapter 0. Prologo

las funciones (Functions) se les da un tratamiento ligero hasta que sean necesarias
para manejar la complejidad de un programa en vez de introducirlas como concepto abstracto temprano en la leccion. Casi todas las funciones definidas por
el usuario (user-defined functions) han sido quitadas de los ejemplos y ejercicios
fuera del Captulo 4. La palabra recursion1 no se menciona en el libro.
El material de los captulos 1 y 11 al 16 es completamente nuevo, con un enfoque
aplicado al uso en el mundo real y se presentan ejemplos sencillos de Python para
el analisis de datos, incluyendo expresiones regulares (regular expressions) en la
realizacion de busquedas y analisis sintactico en la automatizacion de tareas en
su computador, recuperacion de datos a traves de red, recabacion (scraping) de
datos de paginas web, utilizando servicios web, en el analisis sintactico (parsing
de datos en XML y JSON, y en la creacion y uso de bases de datos estructuradas
en lenguaje de consulta (Structured Query Language).
El objetivo primordial de estos cambios es pasar de un enfoque de Ciencias de
computacion a Informatica y solo incluir temas de tecnologa u tiles aun si alguien
no elije ser programador como profesion.
Los estudiantes que encuentren este libro interesante y quieran continuar explorando deben mirar el libro de Allen B. Downeys Pensar Python. Por causa de que
hay relacion entre muchos de los temas en los dos libros, los estudiantes rapidamente adquiriran destrezas en a reas adicionales de programacion tecnica y pensamiento algortmico cubierto en Pensar Python, y siendo que los dos libros se
han escrito en un estilo similar, usted podra avanzar rapidamente a traves del libro
Pensar Python con un mnimo esfuerzo.
Como titular de los derechos de autor de Pensar Python, Allen me ha dado permiso
de cambiar la licencia del libro en lo que al material de su obra que aparece en
este libro se refiere, para convertirla de GNU Free Documentation License a la
mas reciente licencia de Creative Commons Reconocimiento Compartir. Esto
se adecua al cambio general en la documentacion abierta de licencias de GFDL
a CC-BY-SA (p. ej. Wikipedia). Al usar la licencia CC-BY-SA se mantiene la
fuerte tradicion de copyleft mientras que se abren aun mas las oportunidades para
nuevos autores de usar este material como lo consideren apropiado.
Pienso que este libro es un ejemplo de porque el material de dominio publico es tan
importante para el futuro de la educacion y quiero agradecerle a Allen B. Downey
y a la imprenta de la Universidad de Cambridge por su decision visionaria de
facilitar este libro bajo la licencia de derechos de autor de dominio publico, open
Copyright. Espero que esten contentos con los resultados de mi esfuerzo y espero
que usted, el lector, quede satisfecho con nuestro esfuerzo colectivo.
Me gustara agradecerle a Allen B. Downey y a Lauren Cowles por su ayuda, paciencia y gua en el manejo y resolucion de los asuntos realacionados al copyright
de este libro.
1A

excepcion de esta lnea.

v
Charles Severance
www.dr-chuck.com
Ann Arbor, MI, USA
Septiembre 9, 2013
Charles Severance es profesor clnico asociado de la facultad de Informatica de la
Universidad de Michigan.

vi

Chapter 0. Prologo

Contents

viii

Contents

Chapter 1

Por que se debe aprender a


programar?
Escribir programas (o programar) es una actividad muy creativa y gratificante.
Usted puede escribir programas para ganarse la vida o para resolver un problema
de analisis difcil o, simplemente por el placer de poder ayudar a alguien a enontrar
soluciones. Este libro asume que todos necesitan saber como programar y, que
una vez que se aprende, se descubre lo que se quiere lograr con la nueva destreza
adquirida.
Estamos rodeados en nuestra vida diaria de computadoras que van desde portatiles
a telefonos celulares. Se puede pensar de estas computadoras como si fueran
nuestros asistentes personales, quienes realizan muchas de las tareas en nuestro
lugar. El hardware en las computadoras de hoy estan construidas esencialmente
para que continuamente hagan la pregunta, Que quieres que haga despues?.
What
Next?

What
Next?

What
Next?

What
Next?

What
Next?

What
Next?

PDA

Los programadores agreagan un sistema operativo y una serie de aplicaciones al


hardware y nosotros terminamos con un Asistente Personal Digital muy u til para
diferentes cosas.
Nuestras computadoras son rapidas y tienen una vasta cantidad de memoria y
podran ser mucho mas si tan solo supieramos el lenguage para hablarles y explicarles lo que quisieramos que hagan despues. Si supieramos este lenguage,
podramos decirle a la computadora que haga tareas repetitivas en nuestro lugar.
Interesantemente, el tipo de cosas que las computadoras hacen mejor, a menudo,
son cosas que los humanos encontramos aburridas y abrumadoras.

Chapter 1. Por que se debe aprender a programar?

Por ejemplo, mire los tres primeros parrafos de este captulo y dgame cual es la
palabra mas comun. Mientras que usted es capaz de leer y comprender las palabras
en cuestion de segundos, contarlas es doloroso porque no es el tipo de problema
que la mente humana ha sido disenada para resolver. Para una computadora es
todo lo contrario, leer y comprender el texto de un pedazo de papel es difcil
para una computadora, pero contar las palabras y decirle a usted cuantas veces la
palabra mas comun fue usada es muy facil para la computadora:
python palabras.py
Enter file:palabras.txt
de 7

Nuestro asistente personal de analisis de informacion nos dice rapidamente que


la palabra de aparece 7 veces en los primeros tres parrafos de este captulo.
El hecho de que las computadoras sean tan buenas en lo que los humanos no lo son
es la razon por la cual usted debe desarrollar la destreza de hablar el lenguage de
computadora. Una vez que aprenda este lenguage vera como puede delegar tareas
miniales a su socia (la computadora), liberando as su tiempo para hacer aquellas
cosas para las que ha sido creado de manera especial. Usted aporta creatividad,
intuicion e inventividad a esta relacion colaborativa.

1.1 Creatividad y motivacion


Aunque este libro no esta dirigido a programadores profesionales, la programacion
puede ser un trabajo muy gratificante tanto personal como financieramente. Elaborar programas u tiles, elegantes e inteligentes para el beneficio de otros es una
actividad muy creativa. Su computadora o Asistente Personal Digital (PDA por
sus siglas en ingles) generalmente contiene diferentes programas de diferentes
programadores, cada uno de ellos compitiendo por su atencion e interes. Ellos
tratan de hacer lo mejor para satisfacer sus necesidades y proveerle una excelente
experiencia de usuario, en el proceso. En algunas situaciones, cuando usted escoge una aplicacion (software), los programadores son directamente compensados
en virtud de su eleccion.
Al considerar los programas como obras creativas de grupos de programadores,
quiza la siguiente imagen sea una version mas sensible de nuestro PDA:
Pick
Me!

Pick
Me!

Pick
Me!

Pick
Me!

Pick
Me!

Buy
Me :)

PDA

Por ahora, nuestra motivacion primordial no es hacer dinero o complacer a los


usuarios, sino hacernos mas productivos en el manejo de datos e informacion que

1.2. Arquitectura del hardware de la computadora

encontraremos en nuestra vida diaria. Cuando usted comience, usted es tanto programador como usuario de sus propios programas. En la medida en que adquiera
mas destreza como programador y programar se sienta como una actividad mas
y mas creativa para usted, se le ocurriran ideas sobre el desarrollo de programas
para otros.

1.2 Arquitectura del hardware de la computadora


Antes de comenzar a aprender el lenguage necesario para darle instrucciones a las
computadoras para desarrollar software, es necesario aprender una pequena cantidad sobre como se construyen las computadoras. Si usted desbaratara su computadoras o telefono celular y mirara lo que hay dentro, encontara las siguientes
partes:

Software
Input
Output
Devices

What
Next?

Central
Processing
Unit

Main
Memory

Network

Secondary
Memory

Las definiciones funcionales de alto nivel de estas partes son las siguientes:
La Unidad Central de Procesamiento conocida por sus siglas en ingles
como CPU es esa parte de la computadora que ha sido construida para obsesionarse con la cuestion que hay que hacer despues?. Si su computadora
tiene una capacidad de 3.0 Gigahertz, eso significa que el CPU preguntara
que hay que hacer despues? tres mil millones de veces por segundo.
Usted va a tener que aprender como hablar rapido para mantener el ritmo de
la CPU.
La Memoria Principal se usa para almacenar la informacion que la CPU
necesita de afan. La memoria principal es casi tan rapida como la CPU, pero
la informacion almacenada en la memoria principal desaparece cuando se
apaga la computadora.
La Memoria Secundaria tambien se usa para almacenar informacion, pero
es mucho mas lenta que la memoria principal. La ventaja de la memoria secundaria es que puede almacenar informacion aun cuando la computadora

Chapter 1. Por que se debe aprender a programar?


este apagada. Ejemplos de la memoria secundaria son los discos duros o
memorias flash (esto se encuentran tpicamente en dispositivos USB y reproductores de musica portables).
Los Dispositivos de entrada y salida (Input y Output) son su monitor,
teclado, mouse, microfono, parlantes, tablero tactil integrado, etc. Estos
representan todas las formas en que interactuamos con la computadora.
Hoy en da la mayora de las computadoras tambien tienen Conexion a
la Red (Network Connection) para recibir informacion por medio de una
red. Se puede pensar de una red como un lugar muy lento para almacenar
y recuperar datos que pordran no estar siempre actualizados. En cierto
sentido, la red es mas lenta y a veces una forma poco fiable de Memoria
Secundaria.

Mientras que la mayora de los detalles sobre como trabajan estos componentes es
mejor dejarselo a los que construyen computadoras, conocer la terminologa ayuda
para podernos referir a estos componentes cuando escribimos nuestros programas.
Como programador, su trabajo es utilizar y coordinar cada uno de estos recursos
para dar solucion a los problemas para los cuales usted necesita analizar los datos
que necesita usar. Como programador usted va a hablarle la mayora del tiempo
a la CPU para decirle que debe hacer despues. Algunas veces usted le va a decir
a la CPU que utilice la memoria principal, la memoria secundaria, la red o los
dispositivos de entrada/salida (input/output).

Software
Input
Output
Devices

What
Next?

Central
Processing
Unit

Main
Memory

Network

Secondary
Memory

You

Usted tiene que ser la persona que le responda a la CPU la pregunta Que debe
hacer despues?, pero sera muy incomodo reducirlo a usted a un tamano de 5mm
e insertarlo en la computadora solo para poder emitir un comando tres mil millones de veces por segundo. As que en vez de hacer eso, usted debe escribir
sus instrucciones de antemano. A estas instrucciones almancenadas les llamamos
programa y al acto de escribir estas instrucciones y escribirlas correctamente,
programacion.

1.3. Comprender el concepto de programacion

1.3 Comprender el concepto de programacion


En el resto de este libro vamos a tratar de convertirlo a usted en una persona con
destreza en el arte de programacion. Al final, usted sera un programador quiza
no un programador profesional, pero por lo menos tendra las destrezas para mirar
un problema de analisis de informacion y datos y desarrollar un programa como
solucion al problema.
En un sentido, usted necesita dos destrezas para ser programador:
Primero, usted necesita saber el lenguage de programacion (Python) - usted
necesita saber el vocabulario y la gramatica. Usted necesita ser capaz de
deletrear las palabras en este nuevo lenguage apropiadamente y saber como
construir oraciones bien formadas en este nuevo lenguage.
Segundo, usted necesita contar una historia. Al escribir una historia, usted
combina palabras y oraciones para transmitirle al lector una idea. Componer
una historia requiere de destreza y arte, y la destreza de escribir se mejora
escribiendo y recibiendo retroalimentacion. En programacion, nuestro programa es la historia y el problema que usted trata de resolver es la idea.
Una vez que usted aprende un programa como Python, encontrara mucho mas
facil aprender un segundo lenguage de programacion como JavaScript o C++. El
nuevo lenguage de programacion tiene un vocabulario y gramatica muy diferente,
pero una vez que adquiera destreza en la resolucion de problemas, las destrezas
van a ser las mismas para todos los lenauages de programacion.
Usted aprendera el vocabulario y oraciones de Python bien rapido. Le tomara
mas tiempo aprender a escribir un programa coherente para resolver un problema nuevo. Ensenamos programacion como ensenamos escritura. Empezamos
leyendo y explicando programas y despues escribimos programas sencillos para
luego escribir programas mas complejos, en el transcurso del tiempo. En algun
momento usted encuentra su inspiracion y comienza a descubrir patrones usted
mismo y puede ver de manera mas natural como tomar un problema y escribir un
programa para darle una solucion, y una vez que llegue a ese punto, la programacion se convierte en un proceso agradable y creativo.
Comenzamos con el vocabulario y la estructura de los programas de Python.
Tenga paciencia cuando la sencillez de los ejemplos le recuerden cuando comenzo
a leer por primera vez.

1.4 Palabras y oraciones


A diferencia del lenguage humano, el vocabulario de Python es realmente
pequeno. A este vocabulariose le llama palabras reservadas. Estas son palabras que tienen un significado muy especial para Python. Cuando Python ve

Chapter 1. Por que se debe aprender a programar?

estas palabras en un programa de Python, ellas tienen un solo significado para


Python. Mas adelante, en la medida en que usted vaya escribiendo programas,
usted va a crear sus propias palabras, que guardan un significado especfico para
usted, llamadas variables. Usted tendra una gran latitud al escoger nombres para
sus variables, pero no podra usar ninguna de las palabras reservadas para Python
como nombre de variables.
En un sentido, cuando entrenamos un perro, usamos palabras especiales como
sientese, quedese ah, y recoja. Tambien, cuando usted le habla a un perro
y no utiliza ninguna de estas palabras reservadas, el perro lo mira con una mirada
de asombro en la cara hasta que usted diga una de las palabras reservadas. Por
ejemplo, si usted dice Ojala que mas gente camine para mejorar su salud, lo mas
seguro que escucha un perro es bla bla bla camine bla bla bla bla. Esto es debido
a que camine es una palabra reservada en el lenguage de un perro. Muchos
sugeriran que el lenguage entre humanos y gatos no tiene palabras reservadas1 .
Las palabras reservadas en el lenguage con que los humanos le hablan a Python
incluye las siguientes:
and
as
assert
break
class
continue
def

del
elif
else
except
exec
finally
for

from
global
if
import
in
is
lambda

not
or
pass
print
raise
return
try

while
with
yield

Eso es todo, y a diferencia del perro, Python ya esta completamente entrenado.


Cuando usted dice try, Python va a tratar cada vez que usted lo diga sin fallar.
Aprenderemos estas palabras reservadas y como se usan en el momento apropiado, pero por ahora nos enfocaremos en el equivalente al idioma de Python
en terminos relacionados al leguage como vimos entre la comunicacion humanoperro en el ejemplo anterior. Lo bueno de pedirle a Python que hable es que
podemos aun decirle que decir dandole un mensaje entre comillas:
print 'Hello world!'

Y ya hemos escrito nuestra primera oracion sitacticamente correcta en Python.


Nuestra oracion comienza con la palabra reservada print seguida de una cadena
string que nosotros mismos escojamos, encerrada en comillas simples.

1.5 Conversacion con Python


Ahora que ya sabemos una palabra y una oracion sencilla en Python, necesitamos saber como se comienza una conversacion con Python para probar nuestras
destrezas de lenguage.
1 http://xkcd.com/231/

1.5. Conversacion con Python

Antes de que pueda conversar con Python, usted primero debe instalar la aplicacion de Python (software) en su computadora y aprender como iniciar Python en
ella. Esto es demasiado detalle para este captulo, as que le sugiero que consulte
www.pythonlearn.com donde he detallado instrucciones e imagenes de pantalla
para mostrar como se instala Python en los sistemas Macintosh y Windows. En
algun momento, usted va a estar en una terminal o ventana de comando y va a
escribir python y el interprete de Python va a comenzar a ejecutar los comandos
en modo interactivo y le va a aparecer algo as:
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 indicador >>> es la manera en que el interprete de Python le pregunta a usted


Que quiere que haga despues?. Python esta listo para tener una conversacion
con usted. Lo que tiene que saber es como hablar en el lenguage de Python y usted
podra sostener una conversacion.
Vamos a decir por ejemplo que usted no saba ni la mas mnima palabra u oracion.
Es posible que quisiera utilizar la frase estandar que usan los astronautas cuando
aterrizan en un planeta lejano y tratan de hablar con los habitantes de ese planeta:
>>> Yo vengo en plan de paz, favor llevarme a su autoridad
File "<stdin>", line 1
Yo vengo en plan de paz, favor llevarme a su autoridad

SyntaxError: invalid syntax


>>>

Esto no va bien. A menos que se le ocurra algo rapido, los habitantes de ese planeta
lo pueden atacar con sus espadas, ensartarlo en un palo, cocinarlo en fuego, y
comerselo a la cena.
Por fortuna, usted llevaba una copia de este libro en su viaje y buscando llego
exactamente a esta pagina e intento nuevamente:
>>> print 'Hello world!'
Hello world!

Esto se ve mucho mejor, as que trata de comunicarse un poco mas:


>>> print 'Usted debe ser el legendario dios que viene del cielo'
Usted debe ser el legendario dios que viene del cielo
>>> print 'Los hemos estado esperando por mucho tiempo'
Los hemos estado esperando por mucho tiempo
>>> print 'Nuestra leyenda dice que ustedes saben muy rico con mostaza'
Nuestra leyenda dice que ustedes saben muy rico con mostaza
>>> print 'Tendremos un banquete esta noche a menos que ustedes digan
File "<stdin>", line 1
print 'Tendremos un banquete esta noche a menos que ustedes digan

SyntaxError: EOL while scanning string literal


>>>

Chapter 1. Por que se debe aprender a programar?

La conversacion iba bien, pero cometio un errorcito al usar el lenguage de Python


y Python le saco las unas.
A este punto, usted debe haber cado en cuenta que aunque Python es inmensamente complejo y poderoso, y muy quisquilloso en relacion a la sintaxis con la
que se debe comunicar con e l, Python no es inteligente. Usted esta sosteniendo
una conversacion con usted mismo, pero utilizando una sintaxis apropiada.
En este sentido, cuando usted usa un programa escrito por otra persona, la conversacion se da entre usted y esos otros programadores con Python actuando como
intermediario. Python es una manera en que los creadores de programas expresan
como se supone que la conversacion debe proceder. Y en tan solo unos cuantos
captulos mas usted sera uno de esos programadores que usan Python para hablar
con los usuarios de su programa.
Antes de cerrar nuestra primera conversacion con el interprete de Python, usted
probablemente deba aprender cual es la manera apropiada de decir good-bye
cuando interacciona con los habitantes del Planeta Python:
>>> good-bye
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'good' 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()

Usted notara que el error es diferente en los dos primeros intentos. El segundo
error es diferente porque if es una palabra reservada y Python vio la palabra
reservada y penso que usted estaba tratando de decirle algo, pero la sintaxis de
la oracion no era correcta.
La manera apropiada de decirle good-bye a Python es escribiendo quit() en los
smbolos de la terminal que aparecen as >>>. Le hubiera tomado bastante adivinar
eso, as que tener el libro a la mano probablemente le resultara u til.

1.6 Terminologa: interprete y compilador


Python es un lenguage de alto nivel cuya intencion es hacerlo relativamente sencillo para ser ledo y escrito por humanos y para que las computadoras lo lean y
lo procesen. Otros lenguages de alto nivel incluyen Java, C++, PHP, Ruby, Basic, Perl, JavaScript, y muchos otros. El hardware dentro de la Unidad Central
de Procesamiento (CPU por sus siglas en ingles) no entiende ninguno de estos
lenguages de alto nivel.

1.6. Terminologa: interprete y compilador

La CPU comprende un lenguage que se conoce como machine-language o


lenguage de maquina. El Lenguage de Maquina es muy simple y francamente
muy agotador para escribir porque se representa por ceros y unos:
01010001110100100101010000001111
11100110000011101010010101101101
...

El Lenguage de Maquina se ve muy sencillo por encima, dado que consiste solo
de ceros y unos, pero su sintaxis es aun muy compleja y mucho mas elaborada que
Python. As que muy pocos programadores escriben en lenguage de maquina. En
lugar de eso, lo que hacemos es construir varios traductores que le permitan a los
programadores escribir en lenguages de alto nivel como Python o JavaScript y estos traductores convierten los programas a lenguage de maquina para la ejecucion
de los programas en la CPU.
Siendo que el lenguage de maquina esta asociado al hardware de la computadora,
el lenguage de maquina no es portable a traves de los diferentes tipos de hardware. Los Programas escritos en lenguages de alto nivel se pueden mover entre
las diferentes computadoras usando un interprete diferente en la nueva computadora o al recopilar el codigo para crear una version de lenguage de maquina del
programa que se pretende usar en otra computadora diferente.
Estos interpretes de lenguages de programacion se ubican en dos categorias generales: (1) interpretes y (2) compiladores.
Un interprete lee el codigo fuente del programa como ha sido escrito por el programador, analiza el codigo e interpreta las instrucciones al instante. Python es
un interprete y cuando estamos ejecutando la aplicacion Python, interactivamente,
podemos escribir una lnea de Python (una oracion) y Python la procesa de inmediato, y queda listo para que nosotros escribamos otra lnea en Python.
Algunas de las lneas en Python le dicen a Python que usted quiere que recuerde
algunos valores para mas tarde. Necesitamos escoger un nombre para almacenar
ese valor en memoria y podemos usar ese nombre simbolico para recuperar el
valor mas tarde. Usamos el termino variable para referirnos al nombre con el cual
se almacenan esos datos.
>>>
>>>
6
>>>
>>>
42
>>>

x = 6
print x
y = x * 7
print y

En este ejemplo, le pedimos a Python que recuerde el valor seis y que se lo asigne
a x de modo que podamos recuperar el valor mas tarde. Verificamos que en efecto
Python ha recordado el valor usando print. Luego le pedimos a Python que recupere x y lo multiplique por siete y que ponga el nuevo valor asignandoselo a y.
Despues le pedimos a Python que imprima el valor actual en y.

10

Chapter 1. Por que se debe aprender a programar?

Aunque estamos escribiendo estos comandos en Python una lnea a la vez, Python
los trata como una secuencia ordenada de oraciones y es capaz de recuperar datos
creados en frases escritas desde el principio. Estamos escribiendo nuestro primer
parrafo sencillo con cuatro oraciones en un orden logico y significativo.
La naturaleza de un interpreter es ser capaz de mantener una conversacion interactiva como se muestra arriba. Un compilador necesita que se le entregue el programa entero en un archivo y luego lo procesa para traducirlo al codigo de fuente
de alto nivel en lenguage de maquina, despues, el compilador pone el lenguage de
maquina resultante en un archivo para ser ejecutado mas tarde.
Si usted tiene un sistema Windows, a menudo estos programas ejecutables de
lenguage de maquina tienen un sufijo .exe o .dll que significa ejecutable y
biblioteca dinamicamente cargable, respectivamente. En Linux y Macintosh no
hay sufijo que indentifique un archivo como ejecutable.
Si usted abriera un archivo ejecutable en un editor de texto, vera algo completamente ilegible:
?ELFAAA@@@@@@@@@B@C@A@@@\xa0\x82
DH4@@@\x90]@@@@@@4@ @G@(@$@!@F@
@@4@@@4\x80DH4\x80DH\xe0@@@\xe0@@@E
@@@D@@@C@@@TA@@T\x81DHT\x81DHS
@@@S@@@D@@@A@@@A\DHQVhT\x83DH\xe8
....

No es facil leer o escribir en lenguage de maquina por eso es bueno tener


interpretes y compiladores que nos permiten escribir en un lenguage de alto
nivel como Python o C.
As que en este punto de nuestra discusion sobre compiladores e interpretes, usted
debe estarse preguntando lo mismo sobre el interprete de Python. En que language esta escrito? ?Ha sido escrito para en un leguage para compilar? Que es
exactamente lo que ocurre cuando escribimos python?
El interprete de Python esta escrito en un lenguage de alto nivel C. Usted puede
buscar la fuente misma del codigo llendo a www.python.org y buscar el codigo
fuente. As que Python mismo es un programa y se compila en codigo de maquina,
y cuando usted instalo Python en su computadora (o quien se la vendio lo instalo),
usted copio una copia del codigo de maquina del programa de Python traducido al
sistema de su computadora. En Windows el codigo de maquina de Python que lo
ejecuta debe estar en un archivo que aparece as:
C:\Python27\python.exe

Esto es mas de lo que usted realmente necesita saber para convertirse en un programador de Python, pero algunas veces vale la pena contestar esas pequennas
inquietudes desde el comienzo.

1.7. Escribir un programa

11

1.7 Escribir un programa


Escribir comandos en el interprete de Python es una excelente forma de experimentar con las herramientas que ofrece Python, pero no se recomienda hacerlo
para resolver problemas complejos.
Cuando queremos escribir un programa, utilizamos un editor de texto para escribir
las instrucciones en un archivo que Python pueda leer al cual se le da el nombre
de script. Tradicionalmente los scripts en Python terminan con .py.
Para ejecujar el script, usted debe decirle al interprete de Python cual es el nombre del archivo. En la terminal de Unix o Windows, usted escribe el comando
python hello.py de la siguiente manera:
csev$
print
csev$
Hello
csev$

cat hello.py
'Hello world!'
python hello.py
world!

El csev$ es el indicador del sistema operativo, y cat hello.py nos muestra que
el archivo hello.py tiene un programa Pytnon de una lnea para imprimir una
frase (string).
Llamamos al interprete de Python y le decimos que lea el codigo fuente del archivo
hello.py en vez de entrar las lneas de codigo interactivamente.
Usted observara que no hubo necesidad de escribir quit() al final del arcivo del
programa en Python. Cuando Python esta leyendo el codigo fuente de un archivo,
sabe que tiene que parar cuando llega al final del archivo.

1.8 Que es un programa?


La definicion de un programa al nivel mas basico significa una secuencia de afirmaciones en Python creadas para hacer algo. Aun nuestro simple script hello.py
es un programa. Es un programa de una lnea y no es particularmente u til, pero en
su estricta definicion, es un programa en lenguage Python.
Puede ser que sea mas facil entender lo que es un programa pensando en un problema para el cual se cree un programa que lo pueda resolver, y luego ver el programa que resolvera ese problema.
Digamos que usted esta realizando una investigacion sobre Computacion a nivel
social en los mensajes de Facebook y usted esta interesado en averiguar cual es
la palabra mas usada en una serie de mensajes. Usted podra imprimir toda la
cadena de mensajes de facebook y destilar todo el texto al buscar la palabras mas
comunes, pero eso le tomara mucho tiempo y sera muy facil cometer errores.
Sera mas inteligente escribir un programa en Python para manejar la tarea mas

12

Chapter 1. Por que se debe aprender a programar?

rapida y precisa de modo que pueda pasar el fin de semana haciendo algo mas
divertido.
Por ejemplo mire el siguiente texto sobre un payaso y un carro. Mire el texto y
encuentre la palabra mas comun y cuantas veces aparece.
el payaso corre tras el carro
y el carro corre a la carpa
y la carpa cae sobre el payaso
y el carro

Despues imagnese que usted este haciendo esta tarea buscando en millones de
lneas de texto. Francamente sera mas rapido que usted aprenda Python y escriba un programa en Python para contar las palabras, que darle un vistazo a las
palabras.
La mejor noticia es que yo ya escrib un programa sencillo para encontrar la palabra mas comun en un archivo de texto. Yo lo escrib, lo verifique y ahora se lo
doy a usted para que lo utilice y ahorre tiempo.
name = raw_input('Enter file:')
handle = open(name, 'r')
text = handle.read()
words = text.split()
counts = dict()
for word in words:
counts[word] = counts.get(word,0) + 1
bigcount = None
bigword = None
for word,count in counts.items():
if bigcount is None or count > bigcount:
bigword = word
bigcount = count
print bigword, bigcount

Usted nisiquiera tiene que saber Python para usar este programa. Usted tendra que
llegar al captulo 10 de este libro para entender completamente las maravillosas
tecnicas de Python que se usaron para escribir ese programa. Usted es el usuario,
simplemente use el programa y maravllese de la inteligencia del lenguage y como
le ahorra tiempo y esfuerzo. Usted simplemente escribe el codigo en un archivo
y le da el nombre de words.py lo ejecuta, o puede bajar el archivo de http:
//www.pythonlearn.com/code/ para ejecutarlo.
Este es un buen ejemplo de como Python y el lenguage Python actuan como intermediarios entre usted como (usuario) y yo como (programador). Python es una
manera para que nosotros intercambiemos instrucciones secuenciales u tiles (i.e.
programas) en un lenguage comun que pueden ser usadas por cualquiera que instale Python en su computadora. As que ninguno de nosotros esta hablando con
Python, sino que nos comunicamos a traves de Python.

1.9. Los bloques de construccion de un programa

13

1.9 Los bloques de construccion de un programa


En los prooximo captulos, aprenderemos mas sore el vocabulario, estructura de
las frases, estructura de los parrafos y la estructura de Python. Aprenderemos
sobre las poderosas capacidades de Python y como aprovechar esas capacidades
en la creacion de programas u tiles.
Hay algunos patrones conceptuales de bajo nivel que se usan para escribir programas. Estos no son solo para programas en Python, son parte de todo lenguage de
programacion desde lenguage de maquina hasta lenguages de alto nivel.
input: Toma datos del mundo exterior. Esto puede ser leer datos de un archivo
o quiza un tipo de sensor como un microfono o GPS. En nuestros programas
iniciales, nuestro input vendra del teclado del usuario al escribir.
output: Desplegar los resultado del programa en la pantalla o almacenarlos en
un archivo, o quiza escribirlos en un dispositivo como parlante de musica o
texto de voz.
exjecucion sequential: Realizar enunciados uno tras otro en el orden que los encuentre en el guion.
exjecucion condicional: Revisar ciertas condiciones y ejecutar o saltar un secuencia de enunciados.
exjecucion repetida: Realizar alguna serie de enunciados repetidamente, generalmente con alguna variacion.
reuso: Escribir una serie de instrucciones una sola vez y darles un nombre y despues reusarlas en la medida en que se necesiten a lo largo del programa.
Pareciera que es demasiado simple para ser verdad y por supuesto que nunca las
cosas resultan tan simple. Es como decir que caminar es simplemente colocar
un pies despues del otro. El arte de escribir un programa es componer y enlazar estos elementos basicos muchas veces seguidas para producir algo que sea
de utilidad para los usuarios.
El programa de contar palabras descrito arriba utiliza directamente todos estos
patrones a excepcion de uno.

1.10 Que podra salir mal?


Como vimos en nuestras primeras conversaciones con Python, debemos ser muy
precisos al comunicar cuando escribimos codigo en Python. La mas mnima
desviacion o error causara que Python no siga leyendo su programa.
Los programadores principiantes a menudo toman el hecho de que Python no tiene
tolerancia para errores como evidencia de que Python es mezquino, odioso y cruel.

14

Chapter 1. Por que se debe aprender a programar?

Mientras que pareciera que Python gusta de todos los demas, Python los conoce
personalmente y se reciente. Por este resentimiento, Python toma nuestro programa perfectamente escrito y lo rechaza como si no fuera idoneo solo para
tormentarnos.
>>> primt 'Hello world!'
File "<stdin>", line 1
primt 'Hello world!'

SyntaxError: invalid syntax


>>> primt 'Hello world'
File "<stdin>", line 1
primt 'Hello world'

SyntaxError: invalid syntax


>>> I hate you Python!
File "<stdin>", line 1
I hate you Python!

SyntaxError: invalid syntax


>>> if you come out of there, I would teach you a lesson
File "<stdin>", line 1
if you come out of there, I would teach you a lesson

SyntaxError: invalid syntax


>>>

Nada se gana con argumentar con Python. Es una herramienta, no tiene emociones
y esta feliz y listo para servirlo a usted cuando lo necesite. Sus mensajes de errores
suenan cruel, pero son solo la manera de Python pedir ayuda. Ha mirado lo que
usted ha escrito y sencillamente no puede entender lo que lee.
Python es mucho mas como un perro, amoroso incondicionalemnte, que se comunica con unas pocas palabras clave que entiende, mir andolo con una mirada dulce
en su cara (>>>) y esperando que usted diga algo que pueda entender. Cuando
Python dice SyntaxError: invalid syntax, esta simplemente moviendo su cola y
diciendo , Parece que usted esta diciendo algo, pero yo no entiendo lo que quiere
decir, pero por favor siga hablando conmigo (>>>).
En la medida que sus programas se vuelvan mas sofisticados, usted encontrara tres
tipos de errores en general:
Errores sintacticos: Estos son los primeros errores que usted hara y los mas
faciles de arreglar. Un error sintactico (syntax error) significa que usted
ha violado las reglas de gramatica de Python. Python hace lo mejor que
puede para mostrar la lnea y letra donde nota que hay un problema. La
u nica parte complicada de los errores sintacticos es que algunas veces el
error que se necesita corregir esta realmente mas arriba de donde Python
muestra que hubo un error. As que la lnea y la letra que Python indica en
donde se encuentra el error sintactico (syntax error) puede ser solo un punto
de partida para su investigacion.

1.11. La jornada de aprendizaje

15

Errores de logica: Un error de logica es cuando su programa esta bien


sintacticamente pero hay un error en el orden de los enunciados o quizas
un error en la relacion de los enunciados entre uno y uno. Un buen ejemplo
de error de logica podra ser, tome agua de su botella de agua, pongala en
su mochila, camine a la biblioteca y luego ponga la tapa en la botella.
Errores de semantica: Un error de semantica es cuando su descripcion de los pasos a tomar esta sintacticamente correcta pero y en el orden adecuado, pero
hay simplemente un error en el programa. El programa esta perfectamente
bien pero no hace los que usted intentaba que realizara. Un ejemplo simple
sera si usted le da indicaciones a una persona para llegar a un restaurante
y le dice, ... cuando llegue a la interseccion de la estacion de gasolina,
cruce a la izquierda y vaya una milla y el restaurante es un edificio rojo a su
izquierda. Su amigo va tarde y lo llama a usted y le dice que esta en una
finca y esta caminando alrededor de un establo sin ningun letrero de restaurante. Luego usted pregunta si cruzaron a la izquierda o a la dereha en la
estacion de gasolina y la respuesta es, Yo segu sus indicaciones al pie de
la letra, las tengo escritas, dice que cruce a la izquierda y vaya una milla
en la estacion de gasolina. Luego, usted dice, Lo siento, aunque mis indicaciones estaban sintacticamente correctas, lastimosamente contenan un
pequeno error semantico.
Una vez mas, en los tres tipos de errores, Python esta meramente tratando de hacer
lo mejor para darle los resultados que usted le ha pedido.

1.11 La jornada de aprendizaje


En la medida en que progrese en el resto del libro, no tenga miedo si los conceptos
parecen que no calzaran bien al principio. Cuando usted estaba aprendiendo a
hablar, no era problema que los primeros anos hiciera sonidos adorables, y era
razonable si le tomo seis mese pasar de un vocabulario simple a frases simples y
le tomo de 5 a 6 anos mas pasar de frases a parrafos y unos anos mas para ser
capaz de escribir una corta historia completa sin ayuda.
Queremos que aprenda Python mucho mas rapido, as que lo ensenamos todo a
la vez a lo largo de los proximos captulos, pero es como aprender un nuevo idioma que toma tiempo aprender y entender antes de que se sienta natural. Eso
lleva a cierta confusion al visitar y revisitar temas para tratar de que usted vea
el panorama completo mientras definimos los pequenos fragmentos que forman
todo el panorama. Aunque el libro esta escrito de manera lineal y si usted esta
tomando el curso, el progreso va a ser de modo lineal, la manera en que usted
maneje el material puede ser no lineal. Mire hacia adelante o hacia atras y lea
con un toque ligero. Al seguir el material mas avanzado sin entender completamente los detalles, usted puede adquirir una mejor comprension del porque de la
programaciom. Al revisar material previo y aun volver a hacer los ejercicios que

16

Chapter 1. Por que se debe aprender a programar?

aparecen al principio, usted vera que en verdad ha aprendido bastante material aun
cuando el material que este estudiando actualmente le parezca impenetrable.
Generalmente cuando se esta aprendiendo el primer lenguage de programacion,
hay ciertos momentos maravillosos de luz donde usted puede contemplar la escultura despues de haber estado martillando una roca.
Si algo parece particularmente difcil, usualmente no tiene valor el quedarse en
ello toda la noche y comenzarlo. Toma un descanso, una siesta, algo de comer,
explquele a alguien la parte con la que estas teniendo problema (o quizas a su
perro), y luego regrese al asunto con una mirada refrescada. Le aseguro que una
vez que aprenda los conceptos de programacion en el libro, usted mirara hacia
atras y vera lo simple y elegante que era y que simplemente le tomo un poco de
tiempo absorberlo.

1.12 Glosario
bug: Un error en el programa.
unidad central de procesamiento: El corazon de la computadora. Es lo que ejecuta el software que escribimos; llamado tambien CPU o procesador.

compilar: Traducir un programa escrito en un lenguage de alto nivel en un de


bajo nivel al mismo tiempo, en preparacion para ser ejecutado mas adelante.

lenguage de alto nivel: Un lenguage de programacion como Python diseado para


que sea facil para los humanos leerlo.
modo interactivo: Una forma de utilizar el interprete de Python escribiendo comandos y expresiones en la terminal.
interpretar: Ejecutar un programa en un lenguage de alto nivel traduciendo lnea
por lnea.
language de bajo nivel: Un lenguage de programacion disenado para que sea
facil para una computadora ejecutar; llamado tambien codigo de maquina
o lenguage de ensamble .
codigo de maquina: El lenguage de mas bajo nivel para software el cual es directamente ejecutado por unidad central de procesamiento (CPU).
memoria principal: Almacena programas y datos. La memoria principal pierde
la informacion cuando se desconecta la computadora o se apaga.
parse: Examinar un programa y analizar la estructura sintactica.

1.13. Ejercicios

17

portabilidad: Una propiedad de un programa que puede ser ejecutado en mas de


un tipo de computadora.
orden de impresion (print statement): Una instruccion que causa que Python
interprete un valor y lo despliegue en el monitor.
resolucion de problema: El proceso de formular un problema, encontrar una
solucion y expresar dicha solucion.
programa: Un serie de intrucciones que especifican una computacion.
prompt: Cuando un programa despliega un mensaje y pausa para que el usuario
escriba algo en el programa.
memoria secundaria: Almacena programas y datos y retiene la informacion aun
cuando se apaga la computadora o se desconecta. Generalmente es mas
lenta que la memoria principal. Ejemplos de memoria secundaria incluyen
los discos duros y las llaves USB.
semantica: El significado de un programa.
error de semantica: Un error en un programa que hace que el programa haga
algo diferente a lo que el programador intentaba ejecutar.
codigo fuente: Un programa en un lenguage de alto nivel.

1.13 Ejercicios
Exercise 1.1 Cual es la funcion de la memoria secundaria de una computadora?
a) Ejecutar todas la computacion y logica del programa
b) Recuperar paginas web de Internet
c) Almacenar informacion a largo plazo - aun mas alla de que se apague
d) Tomar entradas por escrito del usuario
Exercise 1.2 Que es un programa?
Exercise 1.3 Cual es la diferencia entre compilador e interprete?
Exercise 1.4 Cual de los siguientes contiene codigo de maquina (machine
code)?
a) El interprete Python
b) El teclado
c) Archivo fuente en Python
d) Un documento de procesador de palabras (word processing)
Exercise 1.5 Que hay de malo en el siguiente codigo?:

18

Chapter 1. Por que se debe aprender a programar?

>>> primt 'Hello world!'


File "<stdin>", line 1
primt 'Hello world!'

SyntaxError: invalid syntax


>>>

Exercise 1.6 Donde almacena la computadora una variable como X despues


de que se termina la siguiente lnea Python?
x = 123

a) Unidad central de procesamiento


b) Memoria Principal
c) Memoria Secundaria
d) Dispositivo de entrada (Input Device)
e) Dispositivo de salida (Output Device)
Exercise 1.7 Que imprime el siguiente programa?:
x = 43
x = x + 1
print x

a) 43
b) 44
c) x + 1
d) Error porque x = x + 1 no es posible matematicamente
Exercise 1.8 Explique cada una de las siguientes utilizando un ejemplo de una
capacidad humana: (1) Unidad Central de Procesamiento, (2) Memoria Principal,
(3) Memoria Secundaria, (4) Dispositivo de entrada (Input Device), y (5) Dispositivo de salida (Output Device). Por ejemplo, Cual es el equivalente humano de
la Unidad Central de Procesamiento?
Exercise 1.9 Como se arregla un error sintactico, Syntax Error?

Chapter 2

Variables, expresiones y
afirmaciones
2.1 Valores y tipos
Un valor es una de las cosas basicas con las que un programa trabaja tales como
una letra o un numero. Los valores que hemos visto hasta ahora son 1, 2, y
'Hello, World!'.
Estos valores pertenecen a diferentes tipos: 2 es un numero entero y
'Hello, World!' es una cadena de texto, llamada as por cuanto contiene una
cadena (string) de letras. Usted (y el interprete) puede identificar cadenas de texto
porque se encierran entre comillas (quotation mark).
El comando print tambien funciona para numeros enteros. Nosotros usamos el
comando python para ejecutar el interprete.
python
>>> print 4
4

Si usted no tiene la seguridad de que valor tiene un tipo, el interprete le puede


decir.
>>> type('Hello, World!')
<type 'str'>
>>> type(17)
<type 'int'>

No cabe duda que las cadenas de texto (strings) pertenecen al tipo str y los enteros pertenecen al tipo int. Menos obvio son los numeros con puntos decimales
que pertenecen al tipo llamado float porque estos numeros se representan en un
formato llamado floating-point.
>>> type(3.2)
<type 'float'>

20

Chapter 2. Variables, expresiones y afirmaciones

En cuanto a valores como '17' y '3.2', aunque parecen numeros, se encuentran


entre comillas como cadenas de texto.
>>> type('17')
<type 'str'>
>>> type('3.2')
<type 'str'>

Estas son cadenas (strings).


Cuando usted escribe un entero grande, puede tener la tentacion de usar comas
entre grupos de tres dgitos como en 1,000,000. Esto no es correcto escribirlo
como un entero legal en Python, pero s es correcto:
>>> print 1,000,000
1 0 0

Bien, esto no es lo que esperamos. Python interpreta 1,000,000 como una secuencia de enteros separada por una coma, lo cual se imprime con spacios entre
si.
Este es el primer ejemplo que tenemos de error de semantica: el codigo se ejecuta
sin reportar error, pero no hace lo correcto.

2.2 Variables
Una de las caractersticas mas poderosas de un lenguage de programacion es la
capacidad de manipular variables. Una es un nombre que se refiere a un valor.
Una declaracion crea nuevas variables y asigna valores:
>>> message = 'Y ahora para algo completamente diferente'
>>> n = 17
>>> pi = 3.1415926535897931

Este ejemplo establece tres valores. La primera asigna una cadena a una nueva
variable llamada message; la segunda asigna un entero 17 a n; la tercera asigna el
valor (aproximado) de a pi.
Para desplegar el valor de una variable, usted puede usar un comando para imprimir:
>>> print n
17
>>> print pi
3.14159265359

El tipo de variable es el tipo de valor al que se refiere.

2.3. Nombre de variable y palabras clave

21

>>> type(message)
<type 'str'>
>>> type(n)
<type 'int'>
>>> type(pi)
<type 'float'>

2.3 Nombre de variable y palabras clave


Los programadores generalmente escogen nombres para que sean significativos
para sus variables ya que estos nombres documentan para que son usadas las variables.
Los nombres de variable pueden ser arbitrariamente largas, pueden contener tanto
letras como numeros, pero deben comenzar con una letra. Es correcto utilizar mayusculas, pero es mejor comenzar el nombre de una variable con letra
minuscula(Usted podra apreciar porque mas adelante).
El signo de subrayar (_) puede aparecer en el nombre de la variable. A
menudo se utiliza en nombres de multiples palabras, como mi_nombre o
aerodinamica-de-la-masa. Los nombres de variable pueden empezar con un
caracter de subrayado, pero generalmente se evita el uso a menos que se escriba
codigo bibliotecario para que otros lo usen.
Si usted le da un nombre ilegal a una variable, le aparecera un error sintactico:
>>> 76trombones = 'big parade'
SyntaxError: invalid syntax
>>> more@ = 1000000
SyntaxError: invalid syntax
>>> class = 'Advanced Theoretical Zymurgy'
SyntaxError: invalid syntax

76trombones es ilegal porque no comienza con una letra. more@ es ilegal porque
contiene un caractere ilegal, @. Pero que tiene de malo class?
Resulta que class es una de las palabras clave (keywords) de Python. El
interprete utiliza palabras clave (keywords) para reconocer la estructura del programa, y no se pueden utilizar para nombrar variables.
Python reserva 31 palabras clave o keywords1 para su uso:
and
as
assert
break
class
continue
def
1 En

del
elif
else
except
exec
finally
for

from
global
if
import
in
is
lambda

not
or
pass
print
raise
return
try

while
with
yield

Python 3.0, exec ya no se considera una palabra clave o keyword, pero nonlocal s.

22

Chapter 2. Variables, expresiones y afirmaciones

Usted querra mantener a la mano esta lista. Si el interprete le da un error sobre


alguna de sus variables y no sabe porque, busque si la palabra que le da error
aparece en esta lista.

2.4 Afirmaciones o Statements


Una afirmacion o statement es una unidad de codigo que le interprete de Python
puede ejecutar. Hemos visto dos tipos de statements: print y assignment.
Cuando usted escribe una afirmacion o statement en modo interactivo, el
interprete la ejecuta y despliega el resultado, si lo hay.
Un script generalmente contiene una secuencia de afirmaciones o statements.
Si hay mas de una afirmacion (o statement), el resultado aparace uno a uno en la
medida en que son ejectutados.
Por ejemplo, el script:
print 1
x = 2
print x

produce el siguiente output


1
2

El statement asignado no produce output.

2.5 Operadores y operandos


Operators u operadores son smbolos especiales que representan computacion
como suma y multiplicacion. El valor al que el operador es aplicado se le llama
operando u operands.
Los operadores +, -, *, / and ** realizan suma, subtraccion, multiplicacoion,
division y exponentiacoion, como se muestra en los siguientes ejemplos:
20+32

hour-1

hour*60+minute

minute/60

5**2

(5+9)*(15-7)

Es posible que el operador de division no haga lo que usted espera:


>>> minute = 59
>>> minute/60
0

El valor de minute es 59, y en aritmetica convencional 59 dividido por 60 es


0.98333 y no 0. La razon de la discrepancia es que Python esta realizando floor
division2 .
2 En Python 3.0, el resultado de esta divisi
on es un float. En Python 3.0, el nuevo operador //
realiza divisio de enteros.

2.6. Expresiones

23

Cuando ambos operandos son numeros enteros, el resultado es tambien un entero,


floor division parte la fraccion, as que en este ejemplo lo redondea a cero.
Si alguno de los operandos es un decimal o floating-point number, Python realiza una division de punto flotante (floating-point division), y el resultado es un
flotante o float:
>>> minute/60.0
0.98333333333333328

2.6 Expresiones
Una expresion es una combinacion de valores, variables y operadores. Un valor
por s mismo se considera una expresion y as mismo una variable, por esta razon
las siguientes son todas expresiones legales(asumiendo que a la variable x se le ha
asignada un valor):
17
x
x + 17

y deSi usted escribe una expresion en modo interactivo, el interprete lo evalua


spliega el resultado:
>>> 1 + 1
2

Pero en un script, una expresion por s misma no hace nada. Esto es una fuente
de confusion muy comun para principiantes.
Exercise 2.1 Escriba la siguiente afirmacion en el interprete de Python para ver
lo que hace:
Exercise 2.2 5
x = 5
x + 1

2.7 Orden de operaciones


Cuando aparece mas de un operador en una expresion, el orden de evaluacion
depende de las reglas de las reglas de precedencia. Para operadores matematicos,
Python sigue convencion matematica. Las siglas PEMDAS es una manera facil
de recordar las reglas:
Parentesis tiene la mas alta precedencia y se puede usar para obligar una
expreson a evaluar en el orden que usted quiere. Siendo que las expresiones
entre parentesis se evaluan primero, , 2 * (3-1) es 4, y (1+1)**(5-2) es
8. Usted tambien puede usar parentesis para hacer una expresion mas facil
de leer, como en (minute * 100) / 60, aunque el resultado no cambie.

24

Chapter 2. Variables, expresiones y afirmaciones


Exponenciacion tiene la siguiente mas alta precedencia, as que 2**1+1 es
3, no 4, y 3*1**3 es 3, no 27.
Multiplicacion y Division tiene la misma precedencia, la cual es mayor que
Addicion y Subtraccion, la que tambien tiene igual precedencial. As pues
2*3-1 es 5, no 4, y 6+4/2 es 8, no 5.
Operadores con la misma precedencia son evaluados de izquierda a derecha.
As que la expresion 5-3-1 es 1, no 3 porque el 5-3 ocurre primero y luego
1 se substrae de 2.

Cuando tenga duda, siempre ponga parentesis en sus expresiones para asegurarse
que la computacion se realicen en el order que usted intenta.

2.8 Operador de modulos (Modulus operator)


El modulus operator trabaja en numeros enteros y deja el residuo cuando el
primer operando se divide por el segundo. En Python, el modulus operator es
un signo de porcentaje (%). The syntax is the same como para otros operadores:
>>>
>>>
2
>>>
>>>
1

quotient = 7 / 3
print quotient
remainder = 7 % 3
print remainder

De modo que 7 dividido por 3 es 2 dejando 1 de residuo.


El modulus operator es sorpresivamente muy u til. Por ejemplo, usted puede verificar si un numero es divisible por otrosi x % y es cero, entonces x es divisible
por y.
Tambien, usted puede extraer el dgito del extremo derecho del dgito o dgitos de
un numero. Por ejemplo, x % 10 da el dgito del extremo derecho de x (en base
10). As mismo x % 100 da los dos u ltimos dgitos.

2.9 Operacion en cadena


El operador + funciona con una cadena o strings, pero no es suma en el sentido
matematico. Al contrario, realiza concatenacion, lo que significa que une las
cadenas ligandolas as:
>>>
>>>
>>>
25
>>>

first = 10
second = 15
print first+second
first = '100'

2.10. Pedir al usuario input

25

>>> second = '150'


>>> print first + second
100150

El output de este programa es 100150.

2.10 Pedir al usuario input


Algunas veces vamos a tomar el valor para una variable del usuario mismo, valor
que el usuario escribe usando el teclado. Python provee una funcion integrada
llamada raw_input que toma input del teclado3 . Cuando se llama esta funcion,
el programa para y espera para que el usuario escriba algo. Cuando el usuario
presiona Return o Enter, el programa se reactiva y raw_input devuelve lo que es
usuario escribe como una cadena de palabras.
>>> input = raw_input()
Some silly stuff
>>> print input
Some silly stuff

Antes de tomar el input del usuario, es una buena idea desplegar un mensaje indicando que debe escribir el usuario. Usted puede pasar una cadena de palabras o
string a raw_input para que lo desplegue al usuario antes de recibir el:
>>> name = raw_input('What is your name?\n')
What is your name?
Chuck
>>> print name
Chuck

La secuencia \n al final representa una nueva lnea, la cual es un caracter especial


que generera un nuevo corte de nea. Por esto lo que escribe el usuario aparece
debajo.
Si usted espera que el usuario escriba un numero entero, usted puede tratar de
convertir el valor escrito en int usando la funcion int():
>>> prompt = 'What...is the airspeed velocity of an unladen swallow?\n'
>>> speed = raw_input(prompt)
What...is the airspeed velocity of an unladen swallow?
17
>>> int(speed)
17
>>> int(speed) + 5
22

Pero si el usuario escribe otra cosa diferente a un string o cadena de dgitos, le


va a salir un error:
3 En

Python 3.0, esta funcion se llama input.

26

Chapter 2. Variables, expresiones y afirmaciones

>>> speed = raw_input(prompt)


What...is the airspeed velocity of an unladen swallow?
What do you mean, an African or a European swallow?
>>> int(speed)
ValueError: invalid literal for int()

Vamos a ver mas adelante como manejar este tipo de error.

2.11 Comentarios
En la medidad que los programas se vuelvan mas grandes y mas complicados, se
hace mas difcil leerlos. El lenguage formal es denso y a vececes es difcil mirar
un segmento de codigo y entender que hace o por que.
Por esta razon, una buena idea es agreagar notas a sus programas para explicar en
un lenguage natural lo que hace el program. A estas notas se les llama comentarios y comienzan con el smbolo #:
# compute the percentage of the hour that has elapsed
percentage = (minute * 100) / 60

En este caso, el comentario aparece en una lnea por si solo. Tambien se pueden
poner comentarios al final de la lnea:
percentage = (minute * 100) / 60

# percentage of an hour

Todo lo que se encierre dentro de # desde el comienzo hasta el final de la lnea se


ignorano tiene ningun efecto en el programa.
Los comentarios son mayormente u tiles cuando documentan caractersticas del
codigo que no son obvias a simple vista. Es razonable asumir que el lector puede
entender que hace el codigo; es mucho mas u til explicar por que.
El siguiente comentario es redundante con el codigo y no ofrece ninguna utilidad:
v = 5

# assign 5 to v

Este comentario contiene informacion u til que no se encuentra en el codigo:


v = 5

# velocity in meters/second.

Tener buenos nombres de variables reduce la necesidad de comentarios, pero los


nombres largos dificultan la lectura de expresiones complejas, as que hay que
elegir entre uno y otro.

2.12 Eleccion de nombres de variables mnemotecnicos


Siempre y cuando usted siga las sencillas reglas para nombrar variable naming y
evite las palabras reservadas, usted tiene muchas opciones al nombrar sus variables. Al principio, esta opcion puede ser confusa al leer un programa y al escribir

2.12. Eleccion de nombres de variables mnemotecnicos

27

sus propios programas. Por ejemplo, los siguientes tres programas son identicos
en terminos de alcance, pero muy diferentes al leerlos y tratar de entenderlos.
a = 35.0
b = 12.50
c = a * b
print c
hours = 35.0
rate = 12.50
pay = hours * rate
print pay
x1q3z9ahd = 35.0
x1q3z9afd = 12.50
x1q3p9afd = x1q3z9ahd * x1q3z9afd
print x1q3p9afd

El interprete de Python ve estos tres programas exactamente iguales, pero los humanos los ven y los entienden de una manera muy diferente. Los humanos van a
entender mas rapidamente la intencion del segundo programa porque el programador ha escogido nombres de variable que reflejan la intencion del programador
con relacion a los datos que se almacenan en cada variable.
A estos nombres de variables sabiamente escogidas se les llama nombres de variable mnemotecnicos. La palabra mnemotecnica4 que significa ayuda a memorizar. Se escogen nombres de variable mnemotecnicas para ayudar a recordar, en
primer lugar, porque se ha creado la variable.
Mientras que todo esto suena bien y es una buena idea utilizar variables
mnemotecnicas, este tipo de variables pueden obstaculizar el paso del programador aprendiz en su habilidad de analizar y comprender el codigo. Esto se debe
a que el principiante en programacion no ha memorizado aun las palabras reservadas (estas son solo 31) y algunas veces nombres de variables que son demasiado
descriptivas comienzan a verse como parte del lenguage y no como simples nombres de variables bien escogidas.
Tome nota del siguiente ejemplo de codigo de Python que circula (loop) entre los
mismos datos. Cubriremos el concepto de loops pronto, pero por ahora trate de
pensar en lo que significa:
for word in words:
print word

?Que esta ocurriendo aqu? ?Cual de los signos (for, word, in, etc.) son palabras
reservadas y cuales son simplemente nombres de variables? ?Entiende Python
en un nivel fundamental la nocion de palabras? Los programadores principiantes
4 Vease http://en.wikipedia.org/wiki/Mnemonic para una descripci
on extendida de la palabra mnemonic.

28

Chapter 2. Variables, expresiones y afirmaciones

tienen dificultad separando las partes de codigo que deben ser igual en este ejemplo y las partes del codigo que son simplemente selecciones hechas por el programador.
El siguiente codigo es equivalent al codigo de arriba:
for slice in pizza:
print slice

Es mas facil para el programador principiante ver todo el codigo y saber que partes
son palabras reservadas definidas por Python y que partes son simplemente nombres de variables escogidas por el programador. Es claro que Python no tiene una
comprension fundamental de pizza y pedazos y el hecho de que una pizza consiste
de una o mas pedazos.
Pero si nuestro programa es sobre lectura de datos y encontrar palabras en los
datos, pizza y slice (pedazos) son nombres de variables mnemotecnicos. Escogerlos como variables distrae la atencion del significado del programa.
Despues de un corto tiempo, usted aprendera las palabras reservadas mas comunes
y comenzara a ver las palabras reservadas como si le saltaran a la vista:
for word in words:
print word
Las partes del codigo que estan definidas por Python (for, in, print, y :) estan
en negrilla y las variables que escogio el programador (word y words) no estan en
negrilla. Muchos editores de texto conocen la sintactica de Python y colorean las
palabras reservadas de manera diferente para darle una clave y ayudarle a separar
sus variables de las palabras reservadas. Despues de cierto tiempo usted empezara
a leer Python y rapidamente determinar que es una variable y que es una palabra
reservada.

2.13 Depuracion
Hasta aqu el error sintactico mas comun que usted vaya a cometer es un nombre
de variable ilegal, como class y yield, las cuales son palabras claves, o oddjob
y US$, los cuales contienen caracteres ilegales.
Si usted coloca un espacio en el nomre de una variable, Python cree que son dos
operandos sin un operador:
>>> bad name = 5
SyntaxError: invalid syntax

Para los errores sintacticos, el mensaje de error no es muy u til. Los mensajes mas
comunes son SyntaxError: invalid syntax y SyntaxError: invalid
token, ninguno de los dos es muy informativo.

2.14. Glosario

29

El error en tiempo de ejecucion o runtime error mas comun que usted va a


cometer es un use before def; que significa tratar de usar una variable antes
que le haya asignado un valor. Esto ocurre si usted escribe mal el nombre de la
variable:
>>> principal = 327.68
>>> interest = principle * rate
NameError: name 'principle' is not defined

Los nombres de variables son sensibles al uso de mayusculas y minusculas, as


que LaTeX no es lo mismo que latex.
Hasta aqu la causa mas comun de error sintactico es el orden de operacin. Por
1
ejemplo, para evaluar 2
, usted puede tener la tentacion de escribir
>>> 1.0 / 2.0 * pi

Per la division ocurre primero, as que el resultado que usted tendra sera /2, lo
cual no es la misma cosa. No hay ninguna manera que Python sepa lo que usted
quiere escribir, de modo que, en este caso, a usted no le aparecera un mensaje de
error; solo obtendra la respuesta incorrecta.

2.14 Glosario
assignment o asignatura: Una afirmacion que asigna un valor a una variable.
concatenar: Unir dos operandos.
comentario: Informacion en un programa con el proposito de informar a otros
programadores (o cualquiera que lea el codigo fuente) y que no tiene efecto
alguno en la ejecucion del programa.
evaluar: Simplificar una expresion al realizar las operaciones para obtener un
solo valor.
expression o expresion: Una combinacion de variables, operadores y valores que
representa un resultado de valor singular.
floating-point o punto flotante: Un tipo que representa numeros con partes en
fracciones.
floor division: La operacion que divide dos numeros y parte la seccion de la
fraccion.

integer o numero
entero: Un tipo que representa numeros enteros.
keyword o palabra clave: Una palabra reservada que usa el compilador para
analizar un programa. Usted no puede usar palabras claves como if, def, y
while para nombrar variables.

30

Chapter 2. Variables, expresiones y afirmaciones

mnemotecnicas: Una ayuda para recordar. A menudo damos a las variables nombres con menmotecnicas para ayudarnos a recordar lo que se almacena en
la variable.
modulus operator o modulo operador: Un operador denotado con un signo de
porcentaje (%), que funciona en numeros enteros y deja un residuo cuando
un numero es dividido por otro.
operando: Uno de los valores en el que un operador opera.
operador: Un smbolo especial que representa un calculo simple como suma,
multiplicacion o concatenacion de cadenas (string).
reglas de precedencia: La serie de reglas que gobieran el orden en el cual se
evaluan las expresiones que involucran multiples operadores y operandos.
statement o afirmacion: Un segmento de codigo que representa un comando o
accion. Hasta ahora, las afirmaciones que hemos visto son asignaturas y
comandos de impresion (print statements).
string o cadena: Un tipo que representa una secuencia de caracteres.
tipo: Una categoria de valores. Los tipos que hemos visto hasta ahora son
numeros enteros (tipo int), punto flotante (numero decimal) (type float),
y cadena o strings (type str).
valor: Uno de las unidades basicas de datos, como un numero o una cadena de
palabras que un programa manipula.
variable: Un nombre que se refiere a un valor.

2.15 Exercicios
Exercise 2.3 Escriba un programa que use raw_input que requiera que el usuario
entre su nombre y luego le de la bienvenida.
Enter your name: Chuck
Hello Chuck
Exercise 2.4 Escriba un programa que requiera del usuario entrar las horas y el
valor por hora para calcular el pago total.
Enter Hours: 35
Enter Rate: 2.75
Pay: 96.25
No nos preocuparemos de que el salario tenga exactamente dos dgitos despues del
decimal, por ahora. Si usted quiere, puede ensayar con las functiones integradas
de Python round para redondear apropiadamente el resultado del pago en dos
espacios decimales.

2.15. Exercicios

31

Exercise 2.5 Asuma que ejecutamos la siguiente asignacion de las afirmaciones:


width = 17
height = 12.0
Para cada una de las siguientes expresiones, escriba el valor de la expresion y el
tipo del valor de la expresion.
1. width/2
2. width/2.0
3. height/3
4. 1 + 2 * 5
Use el interprete de Python para verificar sus respuestas.
Exercise 2.6 Escriba un programa que requiera que el usuario entre la temperatura en celsius, convierta la medida a Fahrenheit e imprima el resultado de la
temperatura que ha sido convertida.

32

Chapter 2. Variables, expresiones y afirmaciones

Chapter 3

Ejecucion condicional
3.1 Expresiones booleanas
Una expresion booleana es una expresion que es o falsa o verdadera. Los siguientes ejemplo utilizan el operador ==, el cual compara dos operandos y produce
True si son iguales y False si no lo son:
>>> 5 == 5
True
>>> 5 == 6
False

True y False son valores especiales que pertenecen al tipo bool; estos no son
cadenas o strings:
>>> type(True)
<type 'bool'>
>>> type(False)
<type 'bool'>

El operador == es uno de los operadores de comparacion; los otros son:


x
x
x
x
x
x
x

!= y
> y
< y
>= y
<= y
is y
is not y

#
#
#
#
#
#
#

x
x
x
x
x
x
x

no
es
es
es
es
es
no

es igual a y
mayor que y
menor que y
mayor o igual a y
menor o igual a y
lo mismo que y
es lo mismo que y

Aunque estas operaciones le resulten probablemente familiares, los smbolos de


Python son diferentes a los smbolos matematicos. Un error muy comun es utilizar
el signo igual solo (=) en vez del signo igual doble (==). Recuerde que = es un
operador para asignar valor y == es un operador de comparacion. No hay tal cosa
como =< o =>.

34

Chapter 3. Ejecucion condicional

3.2 Operadores de logica


There are three logical operators: and, or, and not. The semantics (meaning) of
these operators is similar to their meaning in English. For example,
x > 0 and x < 10
is true only if x is greater than 0 and less than 10.
n%2 == 0 or n%3 == 0 is true if either of the conditions is true, that is, if the
number is divisible by 2 or 3.
Finally, the not operator negates a boolean expression, so not (x > y) is true if
x > y is false, that is, if x is less than or equal to y.
Strictly speaking, the operands of the logical operators should be boolean expressions, but Python is not very strict. Any nonzero number is interpreted as true.
>>> 17 and True
True

This flexibility can be useful, but there are some subtleties to it that might be
confusing. You might want to avoid it (unless you know what you are doing).

3.3 Ejecucion condicional


In order to write useful programs, we almost always need the ability to check conditions and change the behavior of the program accordingly. Conditional statements give us this ability. The simplest form is the if statement:
if x > 0 :
print 'x is positive'

The boolean expression after the if statement is called the condition. We end the
if statement with a colon character (:) and the line(s) after the if statement are
indented.

x>0
no

yes
print 'x is positive'

If the logical condition is true, then the indented statement gets executed. If the
logical condition is false, the indented statement is skipped.

3.4. Ejecucion alternativa

35

if statements have the same structure as function definitions or for loops. The
statement consists of a header line that ends with the colon character (:) followed
by an indented block. Statements like this are called compound statements because they stretch across more than one line.
There is no limit on the number of statements that can appear in the body, but there
has to be at least one. Occasionally, it is useful to have a body with no statements
(usually as a place keeper for code you havent written yet). In that case, you can
use the pass statement, which does nothing.
if x < 0 :
pass

# need to handle negative values!

If you enter an if statement in the Python interpreter, the prompt will change from
three chevrons to three dots to indicate you are in the middle of a block of statements as shown below:
>>> x = 3
>>> if x < 10:
...
print 'Small'
...
Small
>>>

3.4 Ejecucion alternativa


A second form of the if statement is alternative execution, in which there are two
possibilities and the condition determines which one gets executed. The syntax
looks like this:
if x%2 == 0 :
print 'x is even'
else :
print 'x is odd'

If the remainder when x is divided by 2 is 0, then we know that x is even, and the
program displays a message to that effect. If the condition is false, the second set
of statements is executed.

no
print 'x is odd'

x%2 == 0

yes
print 'x is even'

36

Chapter 3. Ejecucion condicional

Since the condition must be true or false, exactly one of the alternatives will be
executed. The alternatives are called branches, because they are branches in the
flow of execution.

3.5 Condicionales en cadena


Sometimes there are more than two possibilities and we need more than two
branches. One way to express a computation like that is a chained conditional:
if x < y:
print 'x is less than y'
elif x > y:
print 'x is greater than y'
else:
print 'x and y are equal'

elif is an abbreviation of else if. Again, exactly one branch will be executed.

x<y

x>y

yes

yes

print 'less'

print 'greater'

print 'equal'

There is no limit on the number of elif statements. If there is an else clause, it


has to be at the end, but there doesnt have to be one.
if choice == 'a':
print 'Bad guess'
elif choice == 'b':
print 'Good guess'
elif choice == 'c':
print 'Close, but not correct'

Each condition is checked in order. If the first is false, the next is checked, and so
on. If one of them is true, the corresponding branch executes, and the statement
ends. Even if more than one condition is true, only the first true branch executes.

3.6. Condicionales anidados

37

3.6 Condicionales anidados


One conditional can also be nested within another. We could have written the
trichotomy example like this:
if x == y:
print 'x and y are equal'
else:
if x < y:
print 'x is less than y'
else:
print 'x is greater than y'

The outer conditional contains two branches. The first branch contains a simple statement. The second branch contains another if statement, which has two
branches of its own. Those two branches are both simple statements, although
they could have been conditional statements as well.

yes
x == y

no
yes

print 'equal'

x<y

print 'less'

no

print 'greater'

Although the indentation of the statements makes the structure apparent, nested
conditionals become difficult to read very quickly. In general, it is a good idea to
avoid them when you can.
Logical operators often provide a way to simplify nested conditional statements.
For example, we can rewrite the following code using a single conditional:
if 0 < x:
if x < 10:
print 'x is a positive single-digit number.'

The print statement is executed only if we make it past both conditionals, so we


can get the same effect with the and operator:
if 0 < x and x < 10:
print 'x is a positive single-digit number.'

38

Chapter 3. Ejecucion condicional

3.7 Captacion de excepciones utilizando try y except


Earlier we saw a code segment where we used the raw_input and int functions to
read and parse an integer number entered by the user. We also saw how treacherous
doing this could be:
>>> speed = raw_input(prompt)
What...is the airspeed velocity of an unladen swallow?
What do you mean, an African or a European swallow?
>>> int(speed)
ValueError: invalid literal for int()
>>>

When we are executing these statements in the Python interpreter, we get a new
prompt from the interpreter, think oops and move on to our next statement.
However if this code is placed in a Python script and this error occurs, your script
immediately stops in its tracks with a traceback. It does not execute the following
statement.
Here is a sample program to convert a Fahrenheit temperature to a Celsius temperature:
inp = raw_input('Enter Fahrenheit Temperature:')
fahr = float(inp)
cel = (fahr - 32.0) * 5.0 / 9.0
print cel

If we execute this code and give it invalid input, it simply fails with an unfriendly
error message:
python fahren.py
Enter Fahrenheit Temperature:72
22.2222222222
python fahren.py
Enter Fahrenheit Temperature:fred
Traceback (most recent call last):
File "fahren.py", line 2, in <module>
fahr = float(inp)
ValueError: invalid literal for float(): fred

There is a conditional execution structure built into Python to handle these types of
expected and unexpected errors called try / except. The idea of try and except
is that you know that some sequence of instruction(s) may have a problem and
you want to add some statements to be executed if an error occurs. These extra
statements (the except block) are ignored if there is no error.
You can think of the try and except feature in Python as an insurance policy
on a sequence of statements.
We can rewrite our temperature converter as follows:

3.8. Evaluacion de cortocircuito de expresiones logicas

39

inp = raw_input('Enter Fahrenheit Temperature:')


try:
fahr = float(inp)
cel = (fahr - 32.0) * 5.0 / 9.0
print cel
except:
print 'Please enter a number'

Python starts by executing the sequence of statements in the try block. If all goes
well, it skips the except block and proceeds. If an exception occurs in the try
block, Python jumps out of the try block and executes the sequence of statements
in the except block.
python fahren2.py
Enter Fahrenheit Temperature:72
22.2222222222
python fahren2.py
Enter Fahrenheit Temperature:fred
Please enter a number

Handling an exception with a try statement is called catching an exception. In


this example, the except clause prints an error message. In general, catching an
exception gives you a chance to fix the problem, or try again, or at least end the
program gracefully.

3.8 Evaluacion de cortocircuito de expresiones logicas


When Python is processing a logical expression such as x >= 2 and (x/y) >
2, it evaluates the expression from left-to-right. Because of the definition of and,
if x is less than 2, the expression x >= 2 is False and so the whole expression is
False regardless of whether (x/y) > 2 evaluates to True or False.
When Python detects that there is nothing to be gained by evaluating the rest of
a logical expression, it stops its evaluation and does not do the computations in
the rest of the logical expression. When the evaluation of a logical expression
stops because the overall value is already known, it is called short-circuiting the
evaluation.
While this may seem like a fine point, the short circuit behavior leads to a clever
technique called the guardian pattern. Consider the following code sequence in
the Python interpreter:
>>> x
>>> y
>>> x
True
>>> x
>>> y
>>> x

= 6
= 2
>= 2 and (x/y) > 2
= 1
= 0
>= 2 and (x/y) > 2

40

Chapter 3. Ejecucion condicional

False
>>> x = 6
>>> y = 0
>>> x >= 2 and (x/y) > 2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
>>>

The third calculation failed because Python was evaluating (x/y) and y was zero
which causes a runtime error. But the second example did not fail because the
first part of the expression x >= 2 evaluated to False so the (x/y) was not ever
executed due to the short circuit rule and there was no error.
We can construct the logical expression to strategically place a guard evaluation
just before the evaluation that might cause an error as follows:
>>> x = 1
>>> y = 0
>>> x >= 2 and y != 0 and (x/y) > 2
False
>>> x = 6
>>> y = 0
>>> x >= 2 and y != 0 and (x/y) > 2
False
>>> x >= 2 and (x/y) > 2 and y != 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
>>>

In the first logical expression, x >= 2 is False so the evaluation stops at the and.
In the second logical expression x >= 2 is True but y != 0 is False so we never
reach (x/y).
In the third logical expression, the y != 0 is after the (x/y) calculation so the
expression fails with an error.
In the second expression, we say that y != 0 acts as a guard to insure that we
only execute (x/y) if y is non-zero.

3.9 Depuracion
The traceback Python displays when an error occurs contains a lot of information,
but it can be overwhelming, especially when there are many frames on the stack.
The most useful parts are usually:
What kind of error it was, and
Where it occurred.

S-ar putea să vă placă și