Sie sind auf Seite 1von 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 tit-
ulado 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 abstrac-
ciones. 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 progra-
madores de computadoras profesionales. La mayora, en cambio, planeaban ser
bibliotecarios, administradores, abogados, biologos, economistas, etc. y simple-
mente 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 va-
caciones, el Dr. Atul Prakash me mostro el libro Pensar Python el cual el haba
usado para ensenar su curso de Python durante ese semestre. Es un texto de In-
formatica muy bien escrito con un enfasis 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 ejer-
cicios 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 presen-
tarlos 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 con-
cepto 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 utiles aun si alguien
no elije ser programador como profesion.

Los estudiantes que encuentren este libro interesante y quieran continuar explo-
rando 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 rapida-
mente adquiriran destrezas en areas adicionales de programacion tecnica y pen-
samiento 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, pa-


ciencia 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 What What


Next? Next? Next?

What What What


PDA
Next? Next? Next?

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


hardware y nosotros terminamos con un Asistente Personal Digital muy util 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 ex-
plicarles 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.
2 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. Elab-
orar programas utiles, 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 es-
coge 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 Pick Pick


Me! Me! Me!

Pick Pick Buy


PDA
Me! Me! Me :)

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 3

encontraremos en nuestra vida diaria. Cuando usted comience, usted es tanto pro-
gramador 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 can-
tidad sobre como se construyen las computadoras. Si usted desbaratara su com-
putadoras o telefono celular y mirara lo que hay dentro, encontara las siguientes
partes:

What
Software Next?

Central
Input Processing
Output Network
Unit
Devices

Main
Secondary
Memory
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 obse-
sionarse 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 se-
cundaria es que puede almacenar informacion aun cuando la computadora
4 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 re-
productores 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).

What
Software Next?

Central
Input Processing
Output Network
Unit
Devices

Main
Secondary
Memory
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 mil-
lones 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 5

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 pro-
grama 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 prob-
lema 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 progra-
macion 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 pal-
abras que tienen un significado muy especial para Python. Cuando Python ve
6 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 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 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 apropi-
ado, pero por ahora nos enfocaremos en el equivalente al idioma de Python
en terminos relacionados al leguage como vimos entre la comunicacion humano-
perro 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, necesita-
mos saber como se comienza una conversacion con Python para probar nuestras
destrezas de lenguage.
1 http://xkcd.com/231/
1.5. Conversacion con Python 7

Antes de que pueda conversar con Python, usted primero debe instalar la apli-
cacion 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
>>>
8 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 inmensa-
mente complejo y poderoso, y muy quisquilloso en relacion a la sintaxis con la
que se debe comunicar con el, 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 conver-
sacion 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 util.

1.6 Terminologa: interprete y compilador


Python es un lenguage de alto nivel cuya intencion es hacerlo relativamente sen-
cillo 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, Ba-
sic, 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 9

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 es-
tos 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 hard-
ware. Los Programas escritos en lenguages de alto nivel se pueden mover entre
las diferentes computadoras usando un interprete diferente en la nueva computa-
dora 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 gen-
erales: (1) interpretes y (2) compiladores.
Un interprete lee el codigo fuente del programa como ha sido escrito por el pro-
gramador, 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 in-
mediato, 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.
>>> x = 6
>>> print x
6
>>> y = x * 7
>>> print y
42
>>>

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 re-
cupere 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 inter-


activa como se muestra arriba. Un compilador necesita que se le entregue el pro-
grama 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 completa-


mente 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 lan-
guage 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 pro-
gramador 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 experi-
mentar 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 nom-
bre del archivo. En la terminal de Unix o Windows, usted escribe el comando
python hello.py de la siguiente manera:
csev$ cat hello.py
print 'Hello world!'
csev$ python hello.py
Hello world!
csev$

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 afir-
maciones 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 util, 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 prob-
lema para el cual se cree un programa que lo pueda resolver, y luego ver el pro-
grama 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 es-
criba 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 pal-
abra 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 in-
termediarios entre usted como (usuario) y yo como (programador). Python es una
manera para que nosotros intercambiemos instrucciones secuenciales utiles (i.e.
programas) en un lenguage comun que pueden ser usadas por cualquiera que in-
stale 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 utiles.
Hay algunos patrones conceptuales de bajo nivel que se usan para escribir progra-
mas. 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 en-
cuentre en el guion.

exjecucion condicional: Revisar ciertas condiciones y ejecutar o saltar un se-


cuencia de enunciados.

exjecucion repetida: Realizar alguna serie de enunciados repetidamente, gen-


eralmente con alguna variacion.

reuso: Escribir una serie de instrucciones una sola vez y darles un nombre y de-
spues 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 en-
lazar 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 pro-
grama 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 comu-
nica 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
unica 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 pa-


sos 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 restau-
rante. 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 in-
dicaciones 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 id-
ioma 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 completa-
mente 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 escul-
tura 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 eje-


cuta 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 co-


mandos 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 di-
rectamente 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) Dispos-
itivo 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 en-
teros 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 se-
cuencia 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 im-
primir:

>>> 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 vari-
ables.

Los nombres de variable pueden ser arbitrariamente largas, pueden contener tanto
letras como numeros, pero deben comenzar con una letra. Es correcto uti-
lizar 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 pro-
grama, y no se pueden utilizar para nombrar variables.

Python reserva 31 palabras clave o keywords1 para su uso:


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
1 En 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 division 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 re-
aliza 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

Si usted escribe una expresion en modo interactivo, el interprete lo evalua y de-


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:
>>> quotient = 7 / 3
>>> print quotient
2
>>> remainder = 7 % 3
>>> print remainder
1

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

El modulus operator es sorpresivamente muy util. Por ejemplo, usted puede ver-
ificar 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 ultimos 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:
>>> first = 10
>>> second = 15
>>> print first+second
25
>>> 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 indi-
cando 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 comentar-
ios 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 utiles 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 util 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 util 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 vari-
ables. 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 hu-
manos los ven y los entienden de una manera muy diferente. Los humanos van a
entender mas rapidamente la intencion del segundo programa porque el progra-
mador 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 vari-


able mnemotecnicos. La palabra mnemotecnica4 que significa ayuda a memo-
rizar. 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 progra-
mador 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 reser-
vadas (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 nom-
bres 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 descripcion extendida de la pal-

abra mnemonic.
28 Chapter 2. Variables, expresiones y afirmaciones

tienen dificultad separando las partes de codigo que deben ser igual en este ejem-
plo y las partes del codigo que son simplemente selecciones hechas por el progra-
mador.

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 nom-
bres 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. Es-
cogerlos 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 util. 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 nom-
bres 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 temper-
atura 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 sigu-
ientes 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 != y # x no es igual a y
x > y # x es mayor que y
x < y # x es menor que y
x >= y # x es mayor o igual a y
x <= y # x es menor o igual a y
x is y # x es lo mismo que y
x is not y # x no 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 expres-
sions, 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 con-
ditions and change the behavior of the program accordingly. Conditional state-
ments 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.

yes
x>0

no 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 be-
cause 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 state-
ments 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 yes
x%2 == 0

print 'x is odd' 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.

yes
x<y print 'less'

yes
x>y 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 sim-
ple 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 no
x == y

yes no
x<y

print 'equal' print 'less' 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 tem-


perature:
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 = 6
>>> y = 2
>>> x >= 2 and (x/y) > 2
True
>>> x = 1
>>> y = 0
>>> x >= 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.

Das könnte Ihnen auch gefallen