0% encontró este documento útil (0 votos)
360 vistas54 páginas

Libro Python

libro para aprender python

Cargado por

matias carabelli
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
360 vistas54 páginas

Libro Python

libro para aprender python

Cargado por

matias carabelli
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

T´ıtulo original Snake Wrangling for Kids, Learning to Program with

Python por Jason R. Briggs


Versi´on 0.7.7
Copyright c 2007.

Traducci´on al espa˜nol: Jos´e Miguel Gonz´alez Aguilera


Versi´on 0.0.4
Copyright de la traducci´on c 2009.
Website de la traducci´on: http://code.google.com/p/swfk-es

Publicado por... ah, en realidad... por nadie.


Dise˜no de portada e ilustraciones realizado por Nuthapitol C.

Website:
http://www.briggs.net.nz/log/writing/snake-wrangling-for-kids

Agradecimientos del Autor:


Guido van Rossum (por su benevolente dictadura del lenguaje Python), a los miem
bros de la lista de correo Edu-Sig (por sus ´utiles comentarios y consejos), al autor
David Brin (el instigador inicial de este libro), Michel Weinachter (por proporcionar
unas versiones de mejor calidad de las ilustraciones), y a aquellas personas que
apor taron informaci´on y erratas, incluidas: Paulo J. S. Silva, Tom Pohl, Janet
Lathan, Martin Schimmels, and Mike Cariaso (entre otros). Cualquiera que haya
quedado fuera y no tuviera que quedar as´ı, es debido a la prematura senilidad del
autor.

Agradecimientos del Traductor:


A Jason R. Briggs. A Nieves, Alba y especialmente a Miguel, mi hijo, por sus
aportaciones a la traducci´on.
Licencia:

Este trabajo est´a licenciado bajo la licencia de Reconocimiento-No comercial-


Compartir bajo la misma licencia Creative Commons 3.0 Espa˜na. Para ver una copia
de esta licencia, visita http://creativecommons.org/licenses/by-nc-sa/3.0/es/ o env´ıa
una carta a Creative Commons, 171 Second Street, Suite 300, San Francisco,
California, 94105, USA.
A continuaci´on se muestra un resumen de la licencia.

Usted es libre de:

Compartir — copiar, distribuir y comunicar p´ublicamente la obra


Rehacer — hacer obras derivadas

Bajo las condiciones siguientes:

Reconocimiento. Debe reconocer los cr´editos de la obra de la manera


especificada por el autor o el licenciador (pero no de una manera que sugiera
que tiene su apoyo o apoyan el uso que hacer de su obra).
No comercial. No puede utilizar esta obra para fines comerciales.
Compartir bajo la misma licencia. Si altera o transforma esta obra, o genera una
obra derivada, s´olo puede distribuir la obra generada bajo una licencia id
´entica a ´esta.

Al reutilizar o distribuir la obra, tiene que dejar bien claro los t´erminos de la
licencia de esta obra.

Alguna de las condiciones puede no aplicarse si se obtiene el permiso del titular de


los derechos de esta obra.

Nada en esta licencia menoscaba o restringe los derechos morales del autor.

´
Indice general
Introducci´on V

1. No todas las serpientes muerden 1 1.1. Unas pocas palabras sobre el lenguaje .
. . . . . . . . . . . . . . . . . 2 1.2. La Orden de las Serpientes Constrictoras No
Venenosas... . . . . . . 3 1.3. Tu primer programa en Python . . . . . . . . . . . . . . . . .
. . . . 5 1.4. Tu segundo programa en Python...¿Otra vez lo mismo? . . . . . . . 6

2. 8 multiplicado por 3.57 igual a... 9 2.1. El uso de los par´entesis y el “Orden de
las Operaciones” . . . . . . . 12 2.2. No hay nada tan voluble como una variable . .
. . . . . . . . . . . . 13 2.3. Utilizando variables . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15 2.4. ¿Un trozo de texto? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.5. Trucos
para las cadenas . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.6. No es la lista de la
compra . . . . . . . . . . . . . . . . . . . . . . . . 19 2.7. Tuplas y Listas . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . 23 2.8. Cosas que puedes probar . . . . . . . . . . . . . . . . . . . . . .
. . . 24

3. Tortugas, y otras criaturas lentas 25 3.1. Cosas que puedes probar . . . . . . . . . . .


. . . . . . . . . . . . . . 32

4. C´omo preguntar 33 4.1. Haz esto... o ¡¡¡SI NO!!! . . . . . . . . . . . . . . . . . . . . . . . . .


38

i
4.2. Haz esto... o haz esto... o haz esto... o ¡¡¡SI NO!!! . . . . . . . . . . 38 4.3.
Combinando condiciones . . . . . . . . . . . . . . . . . . . . . . . . . 41 4.4. Vac´ıo
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4.5. ¿Cu´al es la diferencia...? .
. . . . . . . . . . . . . . . . . . . . . . . . 47 4.6. Cosas que puedes probar . . . . . . . . . . . . .
. . . . . . . . . . . . 49

5. Una y otra vez 51 5.1. ¿Cu´ando un bloque no es cuadrado? . . . . . . . . . . . . . . . .


. . . 54 5.2. Saliendo de un bucle antes de tiempo . . . . . . . . . . . . . . . . . . 62 5.3.
Mientras hablamos sobre bucles... . . . . . . . . . . . . . . . . . . . . 63 5.4. Cosas que
puedes probar . . . . . . . . . . . . . . . . . . . . . . . . . 66

6. Una forma de reciclar... 67 6.1. Trocitos


. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 6.2. M´odulos . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 73 6.3. Cosas para probar
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

7. Un corto cap´ıtulo sobre ficheros 79

8. Tortugas en abundancia 81 8.1. Coloreando . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


. . . 85 8.2. Oscuridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 8.3.
Rellenando las cosas . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 8.4. Cosas para
probar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

9. Algo sobre gr´aficos 97 9.1. Dibujo r´apido


. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 9.2. Dibujos simples . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 101 9.3. Dibujando cajas . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . 103 9.4. Dibujando arcos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 9.5.
Dibujando ´ovalos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 9.6. Dibujando pol
´ıgonos . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

ii
9.7. Mostrando im´agenes . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 9.8. Animaci
´on b´asica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 9.9. Reaccionando a los
eventos... . . . . . . . . . . . . . . . . . . . . . . 117

10.C´omo seguir desde aqu´ı 121 A. Palabras clave de Python 123 B. Funciones

internas de Python 137 C. Unos cuantos m´odulos de Python 147 D. Respuestas a

“Cosas que puedes probar” 157

iii
iv

Introducci´on

Una Nota para los Padres...

Querida ‘Unidad Paternal’ u otro Tutor,


Para que tu hijo pueda iniciarse a la programaci´on, es necesario que instales
Python en tu ordenador. Este libro se ha actualizado para utilizar Python 3.0–esta
´ultima versi´on de Python no es compatible con versiones anteriores, por lo que si
tienes instalada una versi´on anterior de Python, necesitar´as descargar una versi
´on m´as antigua de este libro.
La instalaci´on de Python es una tarea simple, pero hay algunas cosas a
tener en cuenta dependiendo del Sistema Operativo en el que se instale. Si acabas
de comprar un ordenador nuevo, no tienes ni idea de qu´e hacer con ´el, y mi
afirmaci´on anterior te ha dado escalofr´ıos, probablemente querr´as buscar a
alguien que haga esta tarea por ti. Dependiendo del estado de tu ordenador, y la
velocidad de tu conexi´on a Internet, te puede llevar de 15 minutos a varias horas.
En primer lugar, ve a www.python.org y descarga el ´ultimo instalador de Windows
para Python 3. En el momento de escribir este libro era:

http://www.python.org/ftp/python/3.0.1/python-3.0.1.msi

Haz doble click en el icono del instalador de Windows (¿Recuerdas d´onde lo has
descargado?), y sigue las instrucciones para instalarlo en la ubicaci´on por defecto
(posiblemente ser´a c:\Python30 o algo parecido).
Despu´es de la instalaci´on...
...Puede que te tengas que sentar junto a tu hijo durante los primeros cap´ıtulos,
pero despu´es de unos pocos ejemplo, deber´ıan estar apartando tus manos del
teclado porque querr´an hacerlo ellos. Tus hijos deber´ıan conocer como utilizar un
editor de texto antes de comenzar (no, no un Procesador de Textos, como
Microsoft Word— un editor de texto plano de la vieja guardia)—deber´ıan saber
como abrir y cerrar ficheros, crear nuevos ficheros de texto y grabar lo que est´an
haciendo. Este libro

v
intentar´a ense˜narles lo b´asico, a partir de aqu´ı.

Gracias por tu tiempo, y un cordial saludo,


EL LIBRO
vi

Cap´ıtulo 1

No todas las serpientes muerden

Existe la posibilidad de que te regalasen este libro en tu cumplea˜nos. O posi


blemente en navidades. La t´ıa Pili iba a regalarte unos calcetines que eran dos
tallas m´as grandes que la tuya (que no querr´ıas llevar ni cuando crecieras). En
vez de eso, oy´o a alguien hablar de este libro imprimible desde Internet, record´o
que ten´ıas uno de esos aparatos que se llaman ordenadores o algo as´ı y que
intentaste ense˜narle a usarlo las ´ultimas navidades (cosa que dejaste de hacer
cuando viste que ella inten taba hablarle al rat´on), y te imprimi´o una copia. Agrad
´ecele que no te regalase los viejos calcetines.
En vez de eso, espero que no te haya defraudado cuando sal´ı del papel de
en volver reciclado. Yo, un libro que no habla tanto como tu t´ıa (de acuerdo, no
hablo nada de nada), con un t´ıtulo que no augura nada bueno sobre “Aprender...”.
Sin embargo, entretente un rato pensando como me siento yo. Si fueras el
personaje de esta novela sobre magos que est´a en la estanter´ıa de tu dormitorio,
posiblemente yo tendr´ıa dientes... o incluso ojos. Dentro de m´ı tendr´ıa fotos con
im´agenes que se mover´ıan, o ser´ıa capaz de hacer sonidos y quejidos
fantasmales cuando abrieras mis p´aginas. En luga de eso, estoy impreso en p
´aginas de tama˜no folio, grapadas o tal vez aprisionadas en una carpeta. Como
podr´ıa saberlo—Si no tengo ojos.

Dar´ıa cualquier cosa por una hermosa y afilada dentadura...

Si embargo no es tan malo como suena. Incluso aunque no pueda hablar... o


morderte los dedos cuando no est´as mirando... Puedo ense˜narte un poquito
sobre lo que hace que los ordenadores funcionen. No hablo de las piezas, con
cables, conexiones, chips de ordenador y dispositivos que podr´ıan, m´as que
probablemente, electrocutarte en cuanto los tocaras (por eso ¡¡no los toques!!)—
sino de todo aquello que por va dentro de esos cables, circuitos y chips, que es lo
que hace que los ordenadores sean ´utiles.

1
´
2 CAP ITULO 1. NO TODAS LAS SERPIENTES MUERDEN

Es como esos peque˜nos pensa


mientos que andan dentro de tu ca
beza. Si no tuvieras pensamientos es
tar´ıas sentado en el suelo de tu dor
mitorio, con la mirada perdida ha
cia la puerta de tu habitaci´on y ba
beando en la camiseta. Sin los progra
mas, los ordenadores solamente ser´ıan
´utiles para sujetar las puertas—e in
cluso para eso no ser´ıan muy ´uti
les, porque tropezar´ıas constantemen
te con ellos por la noche. Y no
hay nada peor que darse un gol
pe en un dedo del pie en la oscuri
dad.
Solamente soy un libro, incluso yo s´e eso

Tu familia puede que tenga una Playstation, Xbox o Wii en la sala de estar— No
son muy ´utiles sin programas (Juegos) para hacerlas funcionar. Tu reproductor de
DVD, posiblemente tu frigor´ıfico e incluso tu coche, todos contienen programas de
ordenador para hacerlos m´as ´utiles de lo que ser´ıan sin ellos. Tu reproductor de
DVD tiene programas que sirven para que pueda reproducir lo que hay en un DVD;
tu frigor´ıfico podr´ıa tener un programa simple que le asegura que no usa
demasiada electricidad, pero s´ı la suficiente para mantener la comida fr´ıa; tu
coche podr´ıa tener un ordenador con un programa para avisar al conductor que
van a chocar contra algo.
Si supieras escribir programas de ordenador, podr´ıas hacer toda clase de cosas
´utiles, Tal vez escribir tus propios juegos. Crear p´aginas web que hagan cosas,
en lugar de estar ah´ı delante paradas con sus colorida apariencia. Ser capaz de
programar te podr´ıa ayudar incluso con tus deberes.

Dicho esto, vamos a hacer algo un poco m´as interesante.

1.1. Unas pocas palabras sobre el lenguaje


Como pasa con los humanos, con las ballenas, posiblemente con los
delfines, y puede que incluso con los padres (aunque esto ´ultimo se puede
debatir), los or denadores tienen su propio idioma o lenguaje. En realidad, tambi´en
como con los humanos, tienen m´as de un idioma. Hay tantos lenguajes que casi
se acaban las
1.2. LA ORDEN DE LAS SERPIENTES CONSTRICTORAS NO VENENOSAS...3

letras del alfabeto. A, B, C, D y E no son ´unicamente letras, tambi´en son nombres


