Beruflich Dokumente
Kultur Dokumente
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.
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.
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.
Charles Severance
www.dr-chuck.com
Ann Arbor, MI, USA
Septiembre 9, 2013
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?.
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
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.
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.
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:
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
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.
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.
>>>
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!
>>> 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.
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.
?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
....
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
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.
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()
bigcount = None
bigword = None
for word,count in counts.items():
if bigcount is None or count > bigcount:
bigword = word
bigcount = count
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
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.
exjecucion sequential: Realizar enunciados uno tras otro en el orden que los en-
cuentre en el guion.
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.
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
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.
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.
1.12 Glosario
bug: Un error en el programa.
codigo de maquina: El lenguage de mas bajo nivel para software el cual es di-
rectamente ejecutado por unidad central de procesamiento (CPU).
orden de impresion (print statement): Una instruccion que causa que Python
interprete un valor y lo despliegue en el monitor.
1.13 Ejercicios
Exercise 1.1 Cual es la funcion de la memoria secundaria de una computadora?
a) El interprete Python
b) El teclado
c) Archivo fuente en Python
d) Un documento de procesador de palabras (word processing)
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?
Variables, expresiones y
afirmaciones
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
>>> type('17')
<type 'str'>
>>> type('3.2')
<type 'str'>
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:
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.
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.
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
>>> type(message)
<type 'str'>
>>> type(n)
<type 'int'>
>>> type(pi)
<type 'float'>
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).
76trombones es ilegal porque no comienza con una letra. more@ es ilegal porque
contiene un caractere ilegal, @. Pero que tiene de malo class?
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
Pero en un script, una expresion por s misma no hace nada. Esto es una fuente
de confusion muy comun para principiantes.
Exercise 2.2 5
x = 5
x + 1
Cuando tenga duda, siempre ponga parentesis en sus expresiones para asegurarse
que la computacion se realicen en el order que usted intenta.
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.
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
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
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
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.
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:
?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.
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.
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:
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
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.
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
1. width/2
2. width/2.0
3. height/3
4. 1 + 2 * 5
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
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'>
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).
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
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
>>>
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
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.
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'
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
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
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.
if 0 < x:
if x < 10:
print 'x is a positive single-digit number.'
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.
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.
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
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.
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.
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:
Where it occurred.