de lenguajes de programaci´on (lo que prueba que los adultos no tienen imaginaci
´on, y que deber´ıan leer un diccionario antes de darle nombre a nada).
Hay lenguajes de programaci´on cuyo nombre viene de nombres de
personas, otros cuyo nombre viene de acr´onimos (las letras may´usculas de una
serie de pa labras), y algunos pocos cuyo nombre proviene de alg´un espect´aculo
de televisi´on. Ah, y si le a˜nades algunos simbolos m´as y hash (+, #) despu´es de
un par de las letras que coment´e antes—tambi´en hay un par de lenguajes de
programaci´on que se llamen as´ı. Para complicar m´as las cosas, algunos de esos
lenguajes son casi iguales, y s´olo var´ıan ligeramente.

¿Qu´e te dije? ¡Sin imaginaci´on!

Por fortuna, muchos de estos lenguajes ya no se usan mucho, o han desapareci


do completamente; pero la lista de las diferentes formas de las que le puedes
‘hablar’ al ordenador sigue siendo preocupantemente larga. Yo ´unicamente voy a
comentar una de ellas—de otra manera posiblemente ni siquiera podr´ıamos
empezar.
Ser´ıa mas productivo permanecer sentado en tu dormitorio babeando la camiseta...

1.2. La Orden de las Serpientes Constrictoras No


Venenosas. . .
...o Pitones, para abreviar.
Aparte de ser una serpiente, Python es tambi´en un lenguaje de programaci
´on. Sin embargo, el nombre no procede este reptil sin patas; en vez de eso es uno
de los pocos lenguajes de programaci´on cuyo nombre viene de un programa de
televisi´on. Monty Python era un espect´aculo de comedia Brit´anica que fue
popular en la d´ecada de los 70 (1970-1979), y que a´un es popular hoy d´ıa, en
realidad, para la que tienes que ser de una cierta edad para encontrarla
entretenida. Cualquiera bajo una edad de unos ... digamos 12... se sorprender´a de
las pasiones que levanta esta comedia1.
Hay algunas cosas sobre Python (el lenguaje de programaci´on, no la serpien
te, ni el espect´aculo de televisi´on) que lo hacen extremadamente ´util cuando est
´as aprendiendo a programar. Para nosotros, por el momento, la raz´on m´as
importante es que puedes comenzar a hacer cosas realmente r´apido.
Esta es la parte en la que espero que Mam´a, Pap´a (o cualquiera que sea que
1
Salvo por la danza de los golpes de pescado. Eso es divertido independientemente de la edad
que tengas.
´
4 CAP ITULO 1. NO TODAS LAS SERPIENTES MUERDEN

Figura 1.1: Python en el men´u de opciones de Windows.

est´e a cargo del ordenador), hayan le´ıdo el comienzo de este libro que est´a
etiquetado como “Una Nota para los Padres:”
Hay una buena manera de descubrir si realmente se la han le´ıdo:
Haz click en el bot´on de Inicio en la parte izquierda de la pantalla, pulsa en
la opci´on ‘Todos los Programas’ (que tiene un tri´angulo verde junto a ella), y, si
todo va bien, en la lista de programas deber´ıas ver ‘Python 2.5’ o ‘Python 3.0’ (o
algo parecido). La Figura 1.1 te muestra lo que est´as buscando. Pulsa en la opci
´on ‘Python (l´ınea de comando)’ y deber´ıas ver algo parecido a la Figura 1.2.

Si descubrieras que no se han leido la secci´on del comienzo del


libro. . .
...porque falta algo cuando intentas seguir las instrucciones—entonces ve al
comienzo del libro, y se lo pasas por delante de sus narices mientras est´en
intentando leer el peri´odico, y pon cara esperanzada. Diciendo, “por favor por
favor por favor por favor” y as´ı una y otra vez, hasta que resulte molesto, podr´ıa
funcionar bastante bien, si tuvieras problemas en convencerles para que se
levanten del sill´on, puede probar otra cosa, ir al comienzo del libro y seguir las
instrucciones en la Introducci´on para instalar Python t´u mismo.
1.3. TU PRIMER PROGRAMA EN PYTHON 5
Figura 1.2: La consola de Python en Windows.

1.3. Tu primer programa en Python


Con algo de suerte, si has alcanzado este punto, has conseguido iniciar la
consola de Python, que es una de las formas de ejecutar sentencias y programas.
Al iniciar la consola (o despu´es de ejecutar una sentencia), ver´as lo que se llama
un ‘prompt’. En la consola de Python, el prompt est´a formado por tres s´ımbolos
de ‘mayor que’ (>) que forman una flecha apuntando a la derecha:

>>>

Si juntas suficientes sentencias de Python, tendr´as un programa que podr´as


ejecutar m´as all´a de la consola... pero por el momento vamos a hacer lo m´as
simple, y teclear nuestras sentencias directamente en la consola, en el prompt
(>>>). As´ı que, por qu´e no comenzar tecleando lo siguiente:

print("Hola mundo")

Aseg´urate que incluyes las comillas (eso es, estas comillas: ” ”), y pulsa la
tecla Intro al finalizar la l´ınea. Si todo va bien ver´as en la pantalla algo como lo
siguiente:

>>> print("Hola mundo")


Hola mundo

El prompt reaparece, con el fin de hacerte saber que la consola de Python


est´a lista para aceptar m´as sentencias.
´
6 CAP ITULO 1. NO TODAS LAS SERPIENTES MUERDEN

¡Enhorabuena! Acabas de crear tu primer programa Python. print es una funci´on


que se encarga de escribir en la consola todo lo que se encuentre dentro de los
par´entesis–la utilizaremos repetidamente m´as adelante.
1.4. Tu segundo programa en Python. . .¿Otra vez lo
mismo?

Los programas en Python no ser´ıan nada ´utiles si tuvieras que teclear las
sentencias cada vez que quisieras hacer algo—o si escribieras programas para
alguien, y tuvieran que teclearlo cada vez antes de que pudieran usarlo. El
Procesador de Textos que uses para escribir las tareas del cole, tiene
probablemente entre 10 y 100 millones de l´ıneas de c´odigo (sentencias).
Dependiendo de cuantas l´ıneas imprimieras en una p´agina (y si las imprimes o
no por ambas caras del papel), esto supondr´ıa alrededor de 400.000 p´aginas en
papel... o una pila de papel de unos 40 metros de alto. Imag´ınate cuando tuvieras
que traer esta aplicaci´on a casa desde la tienda, habr´ıa que hacer unos cuantos
viajes con el coche, para llevar tantos papeles...
...y mejor que no sople el viento mientras transportas esas pilas de papel. Por
fortuna, existe una alternativa a tener que teclearlo todo cada vez—o nadie podr´ıa
hacer nada.
1.4. TU SEGUNDO PROGRAMA EN PYTHON...¿OTRA VEZ LO MISMO? 7

Abre el Block de Notas (Notepad) (Pulsa en el menú de Inicio, Todos los


Programas: deben´ıa estar en el submenú de Accesorios), y teclea la sentencia
print exactamente igual que lo hiciste antes en la consola:

print("Hola mundo")

Pulsa en el men´u Archivo (en el Block de Notas), luego Guardar, y cuando te


pregunte por qu´e nombre darle al fichero, ll´amalo hola.py y gr´abalo en tu
Escritorio. Haz doble click en el icono que aparece en el Escritorio con el nombre
hola.py (ver Figura 1.3) y durante un breve momento se mostrar´a una ventana con
la consola. Desaparecer´a demasiado r´apido como para ver lo que pone, pero lo
que se mos trar´a en pantalla en esas d´ecimas de segundo ser´a Hola mundo—
volveremos a esto m´as tarde para comprobar que es verdad lo que digo.
Como ves la gente que cre´o Python era gente decente, te ha librado de
tener que teclear lo mismo una y otra vez y otra vez y otra vez y otra vez. Como
pas´o en los a˜nos ochenta. No, lo digo en serio—lo hicieron. Ve y pregunta a tu
Padre si alguna vez tuvo un ZX81 cuando era m´as joven
´
8 CAP ITULO 1. NO TODAS LAS SERPIENTES MUERDEN

Figura 1.3: El icono hola.py en el Escritorio de Windows.

Si lo tuvo puedes se˜nalarle con el dedo y reirte.

Cr´eeme. No lo entender´as. Pero ´el s´ı.2


De todos modos, prep´arate para salir corriendo.

El Final del Comienzo


Bienvenido al maravilloso mundo de la Programaci´on. Hemos empezado
con una aplicaci´on sencillita ‘Hola mundo’—todo el mundo comienza con eso,
cuando empiezan a programar. En el siguiente cap´ıtulo comenzaremos a hacer
cosas m´as ´utiles con la consola de Python y empezaremos a ver lo que hace
falta para hacer un programa.

2
El Sinclair ZX81, vendido en la d´ecada de 1980 fue uno de los primeros ordenadores para el
hogar que se vend´ıa a un precio asequible. Un gran n´umero de j´ovenes se volvieron ‘locos’
tecleando el c´odigo de juegos que ven´ıan impresos en revistas sobre el ZX81—´unicamente para
descubrir, despu´es de horas de teclear, que esos malditos juegos nunca funcionaban bien.

Cap´ıtulo 2

8 multiplicado por 3.57 igual a. . .

¿Cu´anto es 8 multiplicado por 3.57? Tendr´ıas que utilizar una calculadora,


¿a que s´ı? Bueno, tal vez eres superlisto y puedes calcular con decimales
mentalmente— bueno, no es importante. Tambien puedes hacer el c´alculo con la
consola de Python. Inicia la consola de nuevo (mira el Cap´ıtulo 1 para m´as
informaci´on, si te lo hubieras saltado por alguna extra˜na raz´on), y cuando veas el prompt
en pantalla, teclea 8∗3.57 y pulsa la tecla Intro:

Python 3.0 (r30:67503, Dec 6 2008, 23:22:48)


Type "help", "copyright", "credits" or "license" for more information. >>> 8 * 3.57
28.559999999999999

La estrella (*), o tecla de asterico, se utiliza como s´ımbolo de multiplicaci´on,


en lugar del simbolo de multiplicar tradicional (X) que utilizas en el cole (es
necesario que utilices la tecla de estrella porque el ordenador no tendr´ıa forma de
distinguir si lo quer´ıas era teclear la letra x o el s´ımbolo de la multiplicaci´on X).
¿Qu´e te parece si probamos un c´alculo que sea un poco m´as ´util?
Sup´on que haces tus obligaciones de la casa una vez a la semana, y por
ello te dan 5 euros, y que haces de chico repartidor de peri´odicos 5 veces por
semana cobrando 30 euros—¿Cu´anto dinero podr´ıas ganar en un a˜no?
Si lo escribieramos en un papel, lo calcular´ıamos como sigue:

(5 + 30) x 52

9
´
10 CAP ITULO 2. 8 MULTIPLICADO POR 3.57 IGUAL A...
¿!¿!Python est´a roto!?!?
Si has probado a calcular 8 x 3.57 con una calculadora el
resultado que se muestra ser´a el siguiente:

28.56

¿Porqu´e el resultado de Python es diferente? ¿Est´a roto?

En realidad no. La raz´on de esta diferencia est´a en la


forma en que se hacen los c´alculos en el ordenador con los
n´umeros de coma flotante (Los n´umeros que tienen una
coma y decimales). Es algo complejo y que confunde a los
principiantes, por lo que es mejor que recuerdes
´unicamente que cuando est´as trabajan do con decimales,
a veces el resultado no ser´a exactamente el experado.
Esto puede pasar con las multiplicaciones, divisiones,
sumas y restas.

Es decir, 5 + 30 euros a la semana multiplicado por las 52 semanas del a˜no.


Desde luego, somos chicos listos por lo que sabemos que 5 + 30 es 35, por lo que
la f´ormula en realidad es:

35 x 52

Que es suficientemente sencilla como para hacerla con una calculadora o a


mano, con l´apiz y papel. Pero tambi´en podemos hacer todos los c´alculos con la
consola:
>>> (5 + 30) * 52
1820
>>> 35 * 52
1820

Veamos, ¿Qu´e pasar´ıa si te gastases 10 euros cada semana? ¿Cu´anto te


que dar´ıa a final de a˜no? En papel podemos escribir este c´alculo de varias
formas, pero vamos a teclearlo en la consola de Python:
11

>>> (5 + 30 - 10) * 52
1300

Son 5 m´as 30 euros menos 10 euros multiplicado por las 52 semanas que
tiene el a˜no. Te quedar´an 1300 euros a final de a˜no. Estupendo, pero a´un no es
que sea muy ´util lo que hemos visto. Todo se podr´ıa haber hecho con una
calculadora. Pero volveremos con este asunto m´as tarde para mostrarte como
hacer que sea mucho m´as ´util.
En la consola de Python puedes multiplicar y sumar (obvio), y restar y di vidir,
adem´as de un gran pu˜nado de otras operaciones matem´aticas que no vamos a
comentar ahora. Por el momento nos quedamos con los s´ımbolos b´asicos de ma
tem´aticas que se pueden usar en Python (en realidad, en este lenguaje, se les
llama operadores):
+ Suma

- Resta

* Multiplicaci´on

/ Divisi´on

La raz´on por la que se usa la barra inclinada hacia adelante (/) para la divisi
´on, es que ser´ıa muy dif´ıcil dibujar la l´ınea de la divisi´on como se supone que
lo haces en las f´ormulas escritas (adem´as de que ni se molestan en poner un s
´ımbolo de divisi´on ÷ en el teclado del ordenador). Por ejemplo, si tuvieras 100
huevos y 20 cajas, querr´ıas conocer cuantos huevos deber´ıas meter en cada
caja, por lo que tendr´ıas que dividir 100 entre 20, para lo que escribir´ıas la
siguiente f´ormula:
100
20
O si supieras como se escribe la divisi´on larga, lo har´ıas as´ı:

100 20
100 5
0

O incluso lo podr´ıas escribir de esta otra forma:

100 ÷ 20

Sin embargo, en Python tienes que escribirlo as´ı “100 / 20”.


Lo que es mucho m´as sencillo, o eso me parece a mi. Pero bueno, yo soy
un libro—¿Qu´e voy a saber yo?
´
12 CAP ITULO 2. 8 MULTIPLICADO POR 3.57 IGUAL A...

2.1. El uso de los par´entesis y el “Orden de las


Operaciones”
En los lenguajes de programaci´on se utilizan los par´entesis para controlar lo
que se conoce como el “Orden de las Operaciones”. Una operaci´on es cuando se
usa un operador (uno de los s´ımbolos de la tabla anterior). Hay m´as operadores
que esos s´ımbolos b´asicos, pero para esa lista (suma, resta, multiplicaci´on y
divisi´on), es suficiente con saber que la multiplicaci´on y la divisi´on tiene mayor
orden de prioridad que la suma y la resta. Esto significa que en una f´ormula, la
parte de la multiplicaci´on o la divisi´on se calcula antes que la parte de la suma y
resta. En la siguiente f´ormula, todos los operadores son sumas (+), en este caso
los n´umeros se suman en el orden que aparecen de izquierda a derecha:

>>> print(5 + 30 + 20)


55

De igual manera, en esta otra f´ormula, hay ´unicamente operadores de sumas y


restas, por lo que de nuevo Python considera cada n´umero en el orden en que
aparece:

>>> print(5 + 30 - 20)


15

Pero en la siguiente f´ormula, hay un operador de multiplicaci´on, por lo que los n


´umeros 30 y 20 se toman en primer lugar. Esta f´ormula lo que est´a diciendo es
“multiplica 30 por 20, y luego suma 5 al resultado” (se multiplica primero porque
tiene mayor orden que la suma):

>>> print(5 + 30 * 20)


605

¿Pero qu´e es lo que sucede cuando a˜nadimos par´entesis? La siguiente f´ormula


mues tra el resultado:

>>> print((5 + 30) * 20)


700

¿Por qu´e el n´umero es diferente? Porque los par´entesis controlan el orden de


las operaciones. Con los par´entesis, Python sabe que tiene que calcular primero
todos los operadores que est´an dentro de los par´entesis, y luego los de fuera.
Por eso lo que significa esta f´ormula es “suma 5 y 30 y luego multiplica el
resultado por 20”. El uso de los par´entesis puede volverse m´as complejo. Pueden
existir par´entesis dentro de par´entesis:
2.2. NO HAY NADA TAN VOLUBLE COMO UNA VARIABLE 13

>>> print(((5 + 30) * 20) / 10)


70

En este caso, Python calcula los par´entesis m´as internos primero, luego los ex
teriores, y al final el otro operador. Por eso esta f´ormula significa “suma 5 y 30,
luego multiplica el resultado por 20, y finalmente divide el resultado entre 10”. El
resultado sin los par´entesis ser´ıa ligeramente diferente:

>>> 5 + 30 * 20 / 10
65

En este caso se multiplica primero 30 por 20, luego el resultado se divide


entre 10, finalmente se suma 5 para obtener el resultado final.
Recuerda que la multiplicaci´on y la divisi´on siempre van antes que la suma
y la resta, a menos que se utilicen par´entesis para controlar el orden de las
operaciones.
2.2. No hay nada tan voluble como una variable
Una ‘variable’ es un t´ermino de programaci´on que se utiliza para describir
un sitio en el que almacenar cosas. Las ‘cosas’ pueden ser n´umeros, o textos, o
listas de n´umeros y textos—y toda clase de otros elementos demasiado
numerosos para profundizar aqu´ı. Por el momento, vamos a decir que una
variable algo as´ı como un buz´on o caja.
´
14 CAP ITULO 2. 8 MULTIPLICADO POR 3.57 IGUAL A...

De la misma forma en que puedes meter cosas (como una carta o un


paquete) en un un buz´on, puedes hacerlo con una variable, puedes meter cosas
(n´umeros, textos, listas de n´umeros y textos, etc, etc, etc) en ella. Con esta idea
de buz´on es con la que funcionan muchos lenguajes de programaci´on. Pero no
todos.
En Python, las variables son ligeramente diferentes. En lugar de ser un buz
´on con cosas dentro, una variable es m´as parecida a una etiqueta que pegas por
fuera de la caja o carta. Podemos despegar la etiqueta y pegarla en otra cosa, o
incluso atar la etiqueta (con un trozo de cuerda, tal vez) a m´as de una cosa. En
Python las variables se crean al darles un nombre, utilizando despu´es un s´ımbolo
de igual (=), y luego dici´endole a Python a qu´e cosa queremos que apunte este
nombre. Por ejemplo:

>>> fred = 100

Acabamos de crear una variable llamada ‘fred’ y le dijimos que apuntase al n


´umero 100. Lo que estamos haciendo es decirle a Python que recuerde ese n
´umero porque queremos usarlo m´as tarde. Para descubrir a qu´e est´a
apuntando una va riable, lo ´unico que tenemos que hacer es teclear ‘print’ en la
consola, seguido del nombre de la variable, y pulsar la tecla Intro. Por ejemplo:

>>> fred = 100


>>> print(fred)
100

Tambi´en le podemos decir a Python que queremos que la variable fred


apunte a otra cosa diferente:

>>> fred = 200


>>> print(fred)
200

En la primera l´ınea decimos que ahora queremos que fred apunte al n´umero 200.
Luego, en la segunda l´ınea, le pedimos a Python que nos diga a qu´e est´a
apuntando fred para comprobar que lo hemos cambiado (ya no apunta a 100).
Tambi´en podemos hacer que m´as de un nombre apunte a la misma cosa:

>>> fred = 200


>>> john = fred
>>> print(john)
200

En el c´odigo anterior estamos diciendo que queremos que el nombre (o


etiqueta) john apunte a la misma cosa a la que apunta fred. Desde luego, ‘fred’ no
es un nombre
2.3. UTILIZANDO VARIABLES 15

muy ´util para una variable. No nos dice nada sobre para qu´e se usa. Un buz´on
se sabe para lo que se usa—para el correo. Pero una variable puede tener
diferentes usos, y puede apuntar a muchas cosas diferentes entre s´ı, por lo que
normalmente queremos que su nombre sea m´as informativo.
Sup´on que iniciaste la consola de Python, tecleaste ‘fred = 200’, y despu´es
te fuiste—pasaste 10 a˜nos escalando el Monte Everest, cruzando el desierto del
Sahara, haciendo puenting desde un puente en Nueva Zelanda, y finalmente,
navegando por el rio Amazonas—cuando vuelves a tu ordenador, ¿podr´ıas
acordarte de lo que el n´umero 200 significaba (y para qu´e serv´ıa)?
Yo no creo que pudiera.
En realidad, acabo de usarlo y no tengo ni idea qu´e significa ‘fred=200’ (m´as all´a
de que sea un nombre apuntando a un n´umero 200 ). Por eso despu´es de 10
a˜nos, no tendr´as absolutamente ninguna oportunidad de acordarte.
¡Aj´a! Pero si llam´aramos a nuestra variable: numero de

estudiantes. >>> numero_de_estudiantes = 200

Podemos hacer esto porque los nombres de las variables pueden formarse
con letras, n´umeros y guiones bajos ( )—aunque no pueden comenzar por un n
´umero. Si vuelves despu´es de 10 a˜nos, ‘numero de estudiantes’ a´un tendr´a
sentido para ti. Puedes teclear:

>>> print(numero_de_estudiantes)
200

E inmediatamente sabr´as que estamos hablando de 200 estudiantes. No siempre


es importante que los nombres de las variables tengan significado. Puedes usar
cualquier cosa desde letras sueltas (como la ‘a’) hasta largas frases; y en
ocasiones, si vas a hacer algo r´apido, un nombre simple y r´apido para una
variable es suficientemente ´util. Depende mucho de si vas a querer usar ese
nombre de la variable m´as tarde y recordar por el nombre en qu´e estabas
pensando cuando la tecleaste.

este_tambien_es_un_nombre_valido_de_variable_pero_no_muy_util

2.3. Utilizando variables


Ya conocemos como crear una variable, ahora ¿C´omo la usamos?
¿Recuerdas la f´ormula que preparamos antes? Aquella que nos serv´ıa para
conocer cu´anto dinero
´
16 CAP ITULO 2. 8 MULTIPLICADO POR 3.57 IGUAL A...

tendr´ıamos al final de a˜no, si ganabas 5 euros a la semana haciendo tareas, 30


euros a la semana repartiendo peri´odicos, y gastabas 10 euros por semana. Por
ahora tenemos:

>>> print((5 + 30 - 10) * 52)


1300

¿Qu´e pasar´ıa si convertimos los tres primeros n´umeros en variables? Intenta


teclear lo siguiente:

>>> tareas = 5
>>> repartir_periodicos = 30
>>> gastos = 10

Acabamos de crear unas variables llamadas ‘tareas’, ‘repartir periodicos’ y ‘gastos’.


Ahora podemos volver a teclear la f´ormula de la siguiente forma:

>>> print((tareas + repartir_periodicos - gastos) * 52)


1300

Lo que nos da exactamente la misma respuesta. Pero qu´e suceder´ıa si eres


capaz de conseguir 2 euros m´as por semana, por hacer tareas extra. Solamente
tienes que cambiar la variable ‘tareas’ a 7, luego pulsar la tecla de flecha para
arriba (↑) en el teclado varias veces, hasta que vuelva a aparecer la f´ormula en el
prompt, y pulsar la tecla Intro:

>>> tareas = 7 cal


>>> print((tareas + repartir_periodicos - gastos) * 52)
1404

As´ı hay que teclear mucho menos para descubrir que a final de a˜no vas a
tener 1404 euros. Puedes probar a cambiar las otras variables, y luego pulsar la
tecla de flecha hacia arriba para que se vuelva a ejecutar el c´alculo y ver qu´e
resultado se obtiene.

Si gastases el doble por semana:


>>> gastos = 20
>>> print((tareas + repartir_periodicos - gastos) * 52)
884

Solamente te quedar´an 884 euros al final de a˜no. Por ahora esto es un


poco m´as util, pero no mucho. No hemos llegado a nada realmente ´util a´un. Pero
por el momento es suficiente para comprender que las variables sirven para
almacenar cosas.
¡Piensa en un buz´on con una etiqueta en ´el!
2.4. ¿UN TROZO DE TEXTO? 17 2.4. ¿Un trozo de texto?

Si has estado prestando atenci´on, y no ´unicamente leyendo por encima el


tex to, recordar´as que he mencionado que las variables se pueden utilizar para
varias cosas—no ´unicamente para los n´umeros. En programaci´on, la mayor
parte del tiempo llamamos a los textos ‘cadenas de caracteres’. Esto puede
parecer un poco extra˜no; pero si piensas que un texto es como un
‘encadenamiento de letras’ (poner juntas las letras), entonces quiz´a tenga un poco
m´as de sentido para ti.
Si bueno, quiz´as no tenga tanto sentido.
En cualquier caso, lo que tienes que saber es que una cadena es solamente
un pu˜nado de letras y n´umeros y otros s´ımbolos que se juntan de forma que
signifique algo. Todas las letras, n´umeros y s´ımbolos de este libro podr´ıan
considerarse que forman una cadena. Tu nombre podr´ıa considerarse una
cadena. Como podr´ıa serlo la direcci´on de tu casa. El primer programa Python
que creamos en el Cap´ıtulo 1, utilizaba una cadena: ‘Hola mundo’.
En Python, creamos una cadena poniendo comillas alrededor del texto.
Ahora podemos tomar nuestra, hasta ahora in´util, variable fred, y asignarle una
cadena de la siguiente forma:

>>> fred = "esto es una cadena"

Ahora podemos mirar lo que contiene la variable fred, tecleando print(fred):

>>> print(fred)
esto es una cadena

Tambi´en podemos utilizar comillas simples para crear una cadena:

>>> fred = ’esto es otra cadena’


>>> print(fred)
esto es otra cadena

Sin embargo, si intentas teclear m´as de una l´ınea de texto en tu cadena uti
lizando comillas simple (’) o comillas dobles (”), ver´as un mensaje de error en la
consola. Por ejemplo, teclea la siguiente l´ınea y pulsa Intro, y saldr´a en pantalla
un mensaje de error similar a esto:

>>> fred = "esta cadena tiene dos


File "<stdin>", line 1
fred = "esta cadena tiene dos
^
SyntaxError: EOL while scanning string literal
´
18 CAP ITULO 2. 8 MULTIPLICADO POR 3.57 IGUAL A...

Hablaremos de los errores m´as tarde, pero por el momento, si quieres


escribir m´as de una l´ınea de texto, recuerda que tienes que usar 3 comillas
simples:

>>> fred = ’’’esta cadena tiene dos


... l´ıneas de texto’’’

Imprime el contenido de la variable para ver si ha funcionado:

>>> print(fred)
esta cadena tiene dos
l´ıneas de texto

Por cierto, ver´as que salen 3 puntos (...) siempre que tecleas algo que
continua en otra l´ınea (como sucede en una cadena que ocupa m´as de una l
´ınea). De hecho, lo ver´as m´as veces seg´un avanzemos en el libro.

2.5. Trucos para las cadenas


He aqu´ı una interesante pregunta: ¿Cu´anto es 10 * 5 (10 veces 5)? La
respuesta es, por supuesto, 50.
De acuerdo, para nada es una pregunta interesante.
Pero ¿Cu´anto es 10 * ’a’ (10 veces la letra a)? Podr´ıa parecer una pregunta
sin sentido, pero hay una respuesta para ella en el Mundo de Python:

>>> print(10 * ’a’)


aaaaaaaaaa

Tambi´en funciona con cadenas de m´as de un car´acter:

>>> print(20 * ’abcd’)


abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd

Otro truco con cadenas consiste en incrustar valores. Para ello puedes usar
%s, que funciona como marcador o espacio reservado para el valor que quieras
incluir en la cadena. Es m´as f´acil de explicar con un ejemplo:

>>> mitexto = ’Tengo %s a~nos’


>>> print(mitexto % 12)
Tengo 12 a~nos

En la primera l´ınea, creamos la variable mitexto con una cadena que


contiene algunas palabras y un marcador ( %s). El %s es una especie de se˜nal
que le dice
2.6. NO ES LA LISTA DE LA COMPRA 19

“sustit´uyeme con algo” a la consola de Python. As´ı que en la siguiente l´ınea,


cuando ejecutamos print(mitexto), usamos el s´ımbolo %, para decirle a Python
que reempla ce el marcador con el n´umero 12. Podemos reutilizar esa cadena y
pasarle diferentes valores:

>>> mitexto = ’Hola %s, ¿C´omo est´as hoy?’


>>> nombre1 = ’Joe’
>>> nombre2 = ’Jane’
>>> print(mitexto % nombre1)
Hola Joe, ¿C´omo est´as hoy?
>>> print(mitexto % nombre2)
Hola Jane, ¿C´omo est´as hoy?

En el ejemplo anterior, hemos creado 3 variables (mitexto, nombre1 y nombre2)


— la primera almacena la cadena con el marcador. Por ello, podemos imprimir la
varia ble ‘mitexto’, y utilizando el operador % pasarle el valor almacenado en las
variables ‘nombre1’ y ‘nombre2’. Puedes usar m´as de un marcador:

>>> mitexto = ’Hola %s y %s, ¿C´omo est´ais hoy?’


>>> print(mitexto % (nombre1, nombre2))
Hola Joe y Jane, ¿C´omo est´ais hoy?

Cuando utilizas m´as de un marcador, necesitas que los valores que se usan
para reemplazar las marcas se encuentren entre par´entesis—As´ı que el modo
correcto de pasar 2 variables es (nombre1, nombre2). En Python a un conjunto de
valores rodeados de par´entesis se le llama tupla, y es algo parecido a una lista, de
las que hablaremos a continuaci´on.

2.6. No es la lista de la compra


Huevos, leche, queso, apio, manteca de cahauetes, y levadura. Esto no es
una lista de la compra completa, pero nos sirve para nuestros prop´ositos. Si
quisieras almacenar esto en una variable podr´ıas pensar en crear una cadena:

>>> lista_de_la_compra = ’huevos, leche, queso, apio, manteca de cacahuetes, levadura’ >>>
print(lista_de_la_compra)
huevos, leche, queso, apio, manteca de cacahuetes, levadura

Otro modo de hacerlo ser´ıa crear una ‘lista’, que es una clase especial de
objetos de Python:
´
20 CAP ITULO 2. 8 MULTIPLICADO POR 3.57 IGUAL A...

>>> lista_de_la_compra = [ ’huevos’, ’leche’, ’queso’, ’apio’, ’manteca de cacahuetes’, ...’levadura’ ]


>>> print(lista_de_la_compra)
[’huevos’, ’leche’, ’queso’, ’apio’, ’manteca de cacahuetes’, ’levadura’]

Aunque supone teclear m´as, tambi´en es m´as ´util. Podr´ıamos imprimir el


tercer elemento en la lista utilizando su posici´on (al n´umero que refleja la posici
´on de un elemento se le denomina ´ındice), dentro de unos corchetes []:

>>> print(lista_de_la_compra[2])
queso

Las listas comienzan a contarse en la posici´on con n´umero de ´ındice 0—es


decir, el primer elemento de una lista es el 0, el segundo es el 1, el tercero es el 2.
Esto no tiene mucho sentido para la mayor´ıa de la gente, pero lo tiene para los
programadores. Muy pronto te acostumbrar´as y cuando est´es subiendo unas
escaleras, comenzar´as a contar los escalones desde cero en lugar que
comenzando desde uno. Lo que despistar´a a tu hermano o hermana peque˜na.
Tambi´en podemos seleccionar todos los elementos que van desde el tercero
al quinto de la lista, para ello utilizamos el s´ımbolo de los dos puntos dentro de los
corchetes:

>>> print(lista_de_la_compra[2:5])
[’queso’, ’apio’, ’manteca de cacahuetes’]
[2:5] es lo mismo que decir que estamos interesados en los elementos que
van desde la posici´on de ´ındice 2 hasta (pero sin incluirla) la posici´on de ´ındice
5. Y desde luego, como comenzamos a contar con el cero, el tercer elemento en la
lista es el n´umero 2, y el quinto es el n´umero 4. Las listas se pueden utilizar para
almacenar toda clase de objetos. Pueden almacenar n´umeros:

>>> milista = [ 1, 2, 5, 10, 20 ]

Y cadenas:

>>> milista = [ ’a’, ’bbb’, ’ccccccc’, ’ddddddddd’ ]

Y mezcla de n´umeros y cadenas:


2.6. NO ES LA LISTA DE LA COMPRA 21

>>> milista = [1, 2, ’a’, ’bbb’]


>>> print(milista)
[1, 2, ’a’, ’bbb’]

E incluso listas de listas:

>>> lista1 = [ ’a’, ’b’, ’c’ ]


>>> lista2 = [ 1, 2, 3 ]
>>> milista = [ lista1, lista2 ]
>>> print(milista)
[[’a’, ’b’, ’c’], [1, 2, 3]]

En el ejemplo anterior se crea la variable ‘lista1’ para contener 3 letras, la


lista ‘lista2’ se crea con 3 n´umeros, y ‘milista’ se crea utilizando a las variables
lista1 y lista2. Como ves, las cosas se complican r´apidamente cuando empiezas a
crear listas de listas de listas de listas... pero afortunadamente normalmente no
hay ninguna necesidad de complicarlo tanto en Python. De todos modos sigue
siendo ´util conocer que puedes almacenar toda clase de elementos en una lista
de Python.
Y no ´unicamente para hacer la compra.

Sustituyendo elementos
Podemos reemplazar un elemento en la lista asign´andole un valor de la
misma forma en que se hace con una variable corriente. Por ejemplo, podr´ıamos
cambiar el apio por lechuga asignando el valor nuevo a la posici´on de ´ındice 3:

>>> lista_de_la_compra[3] = ’lechuga’


>>> print(lista_de_la_compra)
[’huevos’, ’leche’, ’queso’, ’lechuga’, ’manteca de cacahuetes’, ’levadura’]

A˜nadiendo m´as elementos...


Podemos a˜nadir elementos a una lista utilizando el m´etodo denominado ‘ap
pend’ (que en ingl´es significa ‘a˜nadir’). Un m´etodo es una acci´on u orden que le
dice a Python que queremos que haga algo. M´as tarde hablaremos m´as de ellos,
por el momento, recuerda que para a˜nadir un elemento a nuestra lista de la
compra, podemos hacer lo siguiente:

>>> lista_de_la_compra.append(’chocolate’)
>>> print(lista_de_la_compra)
[’huevos’, ’leche’, ’queso’, ’lechuga’, ’manteca de cacahuetes’, ’levadura’, ’chocolate’] Al menos ahora s´ı

que hemos mejorado la lista de la compra.


´
22 CAP ITULO 2. 8 MULTIPLICADO POR 3.57 IGUAL A... . . . y suprimiendo

elementos
Podemos quitar elementos de una lista mediante el uso de la orden ‘del’ (que
es una forma corta de escribir delete, que en ingl´es significa ‘borrar’). Por ejemplo,
para eliminar el sexto elemento de la lista (levadura) podemos escribir:

>>> del lista_de_la_compra[5]


>>> print(lista_de_la_compra)
[’huevos’, ’leche’, ’queso’, ’lechuga’, ’manteca de cacahuetes’, ’chocolate’]

Recuerda que las posiciones comienzan a contar desde cero, por lo que lis ta
de la compra[5] se refiere en realidad al sexto elemento.

2 listas mejor que 1


Podemos unir listas mediante el operador de suma, como si estuvieramos su
mando dos n´umeros:

>>> lista1 = [ 1, 2, 3 ]
>>> lista2 = [ 4, 5, 6 ]
>>> print(lista1 + lista2)
[1, 2, 3, 4, 5, 6]

Tambi´en podemos juntar las dos listas y asignar la lista resultante a otra variable:

>>> lista1 = [ 1, 2, 3 ]
>>> lista2 = [ 4, 5, 6 ]
>>> lista3 = lista1 + lista2
>>> print(lista3)
[1, 2, 3, 4, 5, 6]

Y puedes multiplicar una lista de la misma forma que multiplicamos una cadena
(recuerda que la multiplicaci´on de una cadena por un n´umero lo que hace es
crear una cadena que repite tantas veces la original como el n´umero por el que
multiplicas):

>>> lista1 = [ 1, 2 ]
>>> print(lista1 * 5)
[1, 2, 1, 2, 1, 2, 1, 2, 1, 2]

En el ejemplo anterior multiplicar lista1 por cinco lo que significa es “repite la lista1
cinco veces”. Sin embargo, no tiene sentido utilizar la divisi´on (/) ni la resta (- )
cuando estamos trabajando con listas, por eso Python mostrar´a errores cuando
intentas ejecutar los siguientes ejemplos:
2.7. TUPLAS Y LISTAS 23

>>> lista1 / 20
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for /: ’list’ and ’int’ o:

>>> lista1 - 20
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for -: ’type’ and ’int’ El resultado

ser´a un mensaje de error bastante feo.


2.7. Tuplas y Listas
Una tupla (mencionada anteriormente) es una cosa parecida a una lista, la
diferencia es que en lugar de utilizar corchetes, utilizas par´entesis—por ejemplo ‘(’
y ‘)’. Las tuplas funcionan de forma similar a las listas:

>>> t = (1, 2, 3)
>>> print(t[1])
2

La diferencia principal es que, a diferencia de las listas, las tuplas no se


pueden modificar despu´es de haberlas creado. Por eso si intentas reemplazar un
valor como hicimos antes en la lista, lo que hace Python es dar un mensaje de
error.

>>> t[0] = 4
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: ’tuple’ object does not support item assignment

Eso no significa que no puedas cambiar el contenido de la variable para que


en lugar de contener a la tupla, contenga otra cosa. Este c´odigo funcionar´a sin
problemas:

>>> mivar = (1, 2, 3)


>>> mivar = [ ’una’, ’lista’, ’de’, ’cadenas’ ]

En primer lugar hemos creado la variable mivar que apunta a una tupla com
puesta por 3 n´umeros. Luego modificamos mivar para que apunte a una lista de
´
24 CAP ITULO 2. 8 MULTIPLICADO POR 3.57 IGUAL A...

cadenas. Al principio te puede resultar algo confuso. Pero trata de pensar en las
taquillas del gimnasio o del colegio, cada taquilla est´a etiquetada con un nombre.
Pones cualquier cosa en la taquilla, cierras la puerta con llave y despu´es la tiras.
Entonces le arrancas la etiqueta y te vas a otra taquilla vac´ıa, le pones la etiqueta
que te llevaste y metes algo dentro (pero esta vez te quedas con la llave). Una
tupla es como una taquilla cerrada. No puedes modificar lo que hay dentro. Pero
puedes llevarte la etiqueta (la variable) y y pegarla en otra taquilla abierta, y
entonces puedes poner cosas dentro de ella y sacar cosas de ella—as´ı son las
listas.

2.8. Cosas que puedes probar


En este cap´ıtulo hemos visto c´omo hacer c´alculos con f´ormulas matem
´aticas simples utilizando la consola de Python. Tambi´en hemos visto c´omo los
par´entesis pueden modificar el resultado de una f´ormula, al controlar el orden en
que se calculan las operaciones. Hemos aprendido c´omo decirle a Python que
recuerde valores para usarlos m´as tarde—utilizando variables—adem´as de
aprender a usar las ‘cadenas’ de Python para almacenar textos, y c´omo usar las
listas y las tuplas para almacenar m´as de un elemento.

Ejercicio 1
Crea una lista de tus juguetes favoritos y ll´amala juguetes. Crea una lista de
tus comidas favoritas y ll´amala comidas. Une las dos listas y llama al resultado
favoritos. Finalmente imprime la variable favoritos.
Ejercicio 2
Si tienes 3 cajas que contienen 25 chocolates cada una, y 10 bolsas que con
tienen 32 caramelos cada una, ¿cu´antos dulces y chocolates tienes en total?
(Nota: puedes calcularlo con una f´ormula en la consola de Python)

Ejercicio 3
Crea variables para almacenar tu nombre y tus apellidos. Despu´es crea una
cadena con un texto que quieras e incluye marcadores para a˜nadir tu nombre y
apellidos. Imprime el resultado para verlo en la consola de Python.

Cap´ıtulo 3

Tortugas, y otras criaturas lentas

Hay ciertas similitudes entre las tortugas del mundo real y una tortuga
Python. En el mundo real, la tortuga es un reptil verde (a veces) que se mueve
muy lentamente y lleva la casa a su espalda. En el mundo de Python, una tortuga
es una flecha negra y peque˜na que se mueve lentamente en la pantalla. Aunque
no lleva ninguna casa a cuestas.
De hecho, al considerar que una tortuga de Python va dejando un rastro seg
´un se mueve por la pantalla, a´un es menos parecida a una tortuga de la vida real,
por lo que se parece m´as a un caracol o a una babosa. Sin embargo, supongo
que un m´odulo que se denominara ‘babosa’ no hubiera sido especiamente
atractivo, por lo que tiene sentido que sigamos pensando en tortugas. Unicamente

tienes que imaginar que la ´ tortuga lleva consigo un par de rotuladores, y va


dibujando por el suelo seg´un se mueve.
En el oscuro, profundo y distante pasado, exist´ıa un simple lenguaje de pro
gramaci´on llamado Logo. Logo se utilizaba para controlar a una tortuga robot (que
se llamaba Irving, por cierto). Pasado el tiempo, la tortuga evolucion´o de ser un
robot que se pod´ıa mover por el suelo, a una peque˜na flecha que se mov´ıa por
la pantalla.
Lo que demuestra que las cosas no siempre mejoran con el avance de la
tecno log´ıa—un peque˜no robot tortuga ser´ıa mucho m´as divertido.
El m´odulo de Python llamado turtle1(volveremos a hablar de los m´odulos m
´as adelante, pero por ahora imagina que un m´odulo es algo que podemos usar
dentro de un programa) es parecido al lenguaje de programaci´on Logo, pero
mientras Logo era (y es) un poco limitado, Python sirve para muchas m´as cosas.
El m´odulo turtle

1
‘turtle’ en ingl´es significa ‘tortuga’. Los nombres de m´odulos de Python no se pueden traducir y
deben escribirse en la consola sin equivocar ninguna letra

25
´
26 CAP ITULO 3. TORTUGAS, Y OTRAS CRIATURAS LENTAS

nos vale para aprender de forma sencilla c´omo los ordenadores hacer dibujos en
la pantalla de tu ordenador.
Comencemos y veamos como funcina. El primer paso es decirle a Python
que queremos usar el m´odulo ‘turtle’, para ello hay que “importar” el m´odulo:
>>> import turtle

Lo siguiente que necesitamos hacer es mostrar un lienzo sobre el que


dibujar. Un lienzo es una base de tela que los artistas usan para pintar; en este
caso es un espacio en blanco en la pantalla sobre el que podemos dibujar:

>>> t = turtle.Pen()

En este c´odigo, ejecutamos una funci´on especial (Pen) del m´odulo turtle.
Lo que sirve para crear un lienzo sobre el que dibujar. Una funci´on es un trozo de
c´odigo que podemos reutilizar (como con los m´odulos, volveremos con las
funciones m´as tarde) para hacer algo ´util tantas veces como necesitemos—en
este caso, la funci´on Pen crea el lienzo y devuelve un objeto que representa a una
tortuga—asignamos el objeto a la variable ‘t’ (en efecto, le estamos dando a
nuestra tortuga el nombre ‘t’). Cuando teclees el c´odigo en la consola de Python,
ver´as que aparece en pantalla una caja blanca (el lienzo) que se parece a la de la
figura 3.1.
S´ı, esa peque˜na flecha en medio de la pantalla es la tortuga. Y, no, si lo est
´as pensando tienes raz´on, no se parece mucho a una tortuga.
Puedes darle ´ordenes a la tortuga utilizando funciones del objeto que
acabas de crear (cuando ejecutaste turtle.Pen())—puesto que asignamos el objeto
a la variable t, utilizaremos t para dar las ´ordenes. Una orden que podemos dar a
la tortua es forward2. Decirle forward a la tortuga supone darle la orden para que se
mueva hacia adelante en la direcci´on en que ella est´e mirando (No tengo ni idea
si es una tortuga chico o chica. Vamos a pensar que es una chica). Vamos a
decirle a la tortuga que se mueva hacia adelante 50 pixels (hablaremos sobre lo
que son en un minuto):

>>> t.forward(50)

Deber´ıas ver en tu pantalla algo parecido a la figura 3.2.


Desde el punto de vista de ella, se ha movido hacia adelante 50 pasos.
Desde nuestro punto de vista, se ha movido 50 pixels.
Pero, ¿Qu´e es un pixel?
2
‘forward’ significa ‘adelante’ en ingl´es
27

Figura 3.1: Una flecha que representa a la tortuga.


Figura 3.2: La tortuga dibuja una l´ınea.
´
28 CAP ITULO 3. TORTUGAS, Y OTRAS CRIATURAS LENTAS

Figura 3.3: Ampliando la l´ınea y la flecha.

Un pixel es un punto de la pantalla.


En la pantalla del ordenador todo lo que aparece est´a formado por
peque˜nos puntos (cuadrados). Los programas que usas y los juegos a los que
sueles jugar en el ordenador, o en una Playstation, o una Xbox, o una Wii; todos se
muestran a base de un gran pu˜nado de puntos de diferentes colores organizados
en la pantalla. De hecho, si la observaras con una lupa, ser´ıas capaz de verlos.
Por eso si mir´asemos con la lupa en el lienzo para ver la l´ınea que acaba de
dibujar la tortuga observar´ıamos que est´a formada por 50 puntos. Tambi´en podr
´ıamos ver que la flecha que representa la tortuga est´a formada por puntos
cuadrados, como se puede ver en la figura 3.3.
Hablaremos m´as sobre los puntos o pixels, en un cap´ıtulo posterior.
Lo siguiente que vamos a hacer es decirle a la tortuga que se gire a la
izquierda o derecha:

>>> t.left(90)

Esta orden le dice a la tortuga que se gire a la izquierda 90 grados. Puede


que no hayas estudiado a´un los grados en el cole, as´ı que te explico que la forma
m´as f´acil de pensar en ellos, es que son como si dividieramos la circunferencia
de un reloj como vemos en la figura 3.4.
La diferencia con un reloj, es que en lugar de hacer 12 partes (o 60, si
cuentas minutos en lugar de horas), es que se hacen 360 divisiones o partes de la
circunfe rencia. Por eso, si divides la circunferencia de un reloj en 360 divisiones,
obtienes 90 divisiones en el trozo en el que normalmente hay 3, 180 en donde
normalmente hay 6 y 270 en donde normalmente hay 9; y el 0 estar´ıa en la parte
de arriba (en el comienzo), donde normalmente est´a el n´umero de las 12 horas.
La figura 3.5 te muestra las divisiones en grados de la circunferencia.
Visto esto, ¿Qu´e es lo que realmente significa que le des a la tortuga la
orden left(90)?
Si est´as de pie mirando en una direcci´on y extiendes el brazo hacia el lado
directamente desde el hombro, ESO son 90 grados. Si apuntas con el brazo
izquierdo,
29

Figura 3.4: Las ‘divisiones’ en un reloj.

Figura 3.5: Grados.


´
30 CAP ITULO 3. TORTUGAS, Y OTRAS CRIATURAS LENTAS
Figura 3.6: La tortuga despu´es de girar a la izquierda.

ser´an 90 grados hacia la izquierda. Si apuntas con con el brazo derecho, ser´an
90 grados a la derecha. Cuando la tortuga de Python se gira a la izquierda, planta
su nariz en un punto y luego gira todo el cuerpo para volver la cara a hacia la
nueva direcci´on (lo mismo que si te volvieras t´u hacia donde apuntas con el
brazo). Por eso el c´odigo t.left(90) da lugar a que la flecha apunte ahora hacia
arriba, como se muestra en la figura 3.6.
Vamos a probar las mismas ´ordenes de nuevo algunas veces m´as:

>>> t.forward(50)
>>> t.left(90)
>>> t.forward(50)
>>> t.left(90)
>>> t.forward(50)
>>> t.left(90)

Nuestra tortuga ha dibujado un cuadrado y est´a a la izquierda mirando en la


misma direcci´on en la que comenz´o (ver figura 3.7).
Podemos borrar lo que est´a dibujado en el lienzo con la orden

clear3: >>> t.clear()

Existen algunas otras funciones b´asicas que puedes utilizar con tu tortuga:
3
En ingl´es ‘clear’ significa ‘limpiar’

31

Figura 3.7: Dibujando un cuadrado.

reset4, que tambi´en sirve para limpiar la pantalla pero que adem´as vuelve a poner
a la tortuga en su posici´on de comienzo; backward 5, que mueve la tortuga hacia
atr´as; right, que hace girar a la tortuga a la derecha; up 6(para de dibujar) que le
dice a la tortuga que pare de dibujar cuando se mueve (en otras palabras, levanta
el rotulador del lienzo); y finalmente down 7(comienza a dibujar) lo que sirve para
decirle a la tortuga que vuelva a dibujar. Puedes utilizar estas funciones de la
misma forma que las otras:

>>> t.reset()
>>> t.backward(100)
>>> t.right(90)
>>> t.up()
>>> t.down()
Volveremos al m´odulo turtle en breve.

4
En ingl´es ‘reset’ significa ‘reiniciar’
5
En ingl´es ‘backward’ significa ‘hacia atr´as’
6
En ingl´es ‘up’ significa ‘arriba’
7
En ingl´es ‘down’ significa ‘abajo’
´
32 CAP ITULO 3. TORTUGAS, Y OTRAS CRIATURAS LENTAS 3.1. Cosas
que puedes probar

En este cap´ıtulo hemos visto como utilizar el m´odulo turtle para dibujar
lineas simple utiliando giros a la izquierda y a la derecha. Hemos visto que la
tortuga utilizar grados como unidad de giro, y que son algo similar a las divisiones
de los minutos en un reloj.

Ejercicio 1
Crea un lienzo utilizando la funci´on Pen del m´odulo turtle, y luego dibuja un
rect´angulo.

Ejercicio 2
Crea otro lienzo utilizando la funci´on Pen del m´odulo turtle, y despu´es
dibuja un tri´angulo. (Es m´as complicado de lo que parece)

Cap´ıtulo 4

C´omo preguntar

En t´erminos de programaci´on, una pregunta normalmente significa que que


remos hacer o una cosa u otra, dependiendo de la respuesta a la pregunta. A la
sentencia que permite esto se la denomina sentencia if 1. Por ejemplo:

¿Qu´e edad tienes? Si eres mayor de 20 a˜nos, ¡eres demasiado

viejo! Esto podr´ıa escribirse en Python con la siguiente sentencia if:

if edad > 20:


print(’¡Eres demasiado viejo!’)

Un sentencia if se compone de un ‘if’ seguido una ’condici´on’ (explicaremos


lo que es una condici´on en breve), seguido de dos puntos (:). Las l´ıneas
siguientes deben formar un bloque—y si la respuesta a la condici´on es ‘s´ı’ (En t
´erminos de programaci´on decimos que si la respuesta a la condici´on es True 2)
se ejecutar´an las sentencias del bloque.
En la figura 4.1 se muestra el flujo de ejecuci´on del ejemplo anterior. las l
´ıneas gruesas cont´ınuas muestran lo que se ejecuta, las l´ıneas discont´ınuas
muestran ca minos posibles que en este ejemplo no se ejecutan. En este cap´ıtulo
se mostrar´an m´as diagramas como el de la figura para tratar de explicarte de
forma gr´afica, con caminos que son como calles, c´omo se ejecutan los ejemplos.
Presta mucha atenci´on a este primer ejemplo y no avances hasta que lo entiendas
bien.
Una condici´on es un c´alculo de programaci´on cuyo resultado es ‘S´ı’ (True)
o ‘No’ (False). Hay ciertos s´ımbolos (u operadores) que se utilizan para crear
condi ciones, como son:
1
En ingl´es ‘if’ significa ‘si’
2
En ingl´es ‘True’ significa ‘Verdadero’

33
´
34 CAP ITULO 4. COMO PREGUNTAR ´

Si edad > 20 NO print("¡Eres demasiado viejo!")

SI

Figura 4.1: Diagrama de ejecuci´on de la sentencia if


== igual

!= no igual o distinto de

> mayor que

< menor que

>= mayor o igual que

<= menor o igual que

Por ejemplo, si tienes 10 a˜nos, entonces la condici´on tu edad == 10 tendr´ıa


como resultado True (S´ı), pero si no tienes 10 a˜nos, devolver´ıa False (No).
Recuerda: no confundas los dos s´ımbolos de igual (==) utilizados para las
condiciones, con el s´ımbolo de igual utilizado para asignar valores (=)—si utilizas
un ´unico s´ımbolo = en una condici´on, Python devolver´a un mensaje de error.
Si asumimos que asignas tu edad a la variable edad, entonces si tienes 12
a˜nos, la condici´on...

edad > 10

... dar´ıa como resultado el valor True. Si tuvieras 8 a˜nos, el resultado ser´ıa
False. Si tuvieras 10 a˜nos, el resultado tambi´en seguir´ıa siendo False—porque
la condici´on comprueba que sea mayor que (>) 10, y no mayor o igual (>=) que
10.

edad = 10 Si edad > 10 NO SI


print("llegué aquí") 35

Figura 4.2: Otro flujo de ejecuci´on de una sentencia if.

Vamos a probar varios ejemplos:

>>> edad = 10
>>> if edad > 10:
... print(’llegu´e aqu´ı’)

Si teclearas el ejemplo anterior en la consola, ¿Qu´e suceder´ıa?


Nada.
El valor de la variable edad no es mayor que 10, por eso el bloque interior a la
sentencia if (la sentencia print) no se ejecutar´a. Se puede observar lo que sudece
en la figura 4.2
Y qu´e pasar´a con el siguiente ejemplo:
´
36 CAP ITULO 4. COMO PREGUNTAR ´ edad = 10

Si edad >= 10 NO print("llegué aquí")

SI
Figura 4.3: Otro flujo de ejecuci´on del ejemplo anterior.

>>> edad = 10
>>> if edad >= 10:
... print(’llegu´e aqu´ı’)

Si pruebas este ejemplo en la consola, entonces deber´ıas ver el mensaje ‘lle


gu´e aqu´ı’ impreso en la consola. La figura 4.3 muestra la ejecuci´on.
Lo mismo suceder´a con el siguiente ejemplo:

>>> edad = 10
>>> if edad == 10:
... print(’llegu´e aqu´ı’)
llegu´e aqu´ı

Que se muestra en la figura 4.4.

edad = 10 SI

Si edad == 10 NO
print("llegué aquí")

37

Figura 4.4: Otro flujo m´as.


´
38 CAP ITULO 4. COMO PREGUNTAR ´ 4.1. Haz esto. . . o ¡¡¡SI
NO!!!

Podemos extender una sentencia if, para que haga algo cuando una condici
´on no sea verdadera. Por ejemplo, imprimir la palabra ‘Hola’ en la consola si tu
edad es de 12 a˜nos, pero imprimir ‘Adi´os’ si no lo es. Para hacer esto, utilizamos
una sentencia if-then-else (es una forma de decir “si algo es verdad, entonces haz
esto, en caso contrario haz esto otro”):

>>> edad = 12
>>> if edad == 12:
... print(’Hola’)
... else:
... print(’Adi´os’)
Hola

Teclea el ejemplo anterior y ver´as la palabra ‘Hola’ en la consola. El


diagrama de ejecuci´on de este ejemplo es como se muestra en la figura 4.5.
Cambia el valor de la variable edad a otro n´umero y ver´as que se imprime
la palabra ‘Adi´os’:

>>> edad = 8
>>> if edad == 12:
... print(’Hola’)
... else:
... print(’Adi´os’)

Adi´os

Ahora la edad no es 12 por lo que la ejecuci´on var´ıa. El digrama de la figura


4.6 muestra que la ejecuci´on ahora es diferente al de la figura 4.5.

4.2. Haz esto. . . o haz esto. . . o haz esto. . . o ¡¡¡SI


NO!!!
Podemos extender a´un m´as la sentencia if utilizando elif (contracci´on de
else if). Por ejemplo, podemos preguntar si tu edad es 10, o si es 11, o si es 12 y
as´ı cuanto queramos:
4.2. HAZ ESTO... O HAZ ESTO... O HAZ ESTO... O ¡¡¡SI NO!!! 39

edad = 12

NO (else)
SI
Si edad == 12
print("Adiós") print("Hola")

Figura 4.5: Flujo de ejecuci´on de una setencia if-else.


´
40 CAP ITULO 4. COMO PREGUNTAR ´

edad = 8

NO (else)
SI
Si edad == 12

print("Adiós") print("Hola")

Figura 4.6: Flujo de ejecuci´on que sigue el camino del else.


4.3. COMBINANDO CONDICIONES 41

1. >>> edad = 12
2. >>> if edad == 10:
3. ... print(’tienes 10 a~nos’)
4. ... elif edad == 11:
5. ... print(’tienes 11 a~nos’)
6. ... elif edad == 12:
7. ... print(’tienes 12 a~nos’)
8. ... elif edad == 13:
9. ... print(’tienes 13 a~nos’)
10. ... else:
11. ... print(’¿Eh?’)
12. ...
13. tienes 12 a~nos

En el c´odigo anterior, la l´ınea 2 pregunta si el valor de la variable edad es


igual a 10. Si no lo es, entonces salta a la l´ınea 4 sin ejecutar la 3. En la l´ınea 4
valida si el valor de la variable edad es igual a 11. De nuevo no lo es, por eso salta
a la l´ınea 6 sin ejecutar la 5. Este caso, comprueba el valor y s´ı que es igual a 12.
Por eso Python ejecuta el bloque de la l´ınea 7, y ejecuta esa sentencia print.
(Espero que te hayas dado cuenta de que hay 5 grupos en este c´odigo—l´ıneas 3,
5, 7, 9 y 11). Despu´es, una vez ejecutado un bloque, no se pregunta por ninguna
de las condiciones que est´an despu´es y se salta al final de todos los if, despu´es
del else en la l´ınea 12.
¿Complicado? Un poco. Observa la figura 4.7 para tratar de entenderlo un
poco mejor.

4.3. Combinando condiciones


Puedes combinar condiciones utilizando las palabras ‘and’ y ‘or’ 3. As´ı
podemos comprimir el ejemplo anterior un poco, utilizando ‘or’ para unir
condiciones:

1. >>> if edad == 10 or edad == 11 or edad == 12 or edad == 13: 2. ...


print(’tienes %s a~nos’ % edad)
3. ... else:
4. ... print(’¿Eh?’)

Si alguna de las condiciones de la l´ınea 1 es verdadera (por ejemplo, si la


variable edad vale 10 o vale 11 o vale 12 o vale 13), entonces se ejecuta el bloque
de c´odigo de la l´ınea 2, en otro caso Python contin´ua en la l´ınea 4.
El diagrama de la figura 4.8 muestra que el or es parecido al elif en la forma
en la que se comprueba cada parte de la condici´on. Basta con que una de ellas
sea
3
En ingl´es significan ‘Y’ y ‘O’
´
42 CAP ITULO 4. COMO PREGUNTAR ´

edad = 12

SI
Si edad == 10 print("tienes 10 años")

NO

Si edad == 11 NO SI SI print("tienes 11 años")

Si edad == 12 print("tienes 12 años") NO


Si edad == 13 NO print("¿Eh?")
SI
print("tienes 13 años")

Figura 4.7: M´ultiples caminos posibles gracias al uso de elif.


´
4.4. VAC IO 43

cierta para que se ejecute el bloque que contiene el if. En caso de no ser ninguna
cierta se ejecuta el bloque de sentencias del else.
A´un podemos mejorar un poquito m´as el ejemplo mediante el uso de la
palabra ‘and’ y los s´ımbolos >= y <=.

1. >>> if edad >= 10 and edad <= 13:


2. ... print(’tienes %s a~nos’ % edad)
3. ... else:
4. ... print(’¿Eh?’)

Seguramente te has figurado ya que si son verdaderas (True) ambas


condicio nes de la l´ınea 1 entonces se ejecuta el bloque de c´odigo de la l´ınea 2
(si la edad es mayor o igual que 10 y menor o igual que 13). As´ı que si la variable
edad vale 12, se mostrar´a en la consola la frase ‘tienes 12 a˜nos’: puesto que 12
es mayor o igual que 10 y menor o igual que 13.
El diagrama de la figura 4.9 muestra que el uso del and hace que sea
necesario cumplir todas las condiciones incluidas para que se pueda ejecutar el
bloque de sentencias del if. En cuanto haya una condici´on que no se cumpla se
ejecuta en su lugar el bloque de sentencias correspondiente al else.

4.4. Vac´ıo
Hay otra clase de valor que se puede asignar a una variable del que no
hablamos en el cap´ıtulo anterior: Nada.
De igual forma que podemos asignar a una variable valores que representan
n´umeros, cadenas y listas, ’nada’ tambi´en es un valor que se puede asignar. En
Python, el valor que representa el vac´ıo, la nada, se escribe como None 4(En otros
lenguajes de programaci´on se llama Null) y se puede utilizar del mismo modo que
otros valores:

>>> mivalor = None


>>> print(mivalor)
None

None se suele utilizar para quitarle el valor que ten´ıa una variable, de forma
que est´e ‘limpia’. Tambi´en se suele utilizar para crear una variable sin asignarle
un valor antes de que se utilice.
4
En ingl´es ‘None’ significa ‘Ninguno’
´
44 CAP ITULO 4. COMO PREGUNTAR ´ edad = 12
Si edad == 10 NO O edad == 12 NO print("¿Eh?")
SI SI SI SI

O edad == 11 O edad == 13

NO NO print("tienes %s años" % edad)

Figura 4.8: Condiciones complejas usando or.


´
4.4. VAC IO 45 edad = 12

Si edad >= 10 Y edad <= 13 print("¿Eh?")

SI
SI

print("tienes %s años" % edad)


NO NO

Figura 4.9: Condiciones complejas usando and.


´
46 CAP ITULO 4. COMO PREGUNTAR ´

Por ejemplo, si todos los miembros de tu equipo de f´utbol estuvi´erais con


siguiendo fondos para comprar unos uniformes nuevos, y te tocase contar cuanto
dinero se ha recoletado, Posiblemente quisieras esperar hasta que todo el equipo
hubiera regresado con el dinero que ha conseguido cada uno antes de comenzar a
su marlo todo. En t´erminos de programaci´on, podr´ıamos crear una variable para
cada miembro del equipo, asign´andole a cada una de ellas el valor None:

>>> jugador1 = None


>>> jugador2 = None
>>> jugador3 = None

Entonces podr´ıamos utilizar la sentencia if para validar si todos los


miembros del equipo han vuelto con el dinero:

>>> if jugador1 is None or jugador2 is None or jugador3 is None: ... print(’Por favor,
espera a que vuelvan todos los jugadores’) ... else:
... print(’Has conseguido %s euros’ % (jugador1 + jugador2 + jugador3))

La sentencia if del ejemplo valida si alguna de las variables tiene el valor


None, e imprime el primer mensaje si es as´ı. Si todas las variables tienen un valor
real (alg´un n´umero) se imprime el segundo mensaje que suma el dinero total
antes de hacerlo. Si pruebas el c´odigo anterior con todas las variables valiendo
None, ver´as el primer mensaje en la consola (no te olvides de crear primero las
variables o Python mostrar´a un mensaje de error):

>>> if jugador1 is None or jugador2 is None or jugador3 is None: ... print(’Por favor,
espera a que vuelvan todos los jugadores’) ... else:
... print(’Has conseguido %s euros’ % (jugador1 + jugador2 + jugador3)) Por favor, espera a
que vuelvan todos los jugadores

Si asignamos alg´un valor a una o a dos variables a´un se imprime el mismo


mensaje:

>>> jugador1 = 100


>>> jugador3 = 300
>>> if jugador1 is None or jugador2 is None or jugador3 is None: ... print(’Por favor,
espera a que vuelvan todos los jugadores’) ... else:
... print(’Has conseguido %s euros’ % (jugador1 + jugador2 + jugador3)) Por favor, espera a
que vuelvan todos los jugadores

Finalmente, cuando asignamos valor a todas las variables el resultado es la suma


de todos los valores y, por lo tanto, el dinero que hemos recolectado:
´
4.5. ¿CUAL ES LA DIFERENCIA ...? 47

>>> jugador1 = 100


>>> jugador3 = 300
>>> jugador2 = 500
>>> if jugador1 is None or jugador2 is None or jugador3 is None: ... print(’Por favor,
espera a que vuelvan todos los jugadores’) ... else:
... print(’Has conseguido %s euros’ % (jugador1 + jugador2 + jugador3)) Has conseguido
900 euros

4.5. ¿Cu´al es la diferencia. . .?


¿Cu´al es la diferencia entre 10 y ’10’?
Podr´ıas decir que no mucha aparte de las comillas. Bien, de la lectura de los
cap´ıtulos anteriores, sabes que el primero es un n´umero y que el segundo es una
ca dena. Esto los hace ser m´as distintos de lo que podr´ıas imaginar. Antes
comparamos el valor de una variable (edad) con un n´umero en una sentencia if:

>>> if edad == 10:


... print(’tienes 10 a~nos’)

Si asignas el valor 10 a la variable edad, se imprimir´a la cadena en la consola:


>>> edad = 10
>>> if edad == 10:
... print(’tienes 10 a~nos’)
...
tienes 10 a~nos

Si embargo si lo que asignas a la variable edad es el valor ’10’ (observa las


comillas), entonces no se imprimir´a la cadena:

>>> edad = ’10’


>>> if edad == 10:
... print(’tienes 10 a~nos’)
...

¿Porqu´e no se ejecuta el c´odigo del bloque interior al if? Porque una


cadena siempre es diferente a un n´umero, incluso aunque se parezcan:
´
48 CAP ITULO 4. COMO PREGUNTAR ´

>>> edad1 = 10
>>> edad2 = ’10’
>>> print(edad1)
10
>>> print(edad2)
10

¡Ves! Parecen exactamente lo mismo. Pero, como uno es una cadena y el


otro es un n´umero, son valores diferentes. Por eso edad == 10 (edad igual a 10)
nunca ser´a True (verdadero) cuando la variable edad contiene un valor que es
una cadena.
Posiblemente la mejor manera de imagin´artelo es considerar 10 libros y 10
ladrillos. El n´umero de elementos puede que sea el mismo, no puedes decir que
10 libros sean igual que 10 ladrillos, ¿o s´ı? Afortunadamente en Python existen
funciones m´agicas que puede convertir cadenas en n´umeros y n´umeros en
cadenas (aunque nunca convertir´an ladrillos en libros). Por ejemplo, para convertir
la cadena ‘10’ en un n´umero puedes utilizar la funci´on int 5:

>>> edad = ’10’


>>> edad_convertida = int(edad)

La variable edad convertida contiene el n´umero 10, y no una cadena. Para


convertir un n´umero en una cadena, podr´ıas utilizar la funci´on str 6:

>>> edad = 10
>>> edad_convertida = str(edad)

La variable edad convertida contiene ahora la cadena ‘10’, y no un n´umero. Si


volvemos ahora a la sentencia if que no imprim´ıa nada:
>>> edad = ’10’
>>> if edad == 10:
... print(’tienes 10 a~nos’)
...

Si convirti´eramos la variable antes de la validaci´on, entonces el resultado ser´ıa


dife rente:
>>> edad = ’10’
>>> edad_convertida = int(edad)
>>> if edad_convertida == 10:
... print(’tienes 10 a~nos’)
...
tienes 10 a~nos
5
‘int’ es la contracci´on de ‘integer’ que significa ‘entero’ en ingl´es y se refiere a los n´umeros
enteros: 0, 1, 2,... y tambi´en -1, -2, -3, ...
6
‘str’ es la contracci´on de ‘string’ que significa ‘cadena’ en ingl´es
4.6. COSAS QUE PUEDES PROBAR 49 4.6. Cosas que puedes

probar

En este capitulo hemos visto que la sentencia if nos permite preguntar por
valores de una variable y decidir qu´e c´odigo queremos ejecutar seg´un el
resultado sea Verdadero (True) o Falso (False).

Ejercicio 1
¿Qu´e crees que se imprimir´a en pantalla al ejecutar este c´odigo?

>>> valor = 1000


>>> if valor > 100:
... print(’Tengo una moto’)
... else:
... print(’Tengo un coche’)

¿Y al ejecutar este otro?

>>> valor1 = 30
>>> valor2 = 80
>>> if valor1 + valor2 < 100:
... print(’Tengo una moto’)
... else:
... print(’Tengo un coche’)

Ejercicio 2
Crea una variable con el valor que quieras. Luego utiliza una sentencia if
para que se imprima en consola la palabra ’hola’ si la variable tiene un valor menor
que 100, la palabra ’chao’ si la variable vale entre 100 y 200, y la palabra ’adi´os’ si
el valor de la variable es cualquier otro (Pista: recuerda que puedes usar la opci´on
else y la palabra and para poner dos condiciones en un mismo if).
´
50 CAP ITULO 4. COMO PREGUNTAR ´

Cap´ıtulo 5

Una y otra vez

No hay nada peor que tener que hacer lo mismo una y otra vez. Hay una raz
´on por la que tus padres te dicen que cuentes ovejas para que te duermas, y no
tiene nada que ver con el sorprendente poder para inducir al sue˜no de los mam
´ıferos lanosos. Lo que importa es el hecho de que repetir algo sin parar es
aburrido, y a tu cerebro le deber´ıa resultar m´as f´acil dormirse si no est´a
pensando en cosas interesantes.
Particularmente a los programadores tampoco les gusta repetirse. Tambi´en
les da el sue˜no. Esta es una buena raz´on por la que todos los lenguajes de
programaci´on tienen lo que se llama un for-loop 1. Por ejemplo, para imprimir 5
veces la palabra hola en Python, podr´ıas escribir lo siguiente:
>>> print("hola")
hola
>>> print("hola")
hola
>>> print("hola")
hola
>>> print("hola")
hola
>>> print("hola")
hola

Lo que es... bastante aburrido.


O podr´ıas utilizar un bucle for-loop (nota: hay 4 espacios en la segunda l
´ınea antes de la sentencia print—Los hemos resaltado utilizando @ para que
puedas ver donde est´an):
1
En ingl´es ‘for’ significa ‘para’ y ‘loop’ signica ‘giro’ o ‘bucle’

51
´
52 CAP ITULO 5. UNA Y OTRA VEZ

>>> for x in range(0, 5):


... @@@@print(’hola’)
...
hola
hola
hola
hola
hola

La funci´on range2 permite crear de forma r´apida y sencilla una lista de n


´umeros que comienza en el primero y finaliza antes del ´ultimo. Por ejemplo:

>>> print(list(range(10, 20)))


[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

Por eso, en el caso del for-loop, lo que el c´odigo ‘for x in range(0, 5)’ le est´a
di ciendo a Python es que cree una lista de n´umeros [0, 1, 2, 3, 4] y que luego,
para cada n´umero—de uno en uno—, lo guarde en la variable x. Por eso podr
´ıamos usar la variable x en la sentencia que imprime si as´ı lo quisieramos:

>>> for x in range(0, 5):


... print(’hola %s’ % x)
hola 0
hola 1
hola 2
hola 3
hola 4

Si no lo hici´eramos con la sentencia for-loop, el c´odigo que habr´ıa que


escribir ser´ıa algo as´ı:

x=0
print(’hola %s’ % x)
x=1
print(’hola %s’ % x)
x=2
print(’hola %s’ % x)
x=3
print(’hola %s’ % x)
x=4
print(’hola %s’ % x)

As´ı que la sentencia for, que nos permite hacer un bucle, nos ha ahorrado
tener que teclear 8 l´ıneas extra de c´odigo. Esto es muy ´util, puesto que un
programador
2
En ingl´es ‘range’ significa ‘rango’
53

normal, cuando tiene que teclear, es m´as perezoso que un hipop´otamo en un d


´ıa de calor. Los buenos programadores odian tener que hacer las cosas m´as de
una vez, por eso la sentencia for es una de las m´as ´utiles en cualquier lenguaje
de programaci´on.
¡¡¡AVISO!!!
Si has intentado teclear los ejemplos anteriores sobre la
marcha, podr´ıa ser que Python te haya mostrado un
extra˜no mensaje de error cuando introdujiste el c´odigo
dentro del for-loop. Si fue as´ı se parecer´ıa a esto:

IndentationError: expected an indented block3

Si ves un error como este, significa que te ha faltado teclear


los espacios de la segunda l´ınea. En Python los espacios
son muy importantes (o un espacio normal o un tabulador).
Hablaremos sobre ellos enseguida...

En realidad no tenemos que utilizar la funci´on range, podemos utilizar las


listas que hayamos creado. Como por ejemplo, la lista de la compra que creamos
en el ´ultimo cap´ıtulo:

>>> lista_de_la_compra = [ ’huevos’, ’leche’, ’queso’, ’apio’, ... ’manteca de


cacahuete’, ’levadura’ ]
>>> for i in lista_de_la_compra:
... print(i)
huevos
leche
queso
apio
manteca de cacahuete
levadura

El c´odigo anterior es una forma de decir, “para cada elemento en la lista,


almacena el valor en la variable ‘i’ y luego imprime el contenido de esa variable”.
Si, como antes, no utiliz´asemos el bucle for-loop, tendr´ıamos que haber hecho
algo as´ı:
´
54 CAP ITULO 5. UNA Y OTRA VEZ

>>> lista_de_la_compra = [ ’huevos’, ’leche’, ’queso’, ’apio’, ... ’manteca de


cacahuete’, ’levadura’ ]
>>> print(lista_de_la_compra[0])
huevos
>>> print(lista_de_la_compra[1])
leche
>>> print(lista_de_la_compra[2])
queso
>>> print(lista_de_la_compra[3])
apio
>>> print(lista_de_la_compra[4])
manteca de cacahuete
>>> print(lista_de_la_compra[5])
levadura

Gracias al bucle nos hemos ahorrado tener que teclear un mont´on de c´odigo.
La figura 5.1 trata de explicar de forma gr´afica el funcionamiento del bucle
for. Python llega al bucle for y observa la lista. Lo primero que hace es iniciar un
contador interno que nosotros no vemos nunca pero que a Python le vale para
saber por d´onde va ejecutando el bucle y cu´ando tiene que terminar. Luego,
antes de hacer ninguna sentencia del bloque interior lo siguiente que hace es
comprobar que el contador no ha llegado al final de la lista. Esto lo hace incluso la
primera vez. Ten en cuenta que la lista podr´ıa no tener ning´un elemento (podr´ıa
estar vac´ıa). Si a´un quedan elementos, el contador es menor que el n´umero de
elementos de la lista, entonces asigna a la variable que hemos dicho el elemento
correspondiente de lista y ejecuta el bloque de la setencia for una vez. Finalizada
la ejecuci´on del bloque, incrementa en uno el contador y vuelve al comienzo a
preguntar si el contador es menor que el n´umero de elementos. As´ı se ejecuta,
tantas veces como elementos haya en la lista. Cuando el contador ya no sea
menor que los elementos de la lista el bucle for termina.

5.1. ¿Cu´ando un bloque no es cuadrado?


Cuando es un bloque de c´odigo.
¿Y qu´e es lo que es un ‘bloque de c´odigo’?
Un bloque de c´odigo es un conjunto de sentencias del programa que quieres
que est´en agrupadas. Por ejemplo, en el bucle for-loop anterior, podr´ıa suceder
que quisieras hacer algo m´as que imprimir los elementos de la lista. Tal vez
quisieras comprar cada elemento y luego imprimirlo. Suponiendo que tuvi´eramos
una funci´on llamada ‘comprar’, podr´ıamos escribir el siguiente c´odigo:
´
5.1. ¿CUANDO UN BLOQUE NO ES CUADRADO? 55

for i in lista_de_la_compra

contador = 0

NO
contador < número elementos de la lista

SI

i = lista_de_la_compra[contador]
(ejecuta las sentencias del bloque)
comprar(i)
print(i)

contador = contador + 1

Figura 5.1: Dando vueltas en un bucle for.


´
56 CAP ITULO 5. UNA Y OTRA VEZ

>>> for i in lista_de_la_compra:


... comprar(i)
... print(i)

No te molestes en teclear el ejemplo anterior en la consola de Python—porque


no tenemos ninguna funci´on comprar y dar´a un mensaje de error si intentas
ejecutarlo— ´unicamente nos sirve para demostrar el uso de un bloque de c´odigo de
Python com puesto por 2 sentencias:

comprar(i)
print(i)

En Python, los espacios en blanco resultado del tabulador (cuando pulsas la


tecla tab) y del espacio (cuando pulsas la barra espaciadora) son muy importantes.
El c´odigo que est´a en la misma posici´on queda agrupado para formar bloques.

esto podr´ıa ser el bloque 1


esto podr´ıa ser el bloque 1
esto podr´ıa ser el bloque 1
esto podr´ıa ser el bloque 2
esto podr´ıa ser el bloque 2
esto podr´ıa ser el bloque 2
esto a´un ser´ıa el bloque 1
esto a´un ser´ıa el bloque 1
esto podr´ıa ser bloque 3
esto podr´ıa ser bloque 3
esto podr´ıa ser bloque 4
esto podr´ıa ser bloque 4
esto podr´ıa ser bloque 4

Pero debes ser consistente con los espacios. Por ejemplo:

>>> for i in lista_de_la_compra:


... comprar(i)
... print(i)

La segunda l´ınea (funci´on comprar(i)) comienza con 4 espacios. La tercera


(funci´on print(i)) comienza con 6 espacios. Veamos de nuevo el c´odigo haciendo
visibles los espacios (utilizando @ de nuevo):

>>> for i in lista_de_la_compra:


... @@@@comprar(i)
... @@@@@@print(i)

Esto provocar´ıa un error. Una vez comienzas a utilizar 4 espacios, debes


seguir us´andolos. Y si quieres poner un bloque dentro de otro bloque, necesitar´as
usar
´
5.1. ¿CUANDO UN BLOQUE NO ES CUADRADO? 57
m´as de 4 espacios, los que sean, pero los mismos durante todo el bloque. Es
buena pr´actica de programaci´on utilizar el doble de los espacios del bloque
inicial, en este caso 8 (2 x 4) al comienzo de las l´ıneas del bloque interno.
As´ı que si el primer bloque tiene 4 espacios (Lo volveremos a resaltar para
que puedas verlos):

@@@@Aqu´ı est´a mi primer bloque


@@@@Aqu´ı est´a mi primer bloque

El segundo bloque (que est´a ‘dentro’ del primero) necesitar´a m´as de 4


espacios, vamos a usar 8:

@@@@Aqu´ı est´a mi primer bloque


@@@@Aqu´ı est´a mi primer bloque
@@@@@@@@Aqu´ı est´a mi segundo bloque
@@@@@@@@Aqu´ı est´a mi segundo bloque

Y si quisi´eramos un tercer bloque ‘dentro’ del segundo necesitar´ıamos m´as


de 8 espacios. Para mantener nuestro criterio utilizar´ıamos 12 (3 x 4):

@@@@Aqu´ı est´a mi primer bloque


@@@@Aqu´ı est´a mi primer bloque
@@@@@@@@Aqu´ı est´a mi segundo bloque
@@@@@@@@Aqu´ı est´a mi segundo bloque
@@@@@@@@@@@@Aqu´ı est´a mi tercer bloque
@@@@@@@@@@@@Aqu´ı est´a mi tercer bloque
@@@@@@@@@@@@Aqu´ı est´a mi tercer bloque

A Python le es indiferente el n´umero de espacios que use cada bloque


siempre que sean los mismos para cada l´ınea de un bloque, y que los bloques
internos a otros (anidados) tengan m´as espacios que aqu´el en el que se anidan.
No obstante, es buena pr´actica utilizar siempre el mismo n´umero de espacios en
el c´odigo para cada nivel de bloque con el fin de que quede m´as claro al leerlo.
Norlmamente, como ya hemos comentado, usaremos m´ultiplos del primer nivel
para los bloques interiores.
¿Por qu´e queremos poner un bloque ‘dentro’ de otro? Normalmente
hacemos esto cuando el segundo bloque depende de alguna manera del primero.
Tal y como pasa con nuestro bucle for-loop. Si la l´ınea con el c´odigo for es el
primer bloque, entonces las sentencias que queremos que se ejecuten una y otra
vez est´an en el segundo bloque—estas sentencias dependen del primer bloque
para funcionar apro piadamente (el valor de la variable del bucle cambia cada vez).
Por ´ultimo, conviene tener en cuenta que el primer bloque est´a formado por todo
lo que est´a a su nivel de
´
58 CAP ITULO 5. UNA Y OTRA VEZ

espacios o m´as espaciado dentro de ´el. Hasta que aparece otra l´ınea al mismo
nivel. Para aclararlo, muestro un par de ejemplos pero esta vez con rayitas
destacando los bloques:

+---esto podr´ıa ser el bloque 1


| esto podr´ıa ser el bloque 1
| esto podr´ıa ser el bloque 1
| +---esto podr´ıa ser el bloque 2
| | esto podr´ıa ser el bloque 2
| +---esto podr´ıa ser el bloque 2
| esto a´un ser´ıa el bloque 1
| esto a´un ser´ıa el bloque 1
| +---esto podr´ıa ser bloque 3
| | esto podr´ıa ser bloque 3
| +---esto podr´ıa ser bloque 3
| +---esto podr´ıa ser bloque 4
| | esto podr´ıa ser bloque 4
+-------+---esto podr´ıa ser bloque 4

+---Aqu´ı est´a mi primer bloque


| Aqu´ı est´a mi primer bloque
| +---Aqu´ı est´a mi segundo bloque
| | Aqu´ı est´a mi segundo bloque
| | +---Aqu´ı est´a mi tercer bloque
| | | Aqu´ı est´a mi tercer bloque
+---+---+---Aqu´ı est´a mi tercer bloque

Cuando inicias un bloque en la consola, Python contin´ua el bloque hasta que


pulsas la tecla Intro en una l´ınea en blanco (mientras se teclea el bloque la
consola mostrar´a 3 puntos al comienzo de la l´ınea para mostrar que est´as a´un
en un bloque.
Vamos a intentar algunos ejemplos de verdad. Abre la consola de Python y
teclea lo siguiente (recuerda que debes pulsar la barra espaciadora 4 veces al
comienzo de las l´ıneas con las funciones print)

>>> milista = [ ’a’, ’b’, ’c’ ]


>>> for i in milista:
... print(i)
... print(i)
...
a
a
b
b
c
c

Despu´es del segundo print, pulsa la tecla Intro en la l´ınea en blanco—esto sirve
´
5.1. ¿CUANDO UN BLOQUE NO ES CUADRADO? 59

para decirle a la consola que quieres finalizar el bloque. Entonces se imprimir´a


cada elemento de la lista dos veces.
El siguiente ejemplo provocar´a que se muestre un mensaje de error:
>>> milista = [ ’a’, ’b’, ’c’ ]
>>> for i in milista:
... print(i)
... print(i)
...
File \<stdin>", line 3
print(i)
^
IndentationError: unexpected indent

El segundo print tiene 6 espacios, no 4, lo que no le gusta a Python ya que


espera que los espacios permanezcan iguales dentro del bloque.
RECUERDA
Si inicias los bloques de c´odigo con 4 espacios debes
continuar utilizando 4 espacios. Si inicias los bloques con 2
espacios, debes continuar utilizando 2 espacios. Te
recomiendo utilizar 4 espa cios porque es lo que suelen
utilizar los programadores expertos en Python.

A continuaci´on muestro un ejemplo m´as complejo con 2 bloques de c´odigo:


>>> milista = [ ’a’, ’b’, ’c’ ]
>>> for i in milista:
... print(i)
... for j in milista:
... print(j)
...

¿D´onde est´an los bloques en este c´odigo? y ¿Qu´e es lo que


hace? Hay dos bloques—el primero es parte del primer bucle for-loop:

>>> milista = [ ’a’, ’b’, ’c’ ]


>>> for i in milista:
... print(i) #
... for j in milista: #-- estas l´ıneas forman el PRIMER bloque ... print(j) #
...

El bloque n´umero dos es la l´ınea print del segundo bucle for-loop:


´
60 CAP ITULO 5. UNA Y OTRA VEZ

>>> milista = [ ’a’, ’b’, ’c’ ]


>>> for i in milista:
... print(i)
... for j in milista:
... print(j) # esta l´ınea forma el SEGUNDO bloque ...

¿Puedes tratar de pensar que es lo que hace este c´odigo?


Imprimir´a las tres letras de ‘milista’, pero ¿cu´antas veces? Si miramos a
cada l´ınea, probablelmente lo descubramos. Sabemos que el primer bucle
recorrer´a cada uno de los elementos de la lista, y luego ejecutar´a las sentencias
del bloque n´umero 1. Por lo que imprimir´a una letra, luego comenzar´a el
segundo bucle. Este bucle tambi´en recorrer´a cada uno de los elementos en la
lista y luego ejecutar´a la sentencia del bloque 2. Por eso lo que deber´ıamos ver al
ejecutar el c´odigo es ‘a’ seguido de ‘a’, ‘b’, ‘c’, luego ‘b’ seguido de ‘a’, ‘b’, ‘c’, para
terminar con ‘c’ y luego seguido de ‘a’, ‘b’ y ‘c’. Introduce el c´odigo en la consola
de Python para verlo t´u mismo:

>>> milista = [ ’a’, ’b’, ’c’ ]


>>> for i in milista:
... print(i)
... for j in milista:
... print(j)
...
a
a
b
c
b
a
b
c
c
a
b
c

¿Qu´e te parece hacer algo m´as ´util que imprimir letras? ¿Recuerdas el c
´alculo que hicimos al comienzo del libro para conocer cu´anto podr´ıas ahorrar al
final del a˜no si ganases 5 euros haciendo tareas, 30 euros repartiendo peri´odicos
y gastases 10 euros a la semana?
Era as´ı:

>>> (5 + 30 - 10) * 52

(Son 5 euros m´as 30 euros menos 10 euros multiplicados por 52 semanas al a˜no).
´
5.1. ¿CUANDO UN BLOQUE NO ES CUADRADO? 61

Podr´ıa ser ´util ver c´omo se incrementar´ıan tus ahorros a lo largo del a˜no
seg´un se van produciendo, en lugar de conocer ´unicamente lo que tendr´as al
finalizar. Podemos hacerlo con un bucle for. Pero primero tenemos que guardar
estos n´umeros en variables:

>>> tareas = 5
>>> reparto = 30
>>> gastos = 10

Podemos ejecutar el c´alculo original utilizando las variables:

>>> (tareas + reparto - gastos) * 52


1300

O podemos ver los ahorros increment´andose a lo largo del a˜no. Para ello
crea mos otra variable y usamos un bucle:

1. >>> ahorros = 0
2. >>> for semana in range(1, 53):
3. ... ahorros = ahorros + tareas + reparto - gastos
4. ... print(’Semana %s = %s’ % (semana, ahorros))
5. ...

En la l´ınea 1 la variable ‘ahorros’ se inicia con el valor 0 (porque no hemos


ahorrado nada a´un).
La l´ınea 2 prepara el bucle for que ejecutar´a todos las sentencias del bloque (el
bloque est´a compuesto de las l´ıneas 3 y 4). Cada vez que se ejecuta el bucle la
variable ‘semana’ contiene el siguiente n´umero en el rango que va de 1 a 52. Lo
que significa que el bucle se ejecuta 52 veces, una por cada semana del a˜no. todo
ello gracias a la funci´on range que genera una lista que contiene los n´umeros del
1 al 52. La l´ınea 3 es un poco m´as complicada. Lo que queremos es que cada
semana se sume lo que ahorramos con los ahorros que ya tenemos. Piensa que la
variable ‘ahorros’ funciona como un banco. Le a˜nadimos el dinero que ganamos
en nuestros trabajos y le quitamos los gastos y luego dejamos lo que queda en el
banco. Hablando en terminolog´ıa inform´atica, la l´ınea 3 significa, “suma los
valores de las variables ahorros, tareas y reparto, y r´estale el valor de la variable
gastos. El resultado as´ıgnalo a la variable ahorros—que pierde as´ı su valor
original para guardar el nuevo valor”. En otras palabras, el s´ımbolo igual (=) sirve
en Python para decirle que “haga todo lo que haya que hacer de c´alculos a la
derecha del igual y luego que lo guarde en la variable que est´a en la derecha”.
La l´ınea 4 es una sentencia print un poco m´as complicada, imprime el n´umero
de semana y la cantidad ahorrada hasta la semana indicada. Consulta la secci´on
Trucos para las cadenas en la p´agina 18, si esta l´ınea no tiene sentido para ti.
Por eso, el resultado si ejecutas este programa es el siguiente...
´
62 CAP ITULO 5. UNA Y OTRA VEZ

Semana 1 = 25
Semana 2 = 50
Semana 3 = 75
Semana 4 = 100
Semana 5 = 125
Semana 6 = 150
Semana 7 = 175
Semana 8 = 200
Semana 9 = 225
Semana 10 = 250
Semana 11 = 275
Semana 12 = 300
Semana 13 = 325
Semana 14 = 350
Semana 15 = 375

...y as´ı hasta la semana 52.

5.2. Saliendo de un bucle antes de tiempo


La palabra reservada break se utiliza para parar la ejecuci´on del bucle.
Puedes utilizar la sentencia break dentro de un bucle for o while como en el
siguiente ejemplo:

>>> edad = 10
>>> for x in range(1, 100):
... print(’contando %s’ % x)
... if x == edad:
... print(’fin de la cuenta’)
... break

Si la variable ‘edad’ tuviera el valor 10, este c´odigo imprimir´ıa:

contando 1
contando 2
contando 3
contando 4
contando 5
contando 6
contando 7
contando 8
contando 9
contando 10
fin de la cuenta

A pesar de que la cuenta del bucle for est´a prevista para 100 elementos.
Existe una sentencia if que en cada paso del bucle for comprueba si la edad es
igual a x. En
5.3. MIENTRAS HABLAMOS SOBRE BUCLES... 63

el momento en que x coincide con edad (en este ejemplo es el n´umero 10) se
ejecuta el c´odigo de la sentencia if que es un print y un break. La sentencia break
hace que se acabe el bucle for.

5.3. Mientras hablamos sobre bucles. . .


El bucle for no es la ´unica clase de bucle que puede existir en Python. Tambi
´en existe el bucle while. Si en el bucle for se sabe exactamente el momento en
que se finaliza, en el bucle while no se conoce necesariamente cu´antas veces se
ejecutar´a el mismo. Imagina una escalera de 20 escalones. Sabes que puedes
subirlos f´acilmente. Eso es un bucle for.

>>> for paso in range(0,20):


... print(paso)

Ahora imagina una escalera que sube a lo largo de una monta˜na. Te quedar
´ıas sin energ´ıa antes de alcanzar la cima. O el tiempo podr´ıa empeorar forz
´andote a parar la escalada. Esto es un bucle while 4.

>>> paso = 0
>>> while paso < 10000:
... print(paso)
... if cansado:
... break
... elif maltiempo:
... break
... else:
... paso = paso + 1

No te molestes en ejecutar el c´odigo del ejemplo anterior, porque no nos he


mos preocupado de crear las variables cansado y maltiempo. Pero demuestra lo
fundamental de un bucle while. El c´odigo del bloque se ejecutar´a una vez tras
otra mientras el valor de la variable paso sea menor que 10000 (paso < 10000). En
el blo que, imprimimos el valor de paso, luego validamos si cansado or maltiempo
tienen el valor verdadero (True). Si cansado es verdadero (tiene el valor True),
entonces la sentencia break finaliza la ejecuci´on del c´odigo del bucle (lo que
sucede es que saltamos fuera del bucle a la siguiente l´ınea de c´odigo que sigue
al bloque inmediata mente despu´es de ´el). Si maltiempo es verdadero, tambi´en
salimos del bucle. Si no, entonces se suma 1 al valor de la variable paso, y se
vuelve al comienzo, valid´andose de nuevo la condici´on de salida del bucle while
(paso < 10000).
4
En ingl´es ‘while’ significa ‘mientras’.
´
64 CAP ITULO 5. UNA Y OTRA VEZ

Si condición (ejecuta las sentencias del bloque) print(paso)


es verdadera if cansado:
paso < 10000 break
elif maltiempo:
break
else:
paso = paso + 1
SI NO

Figura 5.2: Dando vueltas en un bucle while.

As´ı que los pasos de un bucle while son fundamentalmente:

⊲ validar la condici´on que sigue a la palabra ‘while’,

⊲ ejecutar el bloque,

⊲ volver al comienzo del bucle

Si lo vemos, como en los ejemplos anteriores, con un diagrama, el bucle


while funciona seg´un se observa en la figura 5.2.
Es com´un que sea necesario crear bucles while que requieran m´as de una
con dici´on, por ejemplo un par de ellas:
5.3. MIENTRAS HABLAMOS SOBRE BUCLES... 65
>>> x = 45
>>> y = 80
>>> while x < 50 and y < 100:
... x = x + 1
... y = y + 1
... print(x, y)

En este bucle creamos la variable x con el valor 45, y la variable y con el


valor 80. Hay dos condiciones que se chequean en el bucle: si x es menor que 50
y si y es menor que 100. Mientras ambas condiciones sean verdaderas, se ejecuta
el bloque del c´odigo, sumando 1 a ambas variables y luego imprimi´endolas. La
salida en pantalla del c´odigo anterior es la siguiente:

46 81
47 82
48 83
49 84
50 85

Posiblemente ya seas capaz de figurarte porqu´e se imprimen estos n´umeros 5


Otro uso habitual de un bucle while, es crear bucles casi eternos. O sea, un
bucle que se ejecuta para siempre, o al menos hasta que sucede algo en el bloque
de c´odigo interno que lo finaliza. Por ejemplo:

>>> while True:


... Mucho c´odigo aqu´ı
... Mucho c´odigo aqu´ı
... Mucho c´odigo aqu´ı
... if alguna_condicion es verdadera:
... break

La condici´on para el bucle while es ‘True’. Por lo que siempre ser´a


verdadera y ejecutar´a cont´ınuamente el c´odigo del bloque (as´ı que el bucle es
eterno o infini to). Solamente si la condici´on ‘alguna condicion’ de la sentencia if
es verdadera se ejecutar´a la sentencia break y se saldr´a del bucle. Puedes ver
un ejemplo mejor de este tipo de bucle en el Ap´endice C (en la secci´on sobre el
m´odulo random), pero podr´ıas querer esperar hasta que hayas le´ıdo el siguiente
cap´ıtulo antes de echarle un vistazo.
5
Comenzamos contando en 45 en la variable x y en 80 en la variable y, y luego incrementamos
(a˜nadimos uno) a cada variable cada vez que se ejecuta una vuelta completa del bucle. Las condi
ciones comprueban que x sea menor que 50 y que y sea menor que 100. Despu´es de cinco
pasadas (sumando 1 a cada variable en cada pasada) el valor de x alcanza el n´umero 50. Ahora la
primera condici´on (x < 50) ya no es verdadera, por lo que Python finaliza el bucle.
´
66 CAP ITULO 5. UNA Y OTRA VEZ 5.4. Cosas que puedes probar

En este cap´ıtulo hemos visto como utilizar bucles para ejecutar tareas
repetiti vas. Y hemos usado bloques de c´odigo dentro de los bucles para ejecutar
las tareas que ten´ıan que repetirse.

Ejercicio 1
¿Qu´e piensas que suceder´a al ejecutar el siguiente c´odigo?

>>> for x in range(0, 20):


... print(’hola %s’ % x)
... if x < 9:
... break

Ejercicio 2
Cuando guardas dinero en un banco, ganas un inter´es. El ‘inter´es’ es el
dinero que el banco te paga por dejarle que use tus ahorros—cada a˜no te paga
una peque˜na cantidad de dinero dependiendo de cuanto tengas ahorrado. Este
pago normalmente se a˜nade a tus ahorros en la cuenta del banco, con lo que
pasa a formar parte de tus ahorros... lo que es un poco confuso, posiblemente
deber´ıas consultarlo con Mam´a o Pap´a para que te lo expliquen.
El inter´es se calcula usando porcentajes. Si no sabes lo que es un
porcentaje, no te preocupes, es suficiente con que sepas que si el banco te est´a
pagando un 1 % (1 por ciento) de inter´es, puedes multiplicar tus ahorros por el n
´umero 0.01 (si tus ahorros son $1000, entonces har´as: 1000 * 0.01 cuyo
resultado es 10). Si te est´an pagando un 2 % de inter´es, puedes utilizar el n
´umero 0.02, con lo que el c´alculo ser´a 1000 * 0.02 y te estar´an pagando 20, y
as´ı sucesivamente.
Si tienes $100 euros ahorrados en una cuenta bancaria, y ellos te pagan un 3
% de inter´es cada a˜no, ¿Cu´anto dinero crees que tendr´as cada a˜no? Calc
´ulalo durante 10 a˜nos. Escribe un programa que utilice un bucle for para
calcularlo (Pista: Recuerda a˜nadir cada a˜no el inter´es que te pagan al total de
tus ahorros).

Cap´ıtulo 6

Una forma de reciclar. . .

Estoy pensando en la cantidad de basura que generas cada d´ıa. Agua


embote llada o botellas de refrescos, paquetes de crispies, envoltorios de
sandwiches, bolsas de verduras, bandejas de pl´astico de la carne, bolsas de pl
´astico de la compra, pe ri´odicos, revistas y muchas cosas m´as...
Piensa ahora en lo que pasar´ıa si toda esa basura quedase tirada en un
mont´on al otro lado de tu calle.

67
´
68 CAP ITULO 6. UNA FORMA DE RECICLAR...
Probablemente reciclas tanto como puedes. Lo cual est´a muy bien, porque a
nadie le gusta tener que escalar una monta˜na de basura de camino al colegio. Por
eso, las botellas de cristal van al cubo de reciclar para que las fundan y vuelvan a
hacer nuevas jarras, vasos y botellas con ellas; el papel se vuelve a convertir en
papel reciclado; el pl´astico sirve para hacer nuevos art´ıculos de pl´astico—de
forma que tu calle no desaparece bajo toneladas de basura. Reutilizamos las
cosas que se fabrican para evitar comernos el mundo a trozos al fabricar
continuamente nuevos objetos.
Reciclar o reutilizar tambi´en es muy importante en el mundo de la programa
ci´on. No porque tu programa vaya a desaparecer bajo un mont´on de basura—
sino porque si no reutilizas algo de lo que haces posiblemente perder´ıas los dedos
de tanto teclear.
Hay diversas formas de reutilizar c´odigo en Python (en general, en todos los
lenguajes de programaci´on), vimos una de las formas en el Cap´ıtulo 3, con la
funci´on range. Las funciones son un modo de reutilizar c´odigo—de forma que
escribes el c´odigo una vez y lo puedes usar en tus programas tantas veces como
quieras. Vamos a comenzar por un ejemplo simple de una funci´on:

>>> def mifuncion(minombre):


... print(’hola %s’ % minombre)
...

La funci´on anterior se llama ‘mifuncion’ y tiene como par´ametro ‘minombre’.


Un par´ametro es una variable que solamente est´a disponible dentro del ‘cuerpo’
de la funci´on (El cuerpo de la funci´on es el bloque de c´odigo que comienza
inmediatamente despu´es de la l´ınea con el def 1).
Puedes ejecutar la funci´on llam´andola por su nombre y utilizando par
´entesis para delimitar el valor que quieras asignar al par´ametro:

>>> mifuncion(’Miguel’)
hola Miguel

Podr´ıamos modificar la funci´on para que recibiese dos par´ametros:

>>> def mifuncion(nombre, apellidos):


... print(’Hola %s %s’ % (nombre, apellidos))
...

Y podemos ejecutarla de la misma forma que la primera vez:


1
‘def’ es la contracci´on de ‘define’ que en ingl´es significa ‘definir’
69

>>> mifuncion(’Miguel’, ’Gonz´alez P´erez’)


Hola Miguel Gonz´alez P´erez

Tambi´en podr´ıamos crear algunas variables y utilizarlas para llamar a la funci´on


(para asignar con ellas los par´ametros):
>>> fn = ’Joe’
>>> ln = ’Robertson’
>>> mifuncion(fn, ln)
Hola Joe Robertson

Una funci´on puede devolver valores utilizando la sentencia return2:

>>> def calcular_ahorros(tareas, reparto, gastos):


... return tareas + reparto - gastos
...
>>> print(calcular_ahorros(10, 10, 5))
15
Esta funci´on toma 3 par´ametros y luego suma los dos primeros, tareas y re
parto, antes de restar el ´ultimo, gastos. El resultado se devuelve con la sentencia
return—este resultado se puede utilizar para asignarlo a una variable (de la misma
forma que lo hemos hecho en otras ocasiones):
>>> mis_ahorros = calcular_ahorros(20, 10, 5)
>>> print(mis_ahorros)
25

Importante, cualquier variable que se use dentro del cuerpo de una funci´on, no
estar´a accesible (no se podr´a usar) a partir de que la funci´on haya finalizado:

>>> def variable_test():


... a = 10
... b = 20
... return a * b
...
>>> print(variable_test())
200
>>> print(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name ’a’ is not defined

En el ejemplo anterior creamos la funci´on variable test, que multiplica dos


variables (a y b) y devuelve el resultado. Si llamamos a la funci´on utilizando print 3,
2
En ingl´es ‘return’ significa ‘retorno’
3
como ves, ‘print’ es una funci´on que recibe un par´ametro en este caso.
´
70 CAP ITULO 6. UNA FORMA DE RECICLAR...

obtenemos la respuesta: 200. Sin embargo, si intentamos imprimir el contenido de


la variable a (o b), vemos un mensaje de error “‘a’ no est´a definida”. Esto sucede
por algo que se suele llamar ‘´ambito’ en el mundo de la programaci´on.
Imagina que una funci´on es como una islita en el oc´eano—y que est´a
demasiado lejos para nadar a ninguna parte desde ella. Ocasionalmente, un avi´on
vuela hasta ella y deja caer unos trozos de papel en la isla (son los par´ametros
que llegan a la funci´on) entonces los habitantes juntan los papeles y crean un
mensaje, lo ponen dentro de una botella y la tiran al mar (la botella es el valor que
retorna la funci´on). A la persona que coge la botella y lee el mensaje no le importa
lo que hacen los isle˜nos, ni cuantos son. Posiblemente esta sea la manera m´as
sencilla de pensar sobre el concepto de ´ambito—´unicamente tiene un peque˜no
problema. Uno de los isle˜nos tiene unos prism´aticos muy potentes y puede ver el
continente. Puede ver lo que la gente est´a haciendo all´ı, y puede afectar al
mensaje que est´an creando:

>>> x = 100
>>> def variable_test2():
... a = 10
... b = 20
... return a * b * x
...
>>> print(variable_test2())
20000

Como se ve, incluso aunque no se pueden utilizar las variables a y b fuera de


la funci´on, la variable x (que se ha creado fuera, y antes, que la funci´on) s´ı se
puede utilizar dentro de ella. Piensa en el isle˜no con los prism´aticos, y tal vez te
ayude a comprender la idea.
En resumen, las variables que est´an creadas fuera de una funci´on se
pueden utilizar dentro de la funci´on (adem´as de sus par´ametros y las que se
creen dentro de la funci´on). Sin embargo, las variables creadas dentro de la funci
´on y los par´ametros de la funci´on ´unicamente est´an disponibles dentro de la
funci´on. En otras palabras, el ´ambito de las variables de dentro de una funci´on
est´a reducido a la propia funci´on, mientras que el ´ambito de las variables
exteriores a una funci´on se extiende a las funciones que se usen despu´es de que
la variable se haya creado.

También podría gustarte