5
Os
ar Zarate Villegas
6 de septiembre de 2010
Tutorial de
Tutorial de Python
por Os
ar Zarate Villegas
Este tutorial esta es
rito bajo la li
en
ia Creative Commons Re
ono
imiento 2.5 Mexi
o.
Usted es libre de:
ndi
e general
1. Introdu
on.
2. Qu es Python?.
2.0.2.
2.0.3.
2.0.4.
2.0.5.
El Interprete de Python. . . . . . . . .
Los Operadores Aritmti
os. . . . . .
Operadores Lgi
os y de Compara
in.
Tipos Bsi
os de Datos. . . . . . . . .
2.0.5.1. Nmeros . . . . . . . . . . . .
2.0.5.2. Cadenas. . . . . . . . . . . .
2.0.5.3. Booleanos. . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8
9
10
12
12
13
14
15
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
18
18
19
20
20
22
5. Cole iones.
23
6. Fun iones.
33
5.1. Listas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.2. Tuplas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.3. Di
ionarios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
7. Ar hivos.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
33
34
35
40
46
ndi e general
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9. Re ursividad
51
51
53
53
54
54
56
57
58
59
59
61
62
63
64
9.1. Qu es la Re ursividad? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Burbuja . . . . . . .
Sele
in . . . . . .
Inser
in . . . . . . .
Bsqueda Se
uen
ial
Bsqueda Binaria . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11.Un Po o de Gra a in
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
67
67
70
72
73
74
76
11.1. Instala
in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
11.2. Matplotlib
on Ejemplos. . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
1 Introdu
on.
El objetivo de este do
umento es ha
er una gua de la programa
in en Python, el
ual es un lenguaje inteligible de entender. Es un lenguaje e
iente de alto nivel,
on una
elegante sintaxis y una me
anografa dinmi
a. Una de las ventajas de utilizar Python
es que totalmente gratuito y el
digo es abierto, lo puedes obtener del sitio Web o
ial
de Python http://www.Python.org/ para diferentes tipos de plataformas (Linux, Unix,
Windows, et
.).
1.0.1.
Antes de omenzar a involu rarnos on Python es ne esario saber algunas osas importantes, para poder entender on mayor laridad los temas que vamos a tratar.
Que es un Programa?.
Un programa informti
o es un
onjunto de instru
iones que una vez eje
utadas realizarn una o varias tareas en una
omputadora. Sin programas, estas mquinas no
pueden fun
ionar
orre
tamente. Al
onjunto general de programas, se lo denomina software y as, se reere al equipamiento lgi
o o soporte lgi
o de una
omputadora digital.
En
omputa
in, se los denomina
omnmente binarios, (propio en sistemas Unix,
donde debido a la estru
tura de este ltimo, los
heros no ne
esitan ha
er uso de extensiones. Posteriormente, los presentaron
omo
heros eje
utables,
on extensin .exe,
en los sistemas operativos de la familia Windows) debido a que una vez que han pasado
por el pro
eso de
ompila
in por el interprete y han sido
reados, las instru
iones
que se es
ribieron en un lenguaje de programa
in que los humanos usan para es
ribirlos
on mayor fa
ilidad, se han tradu
ido al ni
o idioma que la mquina
omprende,
ombina
iones de
eros y unos llamada
digo mquina. El mismo trmino, puede referirse
tanto a un programa eje
utable,
omo a su
digo fuente, el
ual es transformado en un
binario
uando es
ompilado interpretado.
Generalmente el
digo fuente lo es
riben profesionales
ono
idos
omo programadores.
Se es
ribe en un lenguaje que sigue uno de los siguientes dos paradigmas: imperativo o
de
larativo y que posteriormente puede ser
onvertido en una imagen eje
utable por
un
ompilador, o algn interprete. Cuando se pide que el programa sea eje
utado, el
pro
esador eje
uta instru
in por instru
in.
Una vez es
ritos, pueden ser eje
utados de diversas formas:
Mediante un programa que va adaptando las instru
iones
onforme son en
ontradas. A este pro
eso se lo llama interpretar y a los programas que lo ha
en se los
ono
e
omo intrpretes. Ejemplos de esto son bash,
lsi
o en esta
iones Unix y
1 Introdu
on.
que fue es
rito para el proye
to GNU o Python,
uya pe
uliaridad adems de ser
multipropsito, est en su fa
ilidad de uso y produ
tividad y de he
ho, es usado en
parte de los proye
tos Google y Youtube.
Tradu
iendo el
digo es
rito del programa (lo que se denomina
digo fuente),
a su equivalente en lenguaje mquina. A este pro
eso se le llama
ompilar y al
programa tradu
tor se le denomina
ompilador. Ejemplos de esto son: El lenguaje
C, que
ombina en su sintaxis
ara
tersti
as de medio y bajo nivel y el
ompilador
g
usado en el proye
to GNU.
Que es un Algoritmo?.
Un algoritmo es un
onjunto prees
rito de instru
iones o reglas bien denidas, ordenadas y nitas que permite realizar una a
tividad mediante pasos su
esivos que no
generen dudas a quien lo eje
ute. Dados un estado ini
ial y una entrada, siguiendo los
pasos su
esivos se llega a un estado nal y se obtiene una solu
in. Los algoritmos son
objeto de estudio de la algoritmia.
En la vida
otidiana se emplean algoritmos en multitud de o
asiones para resolver
problemas. Algunos ejemplos son los manuales de usuario, que muestran algoritmos para
usar un aparato, o las instru
iones que re
ibe un trabajador por parte de su patrn.
Algunos ejemplos en matemti
as son el algoritmo de la divisin para
al
ular el
o
iente
de dos nmeros, el algoritmo de Eu
lides para obtener el mximo
omn divisor de dos
enteros positivos, o el mtodo de Gauss para resolver un sistema lineal de e
ua
iones.
Existen diferentes formas de expresar un algoritmo, algunas de ellas son:
Diagrama de Flujo: Los diagramas de ujo son des
rip
iones gr
as de algoritmos;
usan smbolos
one
tados
on e
has para indi
ar la se
uen
ia de instru
iones y
estn regidos por ISO. Los diagramas de ujo son usados para representar algoritmos pequeos, ya que abar
an mu
ho espa
io y su
onstru
in es laboriosa. Por
su fa
ilidad de le
tura son usados
omo introdu
in a los algoritmos, des
rip
in
de un lenguaje y des
rip
in de pro
esos a personas ajenas a la
omputa
in.
Pseudo
digo: Pseudo
digo es la des
rip
in de un algoritmo que asemeja a un
lenguaje de programa
in pero
on algunas
onven
iones del lenguaje natural (de
ah que tenga el prejo pseudo, que signi
a falso). Tiene varias ventajas
on respe
to a los diagramas de ujo, entre las que se desta
a el po
o espa
io que se
requiere para representar instru
iones
omplejas. El pseudo
digo no est regido
por ningn estndar.
1 Introdu
on.
denen su estru
tura y el signi
ado de sus elementos y expresiones. Al pro
eso por el
ual se es
ribe, se prueba, se depura, se
ompila y se mantiene el
digo fuente de un
programa informti
o se le llama programa
in.
2 Qu es Python?.
Python es un lenguaje de programa
in interpretado1
reado por Guido van Rossum
en el ao de 1991. Se
ompara habitualmente
on T
l, Perl, S
heme y Ruby. En la
a
tualidad Python se desarrolla
omo un proye
to de software libre2 , al ser un lenguaje
interpretado ahorra un tiempo
onsiderable en el desarrollo del programa, pues no es
ne
esario
ompilar y enlazar.
Es un lenguaje muy expresivo, es de
ir los programas son muy
ompa
tos, tambin es
muy legible, la sintaxis es muy elegante y permite la es
ritura de programas
uya le
tura
resulta relativamente mas f
il que si utilizramos otro lenguaje de programa
in.
La poten
ia base de Python, se puede extender
on mdulos es
ritos en C o C++. En
la mayora de los sistemas di
hos mdulos se pueden
argar dinmi
amente. Python se
puede adaptar tambin
omo lenguaje de extensin (ma
ros3 ) de apli
a
iones existentes.
Ahora que estas emo
ionado
on el Python, querrs examinarlo
on mas detalle. Como
la mejor manera de aprender un lenguaje es
omenzar a utilizarlo. Para ha
er nuestros
programas en Python, vamos a utilizar el interprete de Python y posteriormente el editor
de texto vim, el
ual puedes en
ontrar en
ualquier distribu
in de linux.
Tambin men
ionaremos algunas libreras que son tiles para el desarrollo de programas visuales,
l
ulos e interfa
es, para poder tener un mejor
ono
imiento de nuestro
lenguaje de programa
in.
2.0.2.
El Interprete de Python.
En Linux podemos ini
iar una sesin de trabajo es
ribiendo Python en la lnea de
ordenes. El sistema nos responder dando un mensaje informativo sobre la versin de
Python que estamos utilizando y a
ontinua
in nos mostrara el prompt. El prompt es
una serie de
ara
teres > > > que pare
e en la ltima lnea que indi
a a Python que
esta listo para que nosotros introduz
amos una orden utilizando el te
lado.
Para salir del intrprete de Python ah que te
lear un
ar
ter de n de
hero (ControlD) puedes salir del intrprete te
leando las siguientes ordenes: import sys; sys.exit()
quit().
El interprete fun
iona
omo una simple
al
uladora tu te
leas una expresin y l muestra el resultado. La sintaxis de las expresiones es bastante intuitiva, es
ribiremos una
1
Un interprete lee un programa es
rito en lenguaje de alto nivel instru
in a instru
in y, para
ada
una de ellas, efe
ta una tradu
in a las instru
iones de
digo de maquina equivalentes y las
eje
uta inmediatamente.
2
Es el trmino
on el que se
ono
e al software distribuido y desarrollado libremente.
3
Es una serie de datos que se alma
enan para que se puedan eje
utar de forma se
uen
ial mediante una
sola llamada u orden de eje
u
in.
2 Qu es Python?.
expresin aritmti
a, por ejemplo 2+2 y pulsaremos la te
la intro. Python evala la
expresin (es de
ir obtiene el resultado) y responde mostrando el resultado en pantalla.
1 >>> 2+2
2 4
3 >>>
La ltima lnea es nuevamente la del prompt: Python a
ab de eje
utar la ltima linea
ordenada y nos pide que introduz
amos una nueva orden.
2.0.3.
Los operadores aritmti
os en Python nos permiten, bsi
amente, ha
er
ualquier opera
in aritmti
a, que ne
esitamos (ejemplo: suma, resta, multipli
a ion, et
.). En la
siguiente tabla se muestra los operadores de los que disponemos:
Opera
in
Operador
Aridad
Ejemplo
Exponen ia in
**
Binario
x=2**6 resultado 64
Identidad
Unario
x=+2 resultado +2
Cambio de Signo
Unario
x=-2 resultado -2
Multipli a in
Binario
x=2*6 resultado 12
Divisin
Binario
Divisin Entera
//
Binario
Binario
x=7 %2 resultado 1
Mdulo
Suma
Binario
x=5+5 resultado 10
Resta
Binario
x=15-5 resultado 10
Vamos a estudiar rpidamente los operadores aritmti
os. El operador binario de exponen
ial que se denota
on dos asteris
os juntos, no separados por ningn espa
io en
blan
o: **. Si tenemos la nota
in matemti
a
onven
ional 26 en Python se la expresamos
omo 2 ** 6.
1 >>> 2 6
2 64
3 >>>
Los operadores unario de identidad y
ambio de signo (+ y -) nos sirven para denir
si utilizamos un nmero positivo o negativo.
1 Identidad
2 >>>+2
2 Qu es Python?.
3
4
5
6
7
8
2
>>>
Cambio de s i g n o
>>>2
2
>>>
x 6
en nuestro
>>>26
12
>>>
>>>85
40
>>>
El operador modulo que se denota por el operador de por
entaje %, el
ual devuelve
el resto de la divisin entre dos operandos.
1 >>>7 %2
2 1
3 >>>
Las opera
iones de suma y resta se representan por los smbolos + y - respe
tivamente
y operan sobre valores numri
os.
1 >>>5+5
2 10
3 >>>155
4 10
5 >>>
2.0.4.
Los operadores lgi
os en Python son: y lgi
o and (
onjun
in), el o lgi
o
or (disyun
in), y el no lgi
o not (nega
in). El
omportamiento de un operador
lgi
o suele denirse mediante su
orrespondiente tabla de verdad4 , en ella se muestra
4
Se emplean para determinar los posibles valores de una expresin o proposi in.
10
2 Qu es Python?.
el resultado que produ
e la apli
a
in de un determinado operador a uno o dos valores
lgi
os.
Operador n-ario AND (
onjun
in): Es verdadero, si y solo si los operandos son verdaderos, enton
es devuelve verdadero, si hay alguno que sea falso enton
es devuelve falso.
p
p AND q
Operador n-ario OR (disyun
in): Apli
ado a 2 o mas operadores, si todos son falsos
devuelve falso en
aso
ontrario devuelve verdadero.
Operador
vi
eversa.
unario NOT
p OR q
NOT p
Opera in
<
Menor que
==
Igual que
!=
Distinto que
<=
>
Mayor que
11
2 Qu es Python?.
2.0.5.
Operador
Opera in
<
Menor que
>=
2.0.5.1. Nmeros .
Enteros.
Los nmeros enteros son aquellos nmeros positivos o negativos que no tiene de
imales.
En Python se pueden representar mediante el tipo int (de integer, entero). o el tipo long
(largo). La ni
a diferen
ia es que el tipo long permite alma
enar nmeros ms grandes.
Es re
omendable no utilizar el tipo long a menos que sea ne
esario para no malgastar la
memoria.
El tipo int de Python se implementa a bajo nivel mediante un tipo long de C. Y dado
que Python utiliza C por debajo, el rango de los valores que puede representar depende
de la plataforma. En la mayor parte de las maquinas el long de C se representa utilizando
32 bits, es de
ir, una variable tipo int en Python puede alma
enar nmeros de 231 a
231 1, el tipo long en Python permite alma
enar nmeros de
ualquier pre
isin, estando
limitados solo por la memoria disponible en la mquina.
Al asignar un nmero a una variable esta pasar a tener tipo int, a menos que el
nmero sea tan grande
omo para requerir el uso del tipo long.
Reales.
Los nmeros reales son los que tienen de
imales. En Python se expresan mediante
el tipo oat. Python implementa un tipo oat a bajo nivel mediante una variable de
tipo double en C, es de
ir utilizando 64 bits, luego en Python siempre se utiliza doble
pre
isin, y en
on
reto se sigue el estndar IEEE 754 5 , 1 bit para el signo, 11 para los
exponente y 52 para la mantisa. Esta signi
a que los valores que podemos representar
van desde 2, 2250738585072020 10308 hasta 1, 7976931348623157 10308 .
Tambin se puede utilizar nota
in
ient
a, y aadir una e (de exponente) para
indi
ar un exponente en base 10. Por ejemplo:
5
Es el estndar ms extendido para las
omputa
iones en punto otante, y es seguido por mu
has de
las mejoras de CPU y FPU.
12
2 Qu es Python?.
r e a l = 0 . 1 e 3
Los nmeros
omplejos son una extensin de los nmeros reales, estos representan todas
las ra
es de los polinomios, a diferen
ia de los reales. Enton
es los nmeros
omplejos son
aquellos que tienen una parte imaginaria, una
ara
tersti
a de Python es que podemos
trabajar
on nmeros
omplejos, ya que la gran mayora de los lenguajes de programa
in
are
en de estos.
Un nmero
omplejo naliza siempre
on la letra j, que representa el valor de la raz
uadrada negativa, un nmero
omplejo
on parte real se expresa sumando la parte real
a un nmero
omplejo puro.
Ejemplo:
1 4j
2 1+2 j
3 2.0+3 j
ahora en Python
1
2
3
4
5
6
>>> 1 j
1j
>>> 1 j 1 j
(1+0 j )
>>>1j
omplex ( 0 , 1 )
(1+0 j )
En
on
reto se alma
ena en una estru
tura de C,
ompuesta por dos variables de
tipo double, sirviendo una de ellas para alma
enar la parte real y la otra para la parte
imaginaria.
2.0.5.2. Cadenas.
Las
adenas no son ms que texto en
errado entre
omillas simples ('
adena') o
omillas
dobles (
adena), dentro de las
omillas se puede aadir
ara
teres espe
iales
omo, \n,
el
ar
ter de nueva linea, o \t, el de tabula
in, et
.
Tambin es posible en
errar una
adena entre triples
omillas ( simples o dobles),
de esta forma podemos es
ribir el texto en varias lineas y al imprimir la
adena, se
representarn los saltos de linea que se introdujeron sin tener que re
urrir al
ar
ter \n,
as
omo las
omillas sin tener que ponerlas
omo
ar
ter espe
ial.
1 >>> t r i p l e =" " " p r i m e r a l i n e a
2 . . . segunda l i n e a " " "
3 >>> print t r i p l e
4 primera l i n e a
5 segundalinea
13
2 Qu es Python?.
Las
adenas tambin admiten operadores
omo +, que fun
iona realizando una
on
atena
in de las
adenas utilizadas
omo operadores y *, en la que se repite la
adena
tantas ve
es
omo lo indique el nmero utilizado
omo segundo plano.
1
2
3
4
5
6
7
>>> a = "uno"
>>> b = " dos "
>>>
= a+b
>>> print
unodos
>>>print a 2
unouno
2.0.5.3. Booleanos.
Una variable de tipo booleano slo puede tener dos valores: True (
ierto) o false (falso),
estos valores son espe
ialmente importantes para las expresiones
ondi
ionales y los
i
los,
adems los valores booleanos son el resultado de expresiones que utilizan operadores
rela
ionales (
ompara
in entre valores).
Ejemplo:
1 >>> r = 5 == 3
2 >>> print r
3 False
4 >>>
14
#! / u s r / b i n / e n v
python
ahora guardamos los
ambios, eje
utar este programa es muy sen
illo
omo indi
arle
el nombre del ar
hivo a eje
utar al intrprete de Python.
python h o l a . py
La primera linea se le
ono
e
omo shebang o hashbang 2 , enseguida ponemos la dire
in de donde se en
uentra nuestro intrprete y la op
in env (de environment, entorno)
para preguntar al sistema por la ruta al intrprete de Python, de modo que no tengamos
ningn problema si se diera el
aso de que el programa no estuviera instalado en di
ha
ruta. La segunda linea es una palabra reservada la
ual nos manda a imprimir la
adena
Hola mundo.
Otra forma de de eje
utar nuestro programa, es dndole permisos de eje
u
in, esto lo
ha
emos
on
hmod +x h o l a . py
3.2. Comentarios.
La legibilidad de los programas es
lave para ha
erlos pr
ti
os,
uando
omenzamos a
es
ribir programas de mayor tamao es ms dif
il
omprender lo que estamos ha
iendo
para otros programadores o in
luso llegar a re
ordar lo que hi
imos nosotros mismos
uando queremos revisar algn programa. Una manera de solu
ionar esto es
onsiste en
1
2
15
#Mi
primer
programa
#! / u s r / b i n / e n v
#E s t o
es
un
en
Python
python
omentario
en
Python
#I m p r i m e
en
pantalla
Es buena pra ti a que omentes tus programas, observa que podemos olo ar omentarios en ualquier lugar donde reamos onveniente.
La forma ms sen
illa de obtener informa
in por parte del usuario es mediante la
fun
in raw_input(entrada en bruto), esta fun
in ha
e lo siguiente: detiene la eje
u
in
del programa y espera a que el usuario es
riba un texto y pulse la te
la enter, en ese
momento prosigue la eje
u
in.
Ejemplo
1
2
3
4
5
#! / u s r / b i n / e n v
#O b t e n e r
nombre
#I m p r i m e
lo
python
por
el
usuario
#! / u s r / b i n / e n v
#O b t e n e r
nombre
#O b t i e n e
nmero
python
entero
16
En los ejemplos que hemos visto utilizamos las
adenas que pueden usarse tambin
para mostrar textos por pantalla en
ualquier momento a travs de la fun
in print. Si
queremos mostrar el
ontenido de una variable basta
on suprimir las
omillas para que
muestre el
ontenido de di
ha
adena.
Una senten
ia print puede mostrar ms de un resultado en una misma linea, basta
on separar
on
omas todos los valores que deseamos mostrar,
ada una de las
omas
se tradu
e en un espa
io de separa
in.
1
2
3
4
#! / u s r / b i n / e n v
python
#i m p r i m i m o s
todo
en
un
solo
Hexade imal
Espe i ador
Formato
%s
Cadena
%d
Entero
%o
O tal
%f
Real
Esto mismo lo podemos apli
ar en
adenas para mostrar el nmero de
ara
teres de la
adena que ne
esitemos mostrar.
17
La primera senten
ia
ondi
ional es un if (del ingls si) seguido por la
ondi
in que
se va a evaluar, dos puntos (:) y en la siguiente linea e identado, el
digo a eje
utar si
es que la
ondi
in se
umple.
1 #! / u s r / b i n / e n v p y t h o n
2 a=i n t ( raw_input ( ' I n t r o d u
e v a l o r de a : ' ) )
3 b=i n t ( raw_input ( ' I n t r o d u
e v a l o r de b : ' ) )
4 i f b!=0:
#O b s e r v a l o s d o s p u n t o s , q u e i n d i
a
5
#e l f i n d e l a s e n t e n
i a
if
6
x=a/b
#La i d e n t a
i n e s muy i m p o r t a n t e e n P y t h o n
7
print ' S o l u
i n : ' , x
# por que a s i d i s t i n g u e l o que s e va a
8
#e j e
u t a r d e n t r o d e l i f .
Ahora nuestro programa nos indi
a que tenemos una divisin por 0 y que no la puede
realizar.
18
Como podemos observar es muy importante la identa
in, por que as Python va a
saber que es lo que tiene que eje
utar si se
umple la
ondi
in if, o en
aso
ontrario de
que no se
umpla que ah que realizar.
Existe una
ontra
in del else ... if ... que es elif:
1 #! / u s r / b i n / e n v p y t h o n
2 numero=i n t ( raw_input ( 'Da un nmero ' ) )
3 i f numero < 0 :
4
print ' Nmero n e g a t i v o '
5 e l i f numero > 0 :
6
print ' Nmero p o s i t i v o '
7 else :
8
print ' Cero '
Es de
ir el elif s i se
umple la
ondi
in del elif se eje
uta se eje
uta su
digo, si no
se
umple se eje
uta el
digo que
umple el else.
Ejemplo de lo visto:
1
2
3
#! / u s r / b i n / e n v
python
from
math
import
sqrt
19
4.0.2.
Bu les o Ci los.
Mientras que los
ondi
ionales nos permiten eje
utar distintos fragmentos de
digo,
los bu
les o
i
los nos permiten eje
utar un mismo fragmento un numero determinado
de ve
es, mientras que se
umpla alguna
ondi
in.
4.0.2.1. while.
El bu
le
i
lo while (mientras) eje
uta un fragmento del
digo mientras se
umpla
la
ondi
in. La sintaxis seria la siguiente:
while
ondi
in :
a
in
......
......
......
Ejemplo:
1
2
3
4
5
6
#! / u s r / b i n / e n v
python
i =0
while i <10:
print i
i+=1
print ' Rermina
i
l o '
Como podemos ver, nuestro bu
le nos imprime hasta que se
umpla la
ondi
in, mientras i sea menor a 10, imprime el valor de i,
uando la
ondi
in no se
umpla termina
el
i
lo y
ontinua
on el siguiente fragmento de
digo. Ah que tener en
uenta que si
no se
umple la
ondi
in de paro, nuestro bu
le puede no tener n nun
a, a esto se le
ono
e
omo bu
le innito.
Veamos algunos ejemplos mas tiles.
Supongamos que ne
esitamos
al
ular la suma de los primeros 1000 nmeros, es de
ir,
un programa que
al
ule:
20
i=0
Esto no es fun
ional, es muy problemti
o tener que es
ribir los nmeros del 1 al 1000,
mejor utilizaremos nuestro bu
le while, as no tendremos que es
ribir mu
ho.
1
2
3
4
5
6
7
#! / u s r / b i n / e n v
python
i =1
sumatoria=0
while i <=1000:
sumatoria+=i
i+=1
print sumatoria
Como podemos observar
on unas
uantas lineas somos
apa
es de ahorrarnos todo el
trabajo de es
ribir todos los nmeros
on nuestro bu
le while.
Ahora que pasara si queremos que
al
ule la suma de
ualquier nmero, adems que
el usuario pueda de
idir
uando el programa termine su eje
u
in. Para esto vamos a
utilizar nuevamente nuestro bu
le while.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#! / u s r / b i n / e n v
python
21
4.0.2.2. for-in.
Hay otro tipo de bu
le en Python, el bu
le for-in, que se puede interpretar
omo para
todo elemento de una serie, ha
er .... y
omo tal intenta fa
ilitar su uso en este n.
f o r v a r i a b l e i n s e r i e de v a l o r e s :
a
in
a
in
.....
Veamos un pequeo ejemplo para entender mejor el fun ionamiento de nuestro bu le.
1
2
3
4
#! / u s r / b i n / e n v
python
Primero tenemos una rela
in de nombres en
errada entre
or
hetes y
ada nombre es
separado por una
oma, se trata de una lista, la
ual estudiaremos ms adelante. Lo que
ha
e el bu
le es, para
ada elemento que tengamos en se
uen
ia, eje
uta las siguientes
lineas de
digo. La
abe
era del bu
le es obtener el siguiente elemento de la se
uen
ia
y lo alma
ena en la variable, de esta manera, la variable elemento, en nuestra primera
itera
in valdr pepe, en la segunda ana y en la ter
era juan.
Ahora supongamos que queremos imprimir los nmeros de el 1 al 100, esto seria muy
laborioso, por que
on lo que hemos aprendido hasta ahora tendiramos que utilizar un
i
lo for,
on una lista [1,2,3,.....,100, adems de que es un programa po
o elegante, en
su lugar utilizaremos la fun
in predenida range() de Python que expli
aremos ms
adelante para podernos ahorrar todo este trabajo extra.
1
2
3
#! / u s r / b i n / e n v
python
for i in range ( 1 , 1 0 1 ) :
print i
22
5 Cole
iones.
Como hemos visto anteriormente tenemos algunos tipos de datos bsi
os,
omo nmeros,
las
adenas de texto y los booleanos, Python nos propor
iona
ole
iones de datos estru
turas avanzadas
omo: listas, tuplas y di
ionarios, los que serian equivalentes en
otros lenguajes a ve
tores, arrays y matri
es.
5.1. Listas.
Las listas son un tipo de
ole
in ordenada. Seria equivalente a un ve
tor, estas pueden
ontener
ualquier tipo de dato: nmeros,
adenas, booleanos e in
luso tambin listas. La
estru
tura para
rear una lista es, indi
ar entre
or
hetes los elementos que ne
esitamos,
separados por
omas
ada uno de ellos:
l i s t a =[ elem1 , elem2 , . . . , elem n
#! / u s r / b i n / e n v
python
Si queremos a
eder a un elemento de una lista dentro de otra lista, tendremos que
utilizar dos ve
es el operador, primero para indi
ar a que posi
in de la lista externa
queremos a
eder y el segundo para sele
ionar el elemento de la lista interior.
Ejemplo:
1
2
3
4
#! / u s r / b i n / e n v
python
del
la
lista
lista
externa
interna .
#! / u s r / b i n / e n v
python
Diana
El uso de
or
hetes para a
eder y modi
ar los elementos de una lista es
omn en
mu
hos lenguajes, pero Python nos guarda mu
has sorpresas agradables.
23
5 Cole
iones.
Una
uriosidad sobre el operador [ de Python es que podemos utilizar tambin nmero
negativos. Si se utiliza un nmero negativo
omo ndi
e, esto se tradu
e en que el ndi
e
empieza a
ontar desde el nal, ha
ia la izquierda es de
ir,
on [-1 a
ederamos al ltimo
elemento de la lista,
on [-2 al penltimo,
on [-3 al antepenltimo y as su
esivamente.
Ejemplo:
1
2
3
#! / u s r / b i n / e n v
python
Otra
osa importante en Python es lo que se
ono
e
omo sli
ing o parti
ionado, que
onsiste en ampliar este me
anismo para permitir sele
ionar por
iones de la lista. Si
en lugar de un nmero es
ribimos dos nmeros ini
io y n separados por dos puntos
(ini
io:n) Python interpretar que queremos una lista que vaya des la posi
in ini
io
a la posi
in n, sin in
luir este ltimo. Si es
ribimos tres nmeros (ini
io:n:salto) en
lugar de dos, el ter
ero se utiliza para determinar
ada
uantas posi
iones aadir un
nuevo elemento a la lista.
Ejemplo:
1
2
3
4
5
6
#! / u s r / b i n / e n v
python
Los nmero negativos tambin se pueden utilizar en un sli
ing,
on el mismo
omportamiento. Hay que men
ionar que no es ne
esario indi
ar el prin
ipio y el nal del sli
ing,
sino que, si estos se omiten, se usara por defe
to las posi
iones de ini
io y n de la lista:
Ejemplo:
1
2
3
4
#! / u s r / b i n / e n v
python
Tambin podemos utilizar este me
anismo para modi
ar las listas, in
luso modi
ar
el tamao de la lista, si la lista de la parte dere
ha de la asigna
in tiene un tamao
menor o mayor que el de la sele
in de la parte izquierda de la asigna
in.
Hasta el momento hemos aprendido a
onstruir y modi
ar listas de diferentes modos,
pero nos falta,
mo leer listas desde el te
lado. Podemos utilizar nuestra fun
in que ya
ono
emos raw_input
on el parmetro list.
1
2
3
#! / u s r / b i n / e n v
python
La fun
in list devuelve una lista a partir de una
adena, pero
ada elemento de la
lista es un
ar
ter de una
adena, esto quiere de
ir que el nmero 2 se interpreta
omo
un
ar
ter y no
omo un entero.
24
5 Cole
iones.
Para leer listas, lo que ne
esitamos ha
er es ir leyendo la lista elemento a elemento y
onstruir la lista paso a paso, esto lo podemos ha
er utilizando un
i
lo y una fun
in
predeterminada llamada range que expli
aremos mas adelante.
1
2
3
4
5
6
#! / u s r / b i n / e n v
python
l i s t a =[
for i in range ( 5 ) :
elemento = i n t ( raw_input ( "Dame un elemento : " ) )
l i s t a =l i s t a +[ elemento
print l i s t a
Tambin existe la fun
in append, que evita que
ada
on
atena
in genera una lista
nueva
opiando los valores de la antigua y aadiendo el elemento re
in ledo.
1
2
3
4
5
6
#! / u s r / b i n / e n v
python
l i s t a =[
for i in range ( 5 ) :
elemento = i n t ( raw_input ( "Dame un elemento : " ) )
l i s t a . append ( elemento )
print l i s t a
a =[1 ,2 ,3 ,4 ,5
del a [ 1
La senten
ia del no produ
e una
opia de la lista sin la
elda borrada, sino que modi
a
dire
tamente dire
tamente sobre la lista que opera, tambin ah que tener en
uenta que
el borrado de elementos de una lista es peligroso
uando se mez
la
on el re
orrido de
las mismas.
1
2
3
4
5
6
7
8
9
#! / u s r / b i n / e n v
python
a = [1 ,2 , 1 , 4 ,5 , 2
i =0
while i < l e n ( a ) :
i f a [ i <0:
del a [ i
else :
i+=1
print a
Otra fun
in importante de las listas es que podemos
rear listas de listas, Para que
nos sirve
rear listas de listas?. Supongamos que ne
esitamos representar una matriz, la
ual en nota
in matemti
a seria:
1 1 4 2
1
0 3 1 5 2
M =
3 2 3 3 1
1 1 2 2 3
2 1 2 1 4
25
5 Cole
iones.
Con una lista de nmeros no se puede representar una matriz pero, si
on una lista de
lista:
>>M= [ [ 1 , 2 , [ 3 , 4
.
.
.
.
.
.
n
Si deseamos leer una matriz de tamao determinado, podemos
rear una matriz y
rellenar
ada uno de sus
omponentes:
1 #! / u s r / b i n / e n v p y t h o n
2
3 #P e d i m o s l a d i m e n s i n d e l a m a t r i z
4 m=i n t ( raw_input ( "Dame e l numero de l a s f i l a s : " ) )
5 n=i n t ( raw_input ( "Dame e l numero de l a s
olumnas : " ) )
6 #Creamos l a m a t r i z n u l a
7 M= [
6 for i in range (m) :
8
M. append ( [ 0 n )
9
26
5 Cole
iones.
10
11
12
13
14
#L l e n a m o s
los
elementos
de
la
matriz .
Desarrollemos un programa que nos ayude a ha
er opera
iones
on matri
es, lo primero
que ne
esitamos saber es
omo se realizan las opera
iones
on matri
es:
Para realizar la suma y resta ne
esitamos dos matri
es de la misma dimensin, A = aij
y B = bij , y se dene la suma de matri
es
omo A+ B = aij + bij . Es de
ir aquella matriz
uyos elementos se obtienen sumando los elementos de las dos matri
es que o
upan la
misma posi
in.
1 2
Sea A =
3 4
y
B=
2 5
6 7
La suma de A + B :
A+B =
1+2 2+5
3+6 4+7
esto es igual a
3 7
9 11
#! / u s r / b i n / e n v
#P e d i m o s
los
python
datos
de
la
matriz
la
matriz
A omo
matriz
B omo
matiz
nula
A= [
for i in range (m) :
A. append ( [ 0 n )
#I n i
i a l i z a m o s
la
matriz
nula
B= [
for i in range (m) :
27
5 Cole
iones.
17
B . append ( [ 0 n )
18
19 #P e d i m o s l o s d a t o s d e l a m a t r i z A
20
21 print " Datos de l a matriz A: "
22 for i in range (m) :
23
for j in range ( n ) :
24
A[ i [ j = i n t ( raw_input ( "Dame e l
omponente ( %d, %d ) : " %(i , j ) ) )
25
26 #P e d i m o s l o s d a t o s d e l a m a t r i z B
27
28 print " Datos de l a matriz B: "
29 for i in range (m) :
30
for j in range ( n ) :
31
B [ i [ j = i n t ( raw_input ( "Dame e l
omponente ( %d, %d ) : " %(i , j ) ) )
32
33 #I n i
i a l i z a m o s l a m a t r i z C
omo n u l a
34 #En d o n d e vamos a g u a r d a n u e s t r o s r e s u l t a d o s
35
36 C= [
37 for i in range (m) :
38
C. append ( [ 0 n )
39
40 #Ha
emos l a suma d e l a s m a t r i
e s A y B
41
42 for i in range (m) :
43
for j in range ( n ) :
44
C[ i [ j =A[ i [ j +B[ i [ j
45
46 #M o s t r a m o s e l r e s u l t a d o
47 print "Suma : "
48 for i in range (m) :
49
for j in range ( n ) :
50
print C[ i [ j
51
print
Ahora para realizar la resta de matri
es lo ni
o que tenemos que modi
ar son nuestras
lineas donde ha
emos las opera
iones:
1
2
3
4
5
6
7
#A q u i
ha emos
#p r o g r a m a
#l a s
el
ambio
anterior
matri es
para
de
signo
de
nuestro
restar
A y B.
La siguiente opera
in a realizar es la multipli
a
in de matri
es, la
ual es ms
ompli
ado, primero veamos las reglas para multipli
ar matri
es.
El produ
to de matri
es slo se puede denir si el nmero de
olumnas de la matriz A
es el mismo nmero de las de la matriz B, esto quiere de
ir que si las matri
es son Amn
y Bnp enton
es el produ
to matri
ial de AB es una matriz resultante C de la forma
Cmp , donde
ada elemento de C esta denido por :
28
5 Cole
iones.
Cij =
n
P
air brj
r=1
Sea:
A=
1 0 2
1 3 1
3 1
B= 2 1
1 0
enton es,
AB =
(1 3 + 0 2 + 2 1)
(1 1 + 0 1 + 2 0)
(1 3 + 3 2 + 1 1) (1 1 + 3 1 + 1 0)
5 1
4 2
Ahora que ya sabemos
omo se realiza una multipli
a
in de matri
es, vamos ha
er
nuestro programa para automatizar este algoritmo.
Lo primero es pedir el nmero de las y
olumnas de la primera matriz y slo el nmero
de
olumnas de la segunda
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#! / u s r / b i n / e n v
python
matri es
nulas
A= [
for i in range ( p ) :
A. append ( [ 0 q )
B= [
for i in range ( q ) :
B . append ( [ 0 r )
#L l e n a m o s
las
matri es
for i in range ( p ) :
for j in range ( q ) :
A[ i [ j = i n t ( raw_input ( "Dame e l
omponente ( %d , %d ) : " %(i , j ) ) )
for i in range ( q ) :
for j in range ( r ) :
B [ i [ j = i n t ( raw_input ( "Dame e l
omponente ( %d , %d ) : " %(i , j ) ) )
#Creamos
la
matriz
resultante
29
5 Cole
iones.
29 C= [
30 for i in range ( p ) :
31
C. append ( [ 0 r )
32
33 #E f e
t u a m o s l o s
a l
u l o s
34
35 for i in range ( p ) :
36
for j in range ( r ) :
37
for k in range ( q ) :
38
C[ i [ j +=A[ i [ k B[ k [ j
39
40 #M o s t r a m o s e l r e s u l t a d o
41
42 print " M u l t i p l i
a
i o n : "
43 for i in range ( p ) :
44
for j in range ( r ) :
45
print C[ i [ j
46
print
A=
1 2
3 4
At
1 3
2 4
#! / u s r / b i n / e n v
#P e d i m o s
la
python
matriz
las
matri es
M= [
for i in range (m) :
M. append ( [ 0 n )
T= [
for i in range ( n ) :
T. append ( [ 0 m)
#L l e n a m o s
la
matriz
30
5 Cole
iones.
23
24
25
26
27
28
29
30
31
32
33
34
for j in range ( n ) :
M[ i [ j = i n t ( raw_input ( "Dame e l
omponenete ( %d , %d ) : " %(i , j ) ) )
#Ha
emos
los
ambios
en
la
matriz .
for i in range ( n ) :
for j in range (m) :
T[ i [ j =(M[ j [ i )
#I m p r i m i m o s
la
Matriz
print T
5.2. Tuplas.
Todo lo que hemos expli
ado sobre las listas apli
a tambin a las tuplas,
on la ex
ep
in de la forma de denirlas, por lo que se utilizan parntesis en lugar de
or
hetes.
1 t u p l a =(1 ,2 ,3 , " python" )
Es importante poner las
omas, por que la
oma es el
onstru
tor de la tupla, esto
quiere de
ir que si queremos denir una tupla de un solo elemento tenemos que ponerle
una
oma al nal, para diferen
iarlo de un elemento entre parntesis.
t u p l a =("un e l e m e n t o " , )
[
1
2
3
4
Para referirnos a los elementos de una tupla, omo en una lista, se utiliza el operador
#! / u s r / b i n / e n v
python
t u p l a = ( 1 , 2 , 3 , 4 , " python" )
t=t u p l a [ 1
print t
Podemos utilizar el operador [, debido a que las tuplas, al igual que las listas forman,
parte de un tipo de objeto llamado se
uen
ia.
Su diferen
ia
on las listas esta en que las listas es que son inmutables, es de
ir, su
valor valor no puede modi
arse una vez
reada y tienen un tamao jo. A
ambio de
estas limita
iones las tuplas, son mas ligeras, que las listas por lo que si el uso que le
vamos a dar a una
ole
in es muy bsi
o, puede utilizarse en lugar de una lista y as
podemos ahorrar memoria.
5.3. Di
ionarios.
Los di
ionarios tambin llamados matri
es aso
iativas, deben su nombre a que son
ole
iones que rela
ionan una
lave y un valor. Por ejemplo:
d={" Love A
t u a l l y " : " Ri
hard C u r t i s " ,
" K i l l B i l l " : " Tarantino " ,
" Amelie " : " Jean P i e r r e r Jenuet "}
31
5 Cole
iones.
El primer valor se trata de la
lave y el segundo valor aso
iado a la
lave. Como
lave
podemos utilizar
ualquier valor inmutable: podramos usar nmeros,
adenas, booleanas,
tuplas, pero no listas o di
ionarios, por que son mutables. Esto es as por que las di
ionarios se implementan
omo una tabla hash1 y a la hora de introdu
ir un nuevo par
lave-valor en el di
ionario se
al
ula el hash de la
lave para despus poder en
ontrar
la entrada que le
orresponde rpidamente.
Los di
ionarios no tienen
on
epto alguno de orden entre sus elementos. Es in
orre
to
de
ir que los elementos estn desordenados; simplemente no hay orden. Esta distin
in
es importante, y le estorbar
uando intente a
eder a los elementos de un di
ionario
en un orden espe
o y repetible (
omo el orden alfabti
o de las
laves). Hay formas
de ha
er esto, slo que no forman parte de los di
ionarios.
32
6 Fun
iones.
Una fun
in es un
onjunto de lneas de
digo que realizan una tarea espe
a y
puede retornar un valor. Las fun
iones pueden tomar parmetros que modiquen su
fun
ionamiento. Las fun
iones son utilizadas para des
omponer grandes problemas en
tareas simples y para implementar opera
iones que son
omnmente utilizadas durante
un programa y de esta manera redu
ir la
antidad de
digo. Cuando una fun
in es
invo
ada se le pasa el
ontrol a la misma, una vez que esta naliz
on su tarea el
ontrol
es devuelto al punto desde el
ual la fun
in fue llamada.
FUNCIONES
Programa Principal
Proceso A
Proceso B
Procesos
Procesos
Proceso A
Proceso B
Fin
Fin
Fin
Python nos propor
iona dos tipos de fun
iones a utilizar, las fun
iones predenidas las
uales ya estn in
luidas en Python y estn listas para usarse o tambin podemos
rear
nuestras propias fun
iones para ade
uarlas a los requerimientos de nuestros problemas.
33
6 Fun
iones.
2 [2 ,3 ,4 ,5 ,6 ,7 ,8 ,9
3 >>>
Observa que la lista devuelta
ontiene todos los enteros
omprendidos entre los argumentos de la fun
in, in
luyendo al primero, pero no el ultimo.
Podemos utilizar la fun
in range()
on uno, dos o tres argumentos. Si utilizamos
range()
on un argumento estaremos espe
i
ando ni
amente el ultimo valor de la serie,
pues el primero vale por defe
to 0.
1 >>>range ( 5 )
2 [0 ,1 ,2 ,3 ,4
3 >>>
Si usamos tres argumentos, el ter
ero permite utilizar un in
remento para la serie de
valores:
1 >>>range ( 2 , 1 0 , 2 )
2 [2 ,4 ,6 ,8
3 >>>range ( 2 , 1 0 , 3 )
4 [2 ,5 ,8
5 >>>
Otra fun
in predenida que podemos utilizar es abs(), esta nos ayuda a sa
ar el valor
absoluto de un nmero:
1 >>>abs ( 3)
2 3
3 >>>
Si round re
ibe dos argumentos, estos deben ir separados por
omas y el segundo indi
a
el nmero de de
imales que deseamos
onservar en el redondeo.
1 >>>round ( 2 . 1 4 1 5 , 2 )
2 2.14
3 >>>round ( 2 . 1 4 1 5 , 3 )
4 2.141
5 >>>
Existen mu has ms fun iones predeterminadas que podemos utilizar, ya hemos men ionado algunas, puedes onsultar mu has mas en la gua de referen ia de Python.
34
6 Fun
iones.
indi
arle a Python que vamos a ne
esitarlas. Para ello, es ne
esario importar
ada fun
in
de un modulo.
Para importar un modulo lo ni
o que ne
esitamos saber es el nombre del modulo y
la fun
in o fun
iones que ne
esitamos utilizar:
1 #! / u s r / b i n / e n v p y t h o n
2 from math import s i n #I m p o r t a m o s e l m o d u l o math y l a f u n
i o n
3
4 n=i n t ( raw_input ( "Dame un numero para
a l
u l a r e l seno : " ) )
5
6 print s i n ( n )
sin
Cuando importamos una fun
in, Python aprende su deni
in y nos permite utilizarla.
Si queremos utilizar alguna otro fun
in de nuestro modulo math, ne
esitamos indi
arle
a Python
ual es por que en este momento solo
ono
e la fun
in sin.
En una misma lineas podemos importar varios mdulos:
from math import s i n ,
o s
aunque puede resultar
ompli
ado importar un gran nmero de fun
iones y mdulos,
as que Python nos ofre
e la op
in de importar todos los elementos de un modulo si
utilizamos un asteris
o. Por ejemplo si queremos ver importar todo lo que tiene nuestro
modulo math :
from math import
Podemos importar y utilizar
ualquiera otro modulo de la misma manera que lo hi
imos
on math, tanto originales de Python
omo otros que hayas bajado de internet o in
luso
alguno que hagamos nosotros mismos.
35
6 Fun
iones.
Cabecera
def cuadrado(x):
Parametro
Cuerpo de la funcion
return x**2
cuadrado(x)
Argumento
Las reglas para dar nombre a nuestras fun
iones y a sus parmetros son: slo se pueden
usar letras, dgitos y el guin bajo, la primera letra del nombre no puede ser nmero y
no se pueden utilizar palabras reservadas. Cada nombre debe identi
ar
laramente un
ni
o elemento: una variable o una fun
in.
Veamos un pequeo ejemplo de la deni
in de una fun
in:
1
2
3
4
5
6
7
8
#! / u s r / b i n / e n v
python
#D e f i n i i o n
la
de
def
uadrado ( x ) :
return x 2
#Llamado
la
fun
ion
#C u e r p o
de
la
fun in
fu in
print uadrado ( 2 )
Dentro del
uerpo de una fun
in podemos utilizar estru
turas de
ontrol senten
ias
ondi
ionales,
i
los, et
. Una forma usual de devolver valores es atreves de la fun
in
return, en la
ual podemos regresar valores enteros, otantes, booleanos et
. In
luso
dentro de nuestras fun
in podemos ha
er el llamado a otra fun
in ya sea predenida o
que nosotros la denamos.
1
2
3
4
5
6
#! / u s r / b i n / e n v
python
def xseno ( x ) :
return s i n ( x )
#Llamado
fun ion
predefinida .
print xseno ( 1 )
No todas las fun
iones tienen un slo parmetro, podemos denir fun
iones que re
iban
varios parmetros, por ejemplo supongamos que ne
esitamos un programa que nos de el
rea de un re
tngulo y le pedimos al usuario que nos de su altura y su an
ho:
36
6 Fun
iones.
1 #! / u s r / b i n / e n v p y t h o n
2
3 def a r e a ( a l t u r a , an
hura ) :
4
return a l t u r a an
hura
5
6 a=f l o a t ( raw_input ( "Dame e l a l t o : " ) )
7 w=f l o a t ( raw_input ( "Dame e l an
ho" ) )
8
9 print " El a r e a e s : " a r e a ( a ,w)
Los programas se dividen en tres partes, importa
in de mdulos, deni
in de fun
iones y nuestro programa prin
ipal, los
uales puedes
olo
ar, o mandar a llamar en
ualquier parte del programa, pero esto resultara muy dif
il para saber
on
laridad que
es lo que llega ha
er el programa, lo mas re
omendable adems de ser un buen habito para
futuras
orre
iones o si algn otro programador que esta interesado en analizar nuestro
digo, es poner primero las importa
iones, a
ontinua
in las fun
iones y por ultimo
nuestro programa prin
ipal, adems
olo
ar nuestros
omentarios
orrespondientes, para
ha
erlos mas legibles y amigables para a
tualizar.
Dentro del
uerpo de la fun
in es posible denir y usar variables. Existen algunas
propiedades de las variables denidas dentro del
uerpo de la fun
in y que se diferen
ian
de las variables que denimos fuera de
ualquier fun
in, es de
ir, en nuestro programa
prin
ipal.
Ejemplo:
Denamos una fun
in que dado los tres lados del tringulo, devuelvan el valor de su
rea:
p
s(s a)(s b)(s c)
donde s = (a + b + c)/2
El programa quedara:
1 #! / u s r / b i n / e n v p y t h o n
2 from math import s q r t
3
4 def a r e a _ t r i a n g u l o ( a , b ,
) :
5
s =(a+b+
) /2
6
return s q r t ( s ( s a ) ( s b ) ( s
) )
7
8 print a r e a _ t r i a n g u l o ( 1 , 3 , 2 )
En el
uerpo de nuestra fun
in se dene la variable s, la
ual slo existe para nuestra
fun
in area_triangulo, fuera de di
ha fun
in s no esta denida. Las variables que slo
existe en el
uerpo de la fun
in se denominan variables lo
ales y las variables que se
en
uentras en
ontraposi
in. se les llama variables globales. Tambin los parmetros
formales de una fun
in se
onsideran variables lo
ales, as que no es posible a
eder a
ellos fuera del
uerpo de la fun
in.
Otra
ara
tersti
a importante de las fun
iones, es que las variables y
onstantes lo
ales que
ontiene el
uerpo de la fun
in, slo existen dentro de la fun
in, por lo
ual
37
6 Fun
iones.
podramos tener las mismas variables lo
ales en otra fun
in y esto no nos provo
ara
ningn problema, por que al terminar de eje
utarse la fun
in, las variables lo
ales dejan
de existir, para el dems
uerpo de nuestro programa prin
ipal. Imaginemos que queremos un programa que nos ayude a
al
ular el rea de un triangulo de los lados a, b, y
y en el
al
ulo del ngulo (en grados) opuesto al lado a.
El ngulo se
al
ula por la formula:
180
arcsin
2s
bc
donde s es el rea del triangulo y ar
sin es la fun
in ar
o-seno, las fun
iones arcsin
y estn denida en nuestro modulo math
on el identi
ador asin y pi .
1 #! / u s r / b i n / e n v p y t h o n
2 from math import s q r t , a s i n , p i
3
4 def a r e a _ t r i a n g u l o ( a , b ,
) :
5
s =(a+b+
)/2
#s e s una v a r i b l e l o
a l
6
return s q r t ( s ( s a ) ( s b ) ( s
) )
7
8 def a n g u l o _ a l f a ( a , b ,
) :
9
s=a r e a _ t r i a n g u l o ( a , b ,
)
#s e s una v a r i a b l e l o
a l
10
return 180/ p i a s i n ( 2 . 0 s /( b
) )
11
12 def menu ( ) :
13
op
ion =0
14
while op
ion !=1 and op
ion ! = 2 :
15
print " 1) C a l
u l a r e l a r e a de t r i a n g u l o "
16
print " 2) C a l
u l a r angulo opuesto a l primer l a d o "
17
op
ion=i n t ( raw_input ( " Es
oge una op
ion : " ) )
18
return op
ion
19
20 l a d o 1=f l o a t ( raw_input ( "Dar e l l a d o a : " ) )
21 l a d o 2=f l o a t ( raw_input ( "Dar e l l a d o b : " ) )
22 l a d o 3=f l o a t ( raw_input ( "Dar e l l a d o
: " ) )
23
24 s=menu ( )# s e s una v a r i a b l e g l o b l a
25
26 i f s ==1:
27
r e s u l t a d o=a r e a _ t r i a n g u l o ( lado1 , lado2 , l a d o 3 )
28 e l s e :
29
r e s u l t a d o=a n g u l o _ a l f a ( lado1 , lado2 , l a d o 3 )
30
31 print " E s
o g i s t e l a op
ion " , s
32 print " El r e s u l t a d o e s : " , r e s u l t a d o
Observa que en el
uerpo de nuestras fun
iones, tenemos de
larada dos variables s y
que
ada una de ellas tienen variables diferentes. Si a
edemos a s desde area_triangulo
a
edemos a s lo
al a area_triangulo, mientras que las dems variables s de las otras
fun
iones son ignoradas. Si a
edemos a s desde fuera de
ualquier fun
in, a
edemos a
s de la variable global.
38
6 Fun
iones.
Puede que te parez
a absurdo que Python distinga entre variables lo
ales y variables
globales, pero lo
ierto es que disponer de estos dos tipos de variable es de gran ayuda.
Piensa en que o
urrira si la variable s de la primera fun
in fuese global: al a
abar la
eje
u
in de rea_triangulo, s re
ordara el valor 6.0 y habra olvidado el valor 1. El
texto impreso seria errneo, pues se leera as ((Es
ogiste la op
in 6.0000)). Disponer
de variables lo
ales permite asegurarse de que las llamadas a fun
in no modi
aran
a
identalmente nuestras variables globales, aunque se llamen igual.
Las variables lo
ales tambin pueden
ontener valores se
uen
iales. Estudiemos un
ejemplo de fun
in
on una variable lo
al de tipo se
uen
ial: una fun
in que re
ibe una
lista y devuelve o otra
uyos elementos son los de la primera, pero sin repetir ninguno;
es de
ir, si la fun
in re
ibe la lista [1, 2, 1, 3, 2, devolver la lista [1, 2, 3. Empe
emos
por denir el
uerpo de la fun
in:
1
2
3
4
5
6
7
8
9
10
11
#! / u s r / b i n / e n v
def
python
sin_repetir ( l i s t a ) :
resultado =[
for e le me nt o in l i s t a :
i f e le me nt o not in r e s u l t a d o :
r e s u l t a d o . append ( e le me nt o )
return r e s u l t a d o
u n a _ l i s t a=s i n _ r e p e t i r ( [ 1 , 2 , 1 , 3 , 2 )
una_lista
Una buena idea
onsiste en disponer de una nueva lista auxiliar (una variable lo
al)
ini
ialmente va
a en la que iremos insertando los elementos de la lista resultante. Podemos re
orrer la lista original elemento a elemento y preguntar a
ada uno de ellos si ya
se en
uentra en la lista auxiliar. Si la respuesta es negativa, lo aadiremos a la lista.
La variable resultado es lo
al, as que su tiempo de vida se limita al de la eje
u
in del
uerpo de la fun
in
uando sta sea invo
ada. El
ontenido de resultado se devuelve
on
la senten
ia return, as que ser a
esible desde fuera.
Como hemos visto hasta el momento, las variables lo
ales de una fun
in slo pueden
ser a
esibles desde adentro del
uerpo de nuestra fun
in, pero existe una forma, donde
tambin puedes
onsultar y modi
ar variables globales, pero antes de poder ha
er esto
tenemos que de
irle a Python que ne
esitamos de una variable global, para esto vamos
ha
er uso de la palabra reservada global, veamos un ejemplo rpido.
1
2
3
4
5
6
7
8
9
10
11
12
13
#! / u s r / b i n / e n v
python
var1 =20
var2 =40
var3 =60
def m o d i f i
a _ v a r i a b l e ( )
global var1 , var2 , var3
var1=var1+var2
print " Estado i n i
i a l de l a s v a r i a b l e s : "
print var1
print var2
39
6 Fun
iones.
14
15
16
17
18
19
20
21
print var3
modifi
ar_variable ()
i f var1==var3 :
print " l a v a r i a b l e 1 y l a v a r i a b l e 2 son i g u a l e s "
print " V a r i a b l e 1=" , var1
print " V a r i a b l e 3= " , var3
Hemos visto que desde una fun
in podemos llamar a otra fun
in. Desde esta ultima
fun
in podramos llamar a otra, y desde sta a otra. . . Cada vez que se produ
e una
llamada, la eje
u
in del programa prin
ipal o de la fun
in ((a
tual)) queda suspendida
a la espera de que nali
e la llamada realizada y prosigue
uando sta naliza. Por otra
parte, hemos visto que si una variable lo
al en una fun
in tiene el mismo nombre o que
una variable global, durante la eje
u
in de la fun
in la variable lo
al o
ulta a la global
y su valor es ina
esible. Cmo es posible que al nalizar la eje
u
in Python re
uerde
todo esto?
Python utiliza internamente una estru
tura espe
ial de memoria para re
ordar la informa
in aso
iada a
ada invo
a
in de fun
in: la pila de llamadas a fun
in. Una pila
es una serie de elementos a la que slo podemos aadir y eliminar
omponentes por uno
de sus dos extremos, el que denominamos la
ima. Esto es muy importante por que as
estamos seguros de que no perderemos ninguno de nuestros datos y seguirn un orden.
6.3.1.
Mdulos.
def min ( a , b ) :
i f a<b :
return a
else :
return b
def max( a , b ) :
i f a>b
return a
else :
return b
Ahora en
ualquier programa donde ne
esitemos utilizar nuestras fun
iones de min
y max lo ni
o que ne
esitamos ha
er es es in
luir en nuestro programa prin
ipal la
siguiente linea:
1 from modulo import min , max
40
6 Fun
iones.
Con esta ya tenemos denido nuestras fun
iones en mdulos las
uales vamos a poder
utilizar en
ualquier programa que ne
esitemos.
Aunque se
onsidera una mala pra
ti
a tambin es posible importar todos los nombres
de los mdulos al espa
io de nombres a
tual usando el *.
1 from modulo import
Cuando importas por primera vez el modulo modulo.py en Python, este
reara automti
amente un
hero llamado modulo.py
. Este
hero
ontiene una versin de tu
mdulo ms f
il de
argar en memoria de Python, pero absolutamente ilegible para las
personas, esta
odi
ado en lo que llamamos formato binario. Con esto Python pretende
a
elerar as la
arga de este mdulos que utilizaras en tus programas, pero sin obligarte
a ti a gestionar los
heros .py
.
Si borras el ar
hivo modulo.py
no pasa nada grave, Python volver a
rear
hero
uando
argues nuevamente el modulo modulo.py desde un programa
ualquiera. Si modi
amos el
ontenido de muestro mdulo, Python regenera automti
amente el
hero
modulo.py
para que siempre este
on los nuevos
ambios que hemos realizado.
Veamos un ultimo ejemplo,
rearemos un modulo
on nuestros programas que realizamos anteriormente de opera
iones
on matri
es. Primero vamos a
rear un ar
hivo
llamado matri
es.py
on lo siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#D e f i n i m o s
#F u n i o n
nuestras
de
sumar
fun iones
matri es
def suma ( ) :
m=i n t ( raw_input ( "Dame e l numero de f i l a s : " ) )
n=i n t ( raw_input ( "Dame e l numero de
olumnas : " ) )
#I n i
i a l i z a m o s
la
matriz
A omo
matriz
nula
A= [
for i in range (m) :
A. append ( [ 0 n )
#I n i
i a l i z a m o s
la
matriz
B omo
matiz
matriz
nula
B= [
for i in range (m) :
B . append ( [ 0 n )
#P e d i m o s
los
datos
de
la
los
datos
de
la
matriz
41
6 Fun
iones.
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
donde
la
matriz
C omo
guarda
nuestros
vamos
nula
resultados
C= [
for i in range (m) :
C. append ( [ 0 n )
#Ha
emos
la
suma
de
las
matri es
A y B
el
resultado
de
restar
matri es
def r e s t a ( ) :
m=i n t ( raw_input ( "Dame e l numero de f i l a s : " ) )
n=i n t ( raw_input ( "Dame e l numero de
olumnas : " ) )
#I n i
i a l i z a m o s
la
matriz
A omo
matriz
B omo
matiz
matriz
nula
A= [
for i in range (m) :
A. append ( [ 0 n )
#I n i
i a l i z a m o s
la
matriz
nula
B= [
for i in range (m) :
B . append ( [ 0 n )
#P e d i m o s
los
datos
de
la
los
datos
de
la
matriz
42
6 Fun
iones.
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#I n i
i a l i z a m o s
#En
donde
la
matriz
C omo
guarda
nuestros
vamos
nula
resultados
C= [
for i in range (m) :
C. append ( [ 0 n )
#Ha
emos
la
suma
de
las
matri es
A y B
el
resultado
"Suma :
"
de
multipli ar
matri es
def m u l t i p l i
a
i o n ( ) :
p=i n t ( raw_input ( "Dime e l numero de l a s f i a l s de A: " ) )
q=i n t ( raw_input ( "Dime e l numero de
olumnas de A ( y f i l a s de B) : " ) )
r=i n t ( raw_input ( "Dime e l numero de
olumnas de B : " ) )
#Creamos
matri es
nulas
A= [
for i in range ( p ) :
A. append ( [ 0 q )
B= [
for i in range ( q ) :
B . append ( [ 0 r )
#L l e n a m o s
las
matri es
for i in range ( p ) :
for j in range ( q ) :
A[ i [ j = i n t ( raw_input ( "Dame e l
omponente ( %d , %d ) : " %(i , j ) ) )
for i in range ( q ) :
for j in range ( r ) :
B[ i [ j = i n t ( raw_input ( "Dame e l
omponente ( %d , %d ) : " %(i , j ) ) )
#Creamos
la
matriz
resultante
C= [
for i in range ( p ) :
C. append ( [ 0 r )
43
6 Fun
iones.
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
#E f e t u a m o s
los
al ulos
for i in range ( p ) :
for j in range ( r ) :
for k in range ( q ) :
C [ i [ j +=A[ i [ k B [ k [ j
#M o s t r a m o s
el
resultado
traspues
de
matri es
def t r a s p u e s t a ( ) :
#P e d i m o s
la
matriz
las
matri es
M= [
for i in range (m) :
M. append ( [ 0 n )
T= [
for i in range ( n ) :
T. append ( [ 0 m)
#L l e n a m o s
la
matriz
los
ambios
en
la
matriz .
for i in range ( n ) :
for j in range (m) :
T[ i [ j =(M[ j [ i )
#I m p r i m i m o s
la
Matriz
print T
Ahora vamos a
rear nuestro programa prin
ipal el
ual va a utilizar nuestro modulo
matri
es.py . En el
ual solo vamos a llamar a nuestras fun
iones, este lo llamaremos
opera
iones.py
44
6 Fun
iones.
1 #! / u s r / b i n / e n v p y t h o n
2
3 #D e f i n i m o s n u e s t r o m o d u l o
4
5 from m a t r i
e s import
6
7 #Creamos un p e q u e o menu
8 x= ' '
9 while x != ' q ' :
10
print " Opera
iones "
11
print "Suma s "
12
print " Resta r "
13
print " M u l t i p l i
a
i o n m"
14
print " Traspuesta t "
15
print " s a l i r q"
16
x=raw_input ( "Que q u i e r e s ha
er : " )
17
i f x != [ ' s ' , ' r ' , 'm' , ' q ' :
18
print " Op
ion no v a l i d a "
19
20
#Llamamos a n u e s t r a s f u n
i o n e s d e n u e s t r o
21
22
i f x== ' s ' :
23
suma ( )
24
25
i f x== ' r ' :
26
resta ()
27
28
i f x== 'm' :
29
multipli
a
ion ()
30
31
i f x== ' t ' :
32
traspuesta ()
33
34 print "Anta pronto . . . . "
modulo
Como podemos observar ya se
reo tambin nuestro ar
hivo matri
es.py
, el
ual
omo
ya
omentamos anteriormente nos ayuda que nuestro programa
orra un po
o mas rpido.
45
7 Ar
hivos.
Un ar
hivo o
hero es un
onjunto de bits alma
enado en un dispositivo perifri
o.
Un ar
hivo es identi
ado por un nombre y la des
rip
in de la
arpeta o dire
torio
que lo
ontiene. Los ar
hivos se llaman as porque son los equivalentes digitales de los
ar
hivos en tarjetas, papel o mi
ro
has del entorno de o
ina tradi
ional. Los ar
hivos
informti
os fa
ilitan una manera de organizar los re
ursos usados para alma
enar datos
en un sistema informti
o.
7.0.2.
Existen diferentes tipos de opera
iones que podemos realizar en un ar
hivo, pero para
poder realizar esto, ne
esitamos seguir siempre unas pequeas reglas:
1. Lo primero es abrir el ar
hivo indi
ando su ruta relativa1 o absoluta2 y el modo de
trabajo. Existen diferentes tipos de modos de trabajo:
Le
tura: es posible leer informa
in del ar
hivo, pero no modi
arla ni aadir
nueva informa
in
Es
ritura: slo es posible es
ribir informa
in en el
hero. Al abrir un ar
hivo
en modo es
ritura borra todo el
ontenido previo del mismo.
Le
tura/es
ritura: permite leer y es
ribir informa
in del
hero.
Adi
in: permite aadir nueva informa
in, al ar
hivo sin modi
ar la ya existente.
2. Leer o es
ribir la informa
in
3. Cerrar el
hero
Uno de los errores mas
omunes es que olvides
errar el ar
hivo, esto es algo preo
upante,
por que Python no dete
tar esta
omo un error del programa. Cerrar el programa es
muy importante una vez que hayas terminado de trabajar
on el, espe
ialmente si lo has
modi
ado, si no
ierras el ar
hivo, es posible que los
ambios que hayas realizado en el
se pierdan o, peor an que el
hero se
orrompa.
Vamos ha
er un ejemplo:
Crearemos un ar
hivo al que lo llamaremos ar
hivo.txt, y dentro de el es
ribiremos
1
Las rutas relativas sealan la ubi
a
in de un ar
hivo o dire
torio a partir de la posi
in a
tual del
sistema operativo en el sistema de ar
hivos.
2
Las rutas absolutas sealan la ubi
a
in de un ar
hivo o dire
torio desde el dire
torio raz del sistema
de ar
hivos.
46
7 Ar
hivos.
1 Mi p r i m e r a l e
t u r a de un a r
h i v o
2 Python e s muy f a
i l de u t i l i z a r
3 Con Python aprendo a programar
y lo guardamos. Nos aseguramos de que este en mismo dire
torio donde vamos a
rear
nuestro programa.
Le tura
'w'
Es ritura
'a'
Adi in
'b'
Binario
'+'
#! / u s r / b i n / e n v
python
47
7 Ar
hivos.
2
3
4
5
6
7
8
9
10
11
#A b r i m o s
nuestro
ar hivo
#L e e r
los
datos
del
ar hivo
for l i e n a in a r
h i v o :
print l i n e a
#C e r r a r
el
ar hivo
ar hivo . lose ()
Como podemos observar nuestra salida tiene espa
ios de ms, esto se debe a que las
lineas nalizadas en el
hero
ontiene un salto de linea, adems ah que agregarle el
espa
io de salto de linea propio del print, por lo
ual tenemos dos saltos de linea a la
hora de ver el
ontenido de nuestro ar
hivo.
Si queremos eliminar estos saltos de linea debemos modi
ar nuestro programa:
1
2
3
4
5
6
7
8
9
10
11
12
13
#! / u s r / b i n / e n v
#A b r i m o s
python
nuestro
ar hivo
#L e e r
los
datos
del
ar hivo
for l i e n a in a r
h i v o :
i f l i n e a [ 1== ' \n ' :
l i n e a=l i n e a [ : 1
print l i n e a
#C e r r a r
el
ar hivo
ar hivo . lose ()
Con esto quitamos nuestros saltos de linea extras, pero no modi
amos en absoluto el
ontenido de nuestro ar
hivo. Una vez que lees un ar
hivo, trabajas
on una
opia en la
memoria de la informa
in, y no dire
tamete en el
hero.
Tambin es posible leer los ar
hivos
ar
ter por
ar
ter:
1
2
3
4
5
6
7
8
9
10
11
12
13
#/ u s r / b i n / e n v
python
48
7 Ar
hivos.
Otra forma de leer linea a linea, es utilizando el mtodo
leer una sola linea de un ar
hivo de texto:
1
2
3
4
5
6
7
8
9
#! / u s r / b i n / e n v
readline
on el ual podemos
python
#! / u s r / b i n / e n v
python
#! / u s r / b i n / e n v
python
Podemos observar que es ne
esario dar un salto de linea '\n' por
ada nmero que se
va a es
ribir en nuestro ar
hivo.
Otra op
in es es
ribir las
adenas formadas a partir de nmeros,
on el operador de
formato:
1
2
3
4
5
6
7
8
#! / u s r / b i n / e n v
python
49
7 Ar
hivos.
ontenido?
Para esto vamos a utilizar nuestro mtodo open pero vamos a darle
omo segundo
parmetro 'a',
on esto vamos a aadir
ualquier es
ritura al nal del ar
hivo.
Vamos a tomar nuestro ar
hivo que generamos llamado numero.txt y vamos agregarle
un
omentario al nal.
1
2
3
4
5
6
#! / u s r / b i n / e n v
python
Con
ada eje
u
in de nuestro programa vamos a agregar una nueva linea a numero.txt,
esto quiere de
ir que nuestro ar
hivo esta
re
iendo.
Todo lo que hemos he
ho hasta el momento, es un tipo de programa
in estru
tural,
esto es una manera de es
ribir programas de manera
lara y f
il. Pero hoy en da las
apli
a
iones son mu
ho mas ambi
iosas, que las ne
esidades de programa
in existentes
en los aos de 1960, prin
ipalmente debido a las apli
a
iones gr
as, por lo que las t
ni
as de programa
in estru
turada no son su
iente. Esto a llevado a desarrollar nuevas
t
ni
as, tales
omo la programa
in orientada a objetos y el desarrollo de entornos de
programa
in que fa
iliten la implementa
in de programar apli
a
iones ms grandes.
50
51
52
8.2.1.
Clases
53
Nombres y objetos
Los objetos tienen individualidad, y mltiples nombres (en mu
hos mbitos) pueden
vin
ularse al mismo objeto. Esto se
ono
e
omo aliasing en otros lenguajes. Normalmente
no se apre
ia esto a primera vista en Python, y puede ignorarse sin problemas
uando se
maneja tipos bsi
os inmutables (nmeros,
adenas, tuplas). Sin embargo, el aliasing, o
renombrado, tiene un efe
to posiblemente sorpresivo sobre la semnti
a de
digo Python
que involu
ra objetos mutables
omo listas, di
ionarios, y la mayora de otros tipos.
Esto se usa normalmente para bene
io del programa, ya que los renombres fun
ionan
omo punteros en algunos aspe
tos. Por ejemplo, pasar un objeto es barato ya que la
implementa
in solamente pasa el puntero; y si una fun
in modi
a el objeto que fue
pasado, el que la llama ver el
ambio; esto elimina la ne
esidad de tener dos formas
diferentes de pasar argumentos,
omo en Pas
al.
8.2.3.
Antes de ver
lases, primero debo de
irte algo a
er
a de las reglas de al
an
e de Python.
Las deni
iones de
lases ha
en unos lindos tru
os
on los espa
ios de nombres, y ne
esits saber
mo fun
ionan los al
an
es y espa
ios de nombres para entender por
ompleto
mo es la
osa. De paso, los
ono
imientos en este tema son tiles para
ualquier
programador Python avanzado.
Comen
emos
on unas deni
iones.
54
55
Las
lases introdu
en un poquito de sintaxis nueva, tres nuevos tipos de objetos y algo
de semnti
a nueva.
La forma ms sen
illa de deni
in de una
lase se ve as:
1
2
3
4
5
6
C l a s s Clase :
<d e
l a r a
i o n 1>
.
.
.
.
56
<d e l a r a i o n n>
Las deni
iones de
lases, al igual que las deni
iones de fun
iones (instru
iones def)
deben eje
utarse antes de que tengan efe
to alguno. (Es
on
ebible poner una deni
in de
lase dentro de una rama de un if, o dentro de una fun
in.) En la pr
ti
a, las
de
lara
iones dentro de una
lase son deni
iones de fun
iones, pero otras de
lara
iones
son permitidas, y a ve
es resultan tiles; veremos esto ms adelante.
Las deni
iones de fun
iones dentro de una
lase normalmente tienen una lista de argumentos pe
uliar, di
tada por las
onven
iones de invo
a
in de mtodos; a esto tambin
lo veremos ms adelante. Cuando se ingresa una deni
in de
lase, se
rea un nuevo
espa
io de nombres, el
ual se usa
omo al
an
e lo
al; por lo tanto, todas las asigna
iones
a variables lo
ales van a este nuevo espa
io de nombres.
En parti
ular, las deni
iones de fun
iones aso
ian el nombre de las fun
iones nuevas
all. Cuando una deni
in de
lase se naliza normalmente se
rea un objeto
lase.
Bsi
amente, este objeto envuelve los
ontenidos del espa
io de nombres
reado por la
deni
in de la
lase; aprenderemos ms a
er
a de los objetos
lase en la se
in siguiente.
El al
an
e lo
al original (el que tena efe
to justo antes de que ingrese la deni
in de la
lase) es restable
ido, y el objeto
lase se aso
ia all al nombre que se le puso a la
lase
en el en
abezado de su deni
in (Clase en el ejemplo).
l a s s MiClase :
""" Simple
l a s e de ejemplo """
i = 12345
def f ( s e l f ) :
return ' h o l a mundo '
...enton
es MiClase.i y MiClase.f son referen
ias de atributos vlidas, que devuelven un
entero y un objeto fun
in respe
tivamente. Los atributos de
lase tambin pueden ser
asignados, o sea que pods
ambiar el valor de MiClase.i mediante asigna
in. __do
__
tambin es un atributo vlido, que devuelve la do
umenta
in aso
iada a la
lase: "Simple
lase de ejemplo". La instan
ia
in de
lases usa la nota
in de fun
iones. Ha
de
uenta
que el objeto de
lase es una fun
in sin parmetros que devuelve una nueva instan
ia
de la
lase. Por ejemplo (para la
lase de ms arriba):
x = MiClase ( )
...
rea una nueva instan
ia de la
lase y asigna este objeto a la variable lo
al x. La
opera
in de instan
ia
in ("llamar" a un objeto
lase)
rea un objeto va
o. Mu
has
57
Cuando una
lase dene un mtodo __init__(), la instan
ia
in de la
lase automti
amente invo
a a __init__() para la instan
ia re
in
reada. Enton
es, en este ejemplo,
una instan
ia nueva e ini
ializada se puede obtener ha
iendo:
x = MiClase ( )
Por supuesto, el mtodo __init__() puede tener argumentos para mayor exibilidad.
En ese
aso, los argumentos que se pasen al operador de instan
ia
in de la
lase van a
parar al mtodo __init__(). Por ejemplo,
1 >>>
l a s s Complejo :
2 ...
def __init__( s e l f , p a r t e r e a l , p a r t e i m a g i n a r i a ) :
3 ...
sel f . r = partereal
4 ...
s e l f . i = parteimaginaria
5 ...
6 >>> x = Complejo ( 3 . 0 , 4.5)
7 >>> x . r , x . i ( 3 . 0 , 4.5)
8.2.5.
Objeto Instan ia
58
Objetos Mtodo
Los atributos de datos tienen preferen
ia sobre los mtodos
on el mismo nombre; para
evitar
oni
tos de nombre a
identales, que pueden
ausar errores dif
iles de en
ontrar
59
#F u n i n
definida
fuera
de
def f 1 ( s e l f , x , y ) :
return min ( x , x+y )
l a s s C:
f = f1
def g ( s e l f ) :
return ' h o l a mundo '
h = g
la
lase
Ahora f, g y h son todos atributos de la
lase C que ha
en referen
ia a objetos fun
in,
y
onse
uentemente son todos mtodos de las instan
ias de C; h siendo exa
tamente
equivalente a g. Fijate que esta pr
ti
a normalmente slo sirve para
onfundir al que
60
l a s s Bolsa :
def __init__( s e l f ) :
s e l f . datos = [
def a g r e g a r ( s e l f , x ) :
s e l f . datos . append ( x )
def d o b l e a g r e g a r ( s e l f , x ) :
s e l f . agregar (x)
s e l f . agregar (x)
Heren ia
Por supuesto, una
ara
tersti
a del lenguaje no sera digna del nombre "
lase" si no
soportara heren
ia. La sintaxis para una deni
in de
lase derivada se ve as:
1
2
3
4
5
6
l a s s ClaseDerivada ( ClaseBase ) :
<d e
l a r a
i n 1>
.
.
.
<d e
l a r a
i n N>
La eje
u
in de una deni
in de
lase derivada pro
ede de la misma forma que una
lase base. Cuando el objeto
lase se
onstruye, se tiene en
uenta a la
lase base. Esto
se usa para resolver referen
ias a atributos: si un atributo soli
itado no se en
uentra en
la
lase, la bsqueda
ontina por la
lase base. Esta regla se apli
a re
ursivamente si la
lase base misma deriva de alguna otra
lase.
No hay nada en espe
ial en la instan
ia
in de
lases derivadas: ClaseDerivada()
rea
una nueva instan
ia de la
lase. Las referen
ias a mtodos se resuelven de la siguiente
61
62
Variables privadas
Las variables "privadas" de instan
ia que no pueden a
ederse ex
epto desde dentro
de un objeto, no existen en Python. Sin embargo, hay una
onven
in que se sigue en la
mayora del
digo Python: un nombre prejado
on un guin bajo (por ejemplo, _spam)
debera tratarse
omo una parte no pbli
a de la API (ms all de que sea una fun
in,
un mtodo, o un dato). Debera
onsiderarse un detalle de implementa
in y que est
sujeto a
ambios sin aviso.
Ya que hay un
aso de uso vlido para los identi
adores privados de
lase (a saber:
olisin de nombres
on nombres denidos en las sub
lases), hay un soporte limitado para
este me
anismo. Cualquier identi
ador
on la forma __spam (al menos dos guiones bajos al prin
ipio,
omo mu
ho un guin bajo al nal) es textualmente reemplazado por
_nombrede
lase__spam, donde nombrede
lase es el nombre de
lase a
tual al que se
le sa
an guiones bajos del
omienzo (si los tuviera). Se modi
a el nombre del identi
ador sin importar su posi
in sint
ti
a, as que puede ser usado para denir instan
ias
y variables de
lase privadas, mtodos, variables guardadas en globales, y an variables
guardadas en instan
ias privadas de esta
lase en instan
ias de otras
lases. Puede o
urrir
que se trunque si el nombre modi
ado queda
on ms de 255
ara
teres. Fuera de las
lases, o
uando el nombre de
lase
onsiste solo en guiones bajos, no se modi
an los
nombres de identi
adores.
Hay que a
larar que las reglas de modi
a
in de nombres estn diseadas prin
ipalmente para evitar a
identes; es posible a
eder o modi
ar una variable que es
onsiderada
omo privada. Esto hasta puede resultar til en
ir
unstan
ias espe
iales, tales
omo
en el depurador.
63
9 Re
ursividad
9.1. Qu es la Re
ursividad?
La re
ursividad es una t
ni
a en la que una fun
in se ha
e llamadas as misma en el
pro
eso de la realiza
in de sus tareas.
La re
ursividad da al programador una herramienta potente para resolver
iertos tipos
de problemas redu
iendo
omplejidad u o
ultando los detalles del problema.
Una fun
in re
ursiva es una fun
in que se llama asi misma, ya sea dire
ta o indireta,
la re
ursividad dire
ta, que es
uando una fun
in se llama as misma la
ual
onsidera
dos elementos: el Caso Base (n de la re
ursin) y el Caso General (Parte puramente
re
ursiva).
Caso base: Es el
ao ms simple de una fun
in re
ursiva, y simplemente devuelve
un resultado. ( el
aso base se puede
onsiderar
omo una salida no re
ursiva)
Caso general: Rela
iona el resultado del algoritmo
on resultados de
asos ms
simples. Dado que
ada
aso de problema aparenta o se ve similar al problema
original, la fun
in llama una
opia nueva de si misma, para que empie
e a trabajar
sobre el problema mas pequeo y esto se
ono
e
omo una llamada re
ursiva y
tambien se llama el paso de re
ursin.
La re
ursin se puede denir mejor mediante el
lsi
o ejemplo de la fun
in fa
torial.
Ejemplo:
0! = 1, 1! = 1 Caso Base
Sea, n! = n (n 1) (n 2) 1, si n > 0 Caso General
Supongamos que bus
amos el valor de 4!
omo 4 > 0 enton
es utilizamos la segunda
parte de la deni
in:
4! = 4 3 2 1 = 24
Vamos a ver las fun
iones en modo iterativo y re
ursivo
1
2
3
4
5
6
7
8
#Modo
Iterativo
#! / u s r / b i n / e n v
python
def f a
t o r i a l ( n ) :
f =1
for i in range ( 1 , n +1):
f=i f
return f
64
9 Re
ursividad
1
2
3
4
5
6
7
8
9
#Modo
Re ursivo
#! / u s r / b i n / e n v
python
def f a
t o r i a l ( n ) :
i f n==0 or n==1:
resultado = 1
e l i f n>1:
r e s u l t a d o=n f a
t o r i a l ( n 1)
return r e s u l t a d o
Como podemos observar en nuestra fun
in re
ursiva no utlizamos ninguna estru
tura
de repeti
in (for , while, et
.).
El
al
ulo re
ursivo del fa
torial de un nmero natural, el
ual parte de la siguiente
deni
in matemti
a, valida para valores positivos de n:
1,
n = 0, n = 1
n! =
Para es
ribr una fun
in re
ursiva, ahi un metodo que nos ayuda a formular nuestras
fun
iones re
ursivas:
1. Primero, ahi que obtener una deni
in exa
ta del problema a resolver. (Esto, por
supuesto, es el primer paso en la resolu
in de
ualquier problema de programa
in)
2. A
ontinua
in, determinar el tamaa del problema
ompleto que hoy que resolver.
Este tamao determinar los valores de los parmetros en la llamada ini
ial a la
fun
in.
3. Ter
ero, resolver el
aso base en el que el problema puede expresar no re
ursivamente. Por. ltimo, resolver el
aso general mas pequeo del mismo problema, una
llamada re
ursiva.
Ah que tener
uidado
on la ele
in inapropiada de los
asos base, por que esto puede
ondu
ir a una re
ursin que no se detiene jams. Es lo que se
ono
e
omo una regresin
innita y es anloga a los
i
los innitos.
Otro ejemplo muy utilizado es el
l
ulo de los nmeros de Fibona
i, eson son una
se
uendia de nmeros.
Los dos primeros nmeros de la se
uen
ia valen 1 y
ada nmero a partir del ter
ero se
obtiene sumando los dos anteriores. Podemos expresar esta deni
in matemti
amente
as:
(
1,
n=1n=2
Fn
Fn1 + Fn2 , n > 2
La transforma
in de esta deni
in de una fun
in de Python es:
65
9 Re
ursividad
1
2
3
4
5
6
def f i b o n a
i ( n ) :
i f n==1 or n==2:
r e s u l t a d o =1
e l i f n>2:
r e s u l t a d o = f i b o n a
i ( n1)+ f i b o n a
i ( n 2)
return r e s u l t a d o
Como podemos observar es muy fa
l es
ribir nuestro
aso re
ursivo, en una fun
in
para as poderla llamar. La importan
ia de este
aso re
ursivo, es denir nuestros
asos
bases, los
uales son
uando n = 1 y n = 2.
Existen varios fa
tores a
onsiderar en la de
isin de usar o no una solu
in re
ursiva
a un problema. Las prin
ipales
uestiones son la
laridad y la e
ien
ia de la solu
in.
En general una solu
in no re
ursiva es ms e
iente en trminos de tiempo y espa
io de
omputadora. La solu
ion re
ursiva puede requerir gastos
onsiderables, y deben
guardarse
opias de variables lo
ales y temporales. Aunque el gasto de una llamada a
una fun
in re
ursiva no es peor, esta llamada original puede o
ultar mu
has
apas de
llamadas re
ursivas internas. El sistema puede no tener su
iente espa
io para eje
utar
una solu
in re
ursiva de algunos problemas.
Una solu
in re
ursiva parti
ular puede tener una ine
iendia inherente. Tal ine
ien
ia no es debida a la ele
in de la implementa
in del algoritmo, ms bien, es un defe
to
del algoritmo en si mismo.
Un problema inherente es que algunos valores son
al
ulados una y otra vez
ausando
que la
apasidad de la
omputadora se ex
eda antes de obtener una respuesta.
La
uestin de
laridad en la solu
in es, no obstante, un fa
tor importante. En algunos
problemas una solu
in re
ursiva es ms simple y ms natural de es
ribir
omo vimos en
los ejemplos anteriores.
66
10 Metodos de Ordenamiento y
Busqueda
Mu
has a
tividades humanas requieren que en ellas las diferentes
ole
iones de elementos utilizados se
oloquen en un orden espe
o. Las o
inas de
orreo y las empresas
de mensajera ardenan el
orreo y los paquetes por
digos postales
on el objeto de
onseguir una entrega e
iente, los anuarios o listas telefoni
as, ordenan sus
lientes por
orden alfabti
o de apellido
on el n ltimo de en
ontrar f
ilmente el nmero de telfono deseado, los estudiantes de una
lase en la universidad se ordenan por apellidos o
por nmero de expediente, et
. Por tal
ir
unstan
ia una de las tareas que realizan ms
fre
uentemente las
omputadoras en el pro
esamiento de datos es la ordena
in.
El estudio de diferentes metodos de ordena
in es una tarea intrnse
amente interasante
desde el punto de vista teri
o y naturalemente, pra
ti
o. Vamos a ver algunos algorimos
y te
ni
as de ordenamiento ms usuales.
Existen diferentes algoritmos de ordena
in elementales o bsi
os:
Burbuja
Sele
in
Inser
in
Estos metodos, son algunos de los mu
hos que existen, pero estos son los
lasi
os por lo
ual debemos de
ono
er su t
ni
a.
10.0.1.
Burbuja
67
20
20
50
20
80
40
40
40
20
40
20
40
30
50
80
50
80
50
30
80
30
30
30
80
Intercambia 50 y20
Intercambia 50 y 40
50 y 80 ordenados
Intercambia 80 y 30
El elemento mayor es 80
Pasada 1:
20
40
20
40
20
20
50
30
50
40
40
80
80
30
50
30
30
50
20 y 40 ordenados
40 y 50 ordenados
80
Intercambia 50 y 30
80
Pasada 2:
20
40
20
30
30
40
50
50
80
80
Pasada 3:
68
20 y 40 ordenados
Intercambia 40 y30
30
20
30
40
40
50
50
80
80
20 y 30 ordenados
Lista ordenada
Ahora vamos a implemetar un modulo para nuestro mtodo burbuja, el
ual llamaremos
bsort.py:
1 # Ordenamiento b u r b u j a
2 import arrayh
3
4 def s o r t ( a r r a ) :
5
nelem = l e n ( a r r a )
6
for i in range ( nelem ) :
7
for j in range ( nelem 1) :
8
i f ( a r r a [ j > a r r a [ j +1) :
9
arrayh . swap_values ( arra , j , j +1)
modulos
69
Sele in
70
A[1]
A[2]
A[3]
A[4]
51
21
39
80
36
Seleccionar 21
Intercambiar
21 y A[0]
36
Seleccionar 36
Intercambiar
36 y A[2]
51
Seleccionar 39
Intercambiar
39 y A[2]
Pasada 0
21
51
39
80
Pasada 1
21
39
36
80
Pasada 2
21
36
39
80
51
Seleccionar 51
Intercambiar
51 y A[3]
Pasada 3
21
36
39
51
80
Lista ordenada
Y tambien tenemos que modi
ar nuestro programa prin
ipal, para in
luir el modulo
y poderlo utilizar.
71
Inser in
El mtodo de ordena
in por inser
in es similar al pro
eso tipi
o de ordenar tarjetas
de nombres (
artas de una baraja) por orden alfabeti
o, que
onsiste en insertar un
nombre en su posi
in
orrenta dentro de una lista o ar
hivo que ya est ordenado. As
el pro
eso en el
aso de la lista de enteros A=50, 20, 40, 80, 30.
50
Comienzo con 50
Inserta 20 en la posicion 0
50 se mueve a posicion 1
Procesar 20
20
50
Procesar 40
20
40
50
Procesar 80
20
40
50
Procesar 30
20
30
40
Inserta 40 en la posicion 1
50 se mueve a posicion 2
80
50
80
Inserta 30 en posicion 1
Se desplaza a la derecha
la sublista
# Inser
ion
# La
# a
fun
ion
sort ()
insert
no
se
usa ,
llamar
dire tamente .
72
Con mu
ha fe
uen
ia los programadores trabajan
on grandes
antidades de datos alma
enados en listas y registros, por ello ser ne
esario determinar si una lista
ontiene
un valor que
oin
ida
on un
ierto valor
lave. El pro
eso de en
ontrar un elemento espe
o de una lista se denomina bsqueda. Vamos a examinar dos t
ni
as de bsqueda:
bsquda lineal o se
uen
ial, y la t
ni
a ms sen
illa, y bsqueda binario, la te
ni
a ms
e
iente.
10.0.4.
La bsqueda se
uen
ial bus
a un elemento de una lista utilizando un valor destino
llamado
lave. En una bsqueda se
ue
ial, los elementos de una lista se exploran en
se
uen
ia, uno despus del otro. La bsqueda se
uen
ial es ne
esaria, por ejemplo, si
se desea en
ontrar la persona
uyo nmero de telfono es 222-214565 en un dire
torio
telefoni
o de su
iudad. Los dire
torios de telfonos estn organizados alfabti
amente
por el nombre del propietario en lugar de por nmeros de telfono, de modo que deben
explorarse todos los nmeros, uno despues de otro, esperando en
ontrar el nmero 222214565.
El algoritmo de bsqueda se
uen
ial
ompara
asa elemento de la lista
on la
lave de
bsqueda. Dado que la lista no est en un orden prejado, es probable que el elemento a
bus
ar pueda ser el primer elemento, el ltimo elemento o
ualquier otro.
Crearemos nuestro modulo bseq.py
1
2
3
4
5
6
7
8
9
10
11
# Busqueda
# Fun
ion
Se
uen
ial
de
Busqueda
# Argumentos :
#
>
( arreglo ,
elemento
bus ar )
Ahora vamos a
rear el programa prin
ipal, donde vamos a mandar una lista de nmeros
enteros, y el elemento a bus
ar.
73
Para este
aso nadamas utilizamos una lista de 10 elementos,
on los
uales podemos
darnos
uenta, que nos indi
a la posi
ion de donde se en
uentra el elemento que bus
amos.
10.0.5.
Bsqueda Binaria
La bsqueda se
uen
ial se apli
a a
ualquier lista. Si la lista est ordenada, la bsqueda
binaria propor
iona una t
ni
a de bsqueda mejorada. Una bsqueda binaria tpi
a es
la bsqueda de una palabra en un di
ionario. Dada la palabra, se abre el libro
er
a
del prin
ipio, del
entro o del nal dependiendo de la primera letra del primer apellido
o de la palabra que bus
a. Se puede tener suerte y a
ertar
on la pgina
orre
ta; pero,
normalmente, no ser as y se mueve el le
tor a la pgina anterior o posterior del libro.
Por ejemplo, si la palabra
omienza
on J y se est en la L se mueve uno ha
ia atrs.
El pro
eso
ontina hasta que se en
uentra la pgina bus
ada o hasta que se des
ubre
que la palabra no est en la lista. Una idea similar se apli
a en la bsqueda en una lista
ordenada. Se sita la le
tura en el
entro de la lista y se
omprueba si la
lave
oin
ide
on el valor del elemento
entral. Si no se en
uentra el valor de la
lave, se sigue la
bsqueda uno en la mitad inferior o superior del elemento
entral de la lista. En general,
si los datos de la lista estn ordenados se puede utilizar esa informa
in para a
ortar el
tiempo de bsqueda.
Vamos a
rear el modulo bbin.py en donde implementaremos el algoritmo.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Busqueda
Binaria
# Argumentos :
#
>
# Valor
#
#
>
( dondebus ar ,
de
que ,
de_donde ,
a_donde )
retorno
posi ion
del
se
si
no
elemento
bus ado ,
en ontro .
74
La bsqueda se
uen
ial se apli
a para lo
alizar una
lave en un ve
tor no ordenado.
Para apli
ar el algoritmo de bsqueda binaria la lista, o ve
tor, donde se bus
a debe de
estar ordenado. Estos fueron algunos de los algoritmos, pero existen mu
hos ms.
75
11 Un Po
o de Gra
a
in
matplotlib est diseado
on la losofa que debe ser
apaz de
rear tramas sen
illas
on slo unos po
os
omandos, o slo uno!. Aunque tiene sus origenes en la emula
ion
de Matlab, en
omandos gr
os es independiente totalmete de Matlab. Esta bibliote
a
aunque esta es
rita prin
ipalmente en Python puro, que ha
e uso intensivo de NumPy,
para propor
ionar un buen rendimiento in
luso para grandes
onjuntos.
El
digo matplotlib es
on
eptualmente dividido en tres partes: la interfaz pylab, es
un
onjunto de fun
iones que ofre
e matplotlib.pylab que permiten al usuario
rear fun
iones
on
digo muy similar a Matlab generar
digo gura. La interfaz matplotlib o
matplotlib API es el
onjunto de
lases que ha
en el trabajo pesado, la
rea
ion y gestion
de datos, texto, lineas, et
.
Esta es una interfaz abstra
ta que no sabe nada a
er
a de la salida. Los motores,
son dependientes del dispositivo de extra
in del dispositivo, que transforma la representa
in de interfaz de papel o un dispositivo de pantalla, por ejemplo para
rear un
PS (PostS
rip), PNG de salida
on alta
alidad et
.
matplotlib es utilizado por mu
has personas en mu
hos
ontextos diferentes, algunas
personas quieren generar automati
amente ar
hivos PostS
ript para enviar a una impresora o editores, otros implementar en un servidor de apli
a
in web para generar PNG
de salida para su in
lusin en paginas web generadas dinmi
amente et
.
11.1. Instala
in
Vamos ha
erlo de la manera mas fa
il. En primer lugar, tendra que averiguar si ya
tienes instalado Python en tu maquina, si no debes de instalarlo.
Una vez que Python este instalado y fun
ionando, tendra que instalar numpy. numpy
propor
iona un alto rendimiento de datos de matri
es estru
turas y fun
iones matemti
as y es un requisito para matplotlib.
Ahora solo ne
esitamos ha
er:
>apt g e t i n s t a l l python m a t p l o t l i b
Esto es para distribu
iones debian o ubuntu.
Ya
on esto tenemos instalado matplotlib, ahora solo nos restra trabajar.
76
11 Un Po o de Gra a in
77
11 Un Po o de Gra a in
Matplotlib importa automati
amente gran parte de numpy. Lo
ual es muy util pues el
omando plot tambien admite arreglos
omo el generado abajo usando arange. Un mismo
omando de plot puede servir para gra
ar multiples
onjuntos de datos
omo abajo.
1 #! / u s r / b i n / e n v p y t h o n
2
3 from pylab import arange , p l o t , show
4
5 #Creamos un r a n g o d e 0 a 5 . 2 e n p a s o s d e
6 t=arange ( 0 . 0 , 5 . 2 , 0 . 2 )
7
8 #Combinamos t r e s g r a f i
a s
9 #r =(
o l o r=r o j o s i m b o l o=g u i o n )
10 #b s =(
o l o r=a z u l s i m b o l o=
u a d r o )
11 #g ^=(
o l o r=v e r d e s i m b o l o= t r i a n g u l o )
12 p l o t ( t , t , ' r ' , t , t 2 , ' bs ' , t , t 3 , ' g^ ' )
13
14 show ( )
78
0.2
11 Un Po o de Gra a in
79
11 Un Po o de Gra a in
Propiedad
Efe to
alpha
olor
data_ lipping
label
linestyle
linewidth
An ho de la linea en puntos(otante)
marker
markeredge olor
markerfa e olor
markersize
markeredgewidth
80
11 Un Po
o de Gra
a
in
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
1
2
3
#La
segunda
es
#E l
omando
plot
#A q u
line
es
on
mtodos
regresa
el
el
de
una
an ho
de
linea
l i ne . set_linewidth (2.0)
#Por
ejemplo
podemos
desa tivar
l i n e . set_antialiased ( False )
#E t i q u e t a
de
la
modifi an
lista
nombre
l i n e , = p l o t ( t , t , ' r ' )
#I n r e m e n t e m o s
que
una
de
variable
el
del
linea
mar ador
l i n e . set_markersize (7)
#T i p o
de
mar ador
( diamante )
#C o l o r
del
mar ador
l e g e n d ( shadow=True )
show ( )
#! / u s r / b i n / e n v
#P r o p i e d a d e s
de
python
lnea
(y
grfi a
no
la
un
antialising
#Tamao
la
lneas
smbolos )
81
ual
a
tiva
se
omando !
puede
usar
11 Un Po
o de Gra
a
in
4
5 from pylab import arange , p l o t , show , setp , l e g e n d
6
7 t = arange ( 0 . 0 , 5 . 2 , 0 . 2 )
8
9 #F i n a l m e n t e h a y
omandos s i m i l a r e s a l o s d e m a t l a b
10 l i n e s = p l o t ( t , t , t , t 2)
11 s e t p ( l i n e s , l i n e w i d t h =2.0)
12 s e t p ( l i n e s [ 0 ,
o l o r= ' r ' , l a b e l=" datos1 " )
13 s e t p ( l i n e s [ 1 ,
o l o r= ' k ' , l a b e l=" datos2 " )
14
15 l e g e n d ( )
16
17 show ( )
18 #O aun ms s i m i l a r e s a m a t l a b u s a n d o
a d e n a s
19 #s e t p ( l i n e s , '
o l o r ' , ' r ' , ' l i n e w i d t h ' , 2 . 0 )
para
modifi ar
propiedades
82
f i g u r e (1)
11 Un Po
o de Gra
a
in
13
14
15
16
17
18
19
20
#E s t o
signifi a
#Es
igual
#E l
otro
a:
filas ,
subplot (2 ,1 ,1)
olumna ,
>
1 era
permite
p l o t ( t1 , f ( t1 ) , ' bo ' , t2 , f ( t2 ) )
sub
plot
grfi a
ms
s u b p l o t (211)
numeros
s u b p l o t (212)
p l o t ( t2 , o s (2 p i t2 ) , ' r ' )
show ( )
Como podemos darnos
uenta ne
esitamos
rear un modulo llamado fun
iones:
1 #! / u s r / b i n / e n v p y t h o n
2
3 from m a t p l o t l i b . pylab import
os , exp , multiply , p i
4
5 def f ( t ) :
6
s1=
o s (2 p i t )
7
e1=exp( t )
8
return m u l t i p l y ( s1 , e1 )
A ve
es en lugar de dos gra
as en la misma ventana, lo que queremos son dos gra
as
independientes, matplotlib nos permite
rear tantas ventanas
on gra
as
omo ne
esitemos.
1 #! / u s r / b i n / e n v p y t h o n
2
3 #M u l t i p l e s f i g u r a s
4 from m a t p l o t l i b . pylab import
5
6 #Creamos una f i g u r a f i g u r e ( 1 )
7 plot ( [ 1 , 2 , 3 )
8
9 #Creamos una ms f i g u r e ( 2 )
83
11 Un Po
o de Gra
a
in
10
11
12
13
14
15
16
plot ( [ 4 , 5 , 6 )
#Le
ponemos
ttulo
la
figura
figure (1)
t i t l e ( ' Titulo : figura 1 ' )
show ( )
Mu
as ve
es nos interesa
olo
ar titulos y etiquetas a los ejes en nuestra gra
a, vamos
aadir y
ontrolar algunas propiedades del texto.
1 #! / u s r / b i n / e n v p y t h o n
2
3 #E t i q u e t a s y t e x t o
4 from m a t p l o t l i b . pylab import
5
6 plot ( [ 1 , 2 , 3 )
7
8 #P o n i e n d o e t i q u e t a s a l a g r f i
a
9 x l a b e l ( ' tiempo ' ,
o l o r= ' r ' , f o n t w e i g h t = ' bold ' )
10 y l a b e l ( ' v o l t s ' ,
o l o r= ' b ' , fontname= ' C o u r i e r ' )
11 t i t l e ( u ' Una g r f i
a ' ,
o l o r= ' g ' , alpha =0.5)
12
13 #Tambin e s v l i d o
14 #t = x l a b e l ( ' t i e m p o ' )
15 #s e t p ( t ,
o l o r = ' r ' , f o n t w e i g h t = ' b o l d ' )
16
17 show ( )
84
11 Un Po o de Gra a in
horizontal,verti al
Propiedades
Valores
alpha
olor
fontangle
itali ,normal,oblique
fontname
Sans,Helveti a,Courier,Times,Others
fontsize
fontweight
horizontalalignmen
left, enter,right
verti alalignment
Cuando las propiedades del texto que queremos son repetitivas podemos generar un
di
ionario
on las propiedades que queremos y pasar el di
ionario
omo parametro,
las propiedades que el di
ionario dena se apli
aran al texto. La instru
ion text nos
permite aadir texto dentro de una gra
a.
1 #! / u s r / b i n / e n v p y t h o n
2
3 #C o n t r o l a n d o e l t e x t o
o n d i
i o n a r i o
4 from m a t p l o t l i b . pylab import
5
6 #Podemos armar un d i
i o n a r i o
o n l a s
7 #y p a s a r l o
omo a r g u m e n t o a l p l o t
ara tersti as
85
deseadas
11 Un Po
o de Gra
a
in
8
9
10
11
12
13
14
15
16
17
18
19
20
21
plot ( [ 1 , 2 , 3 )
t i t l e ( ' La g r a f i
a ' , font , f o n t s i z e =12)
#E l
omando
texto
agrega
texto
en
la
posi in
x,y
Es posible utilizar latex dentro de
ualquier elemento de texto en matplotlib. Es importante re
ordar que las
adenas deben de llevar la 'r' antes de las
omillas. Esto le di
e
al interprete que la
adena es 'raw' es de
ir que no interprete
ara
teres espe
iales
omo
son '\n' o '\t'.
1 #! / u s r / b i n / e n v p y t h o n
2
3 #Usando l a t e x d e s d e m a t p l o l i b
4 from m a t p l o t l i b . pylab import
5
6 t = arange ( 0 . 0 , 2 . 0 , 0 . 0 1 ) s = s i n (2 p i t )
7 plot ( t , s )
8
9 #Un t t u l o q u e i n
o r p o r a l a t e x , no o l v i d a r l a
10 t i t l e ( r ' $ \ alpha_i > \ beta_i$ ' , f o n t s i z e =20)
11
12 #T e x t o s d e n t r o d e l a g r f i
a
o n l a t e x
86
antes
del
texto !
11 Un Po
o de Gra
a
in
13
14
15
16
17
18
19
20
21
22
#G u a r d a l a ,
si
no
espe ifi as
formato
el
default
es
png
En algunas o
a
iones queremos dos gra
as, pero en lugar de una junto a la otra, la
ne
esitamos una dentro de otra.
1 #! / u s r / b i n / e n v p y t h o n
2
3 #S u b g r f i
a i n t e r n a
4 from m a t p l o t l i b . pylab import
5
6 #Creamos d a t o s
7 #Tamao d e l p a s o
8 dt =0.001
9 t=arange ( 0 . 0 , 1 0 . 0 , dt )
10
11 #R e s p u e s t a d e l i m p u l s o
12 r=exp( t [ : 1 0 0 0 / 0 . 0 5 )
13
14 #R u i d o
o l o r r o j o
15 x=randn ( l e n ( t ) )
16 s=
o n v o l v e ( x , r , mode = 2 ) [ : l e n ( x ) dt
17
18 #La g r f i
a p r i n
i p a l
87
11 Un Po
o de Gra
a
in
19 p l o t ( t , s )
20
21 #A j u s t a l o s e j e s p a r a q u e h a y a e s p a
i o
22 a x i s ( [ 0 , 1 , 1 . 1 min( s ) , 2 max( s ) )
23 x l a b e l ( ' tiempo ( s ) ' )
24 t i t l e ( ' Ruido Gausiano ' )
25
26 #S u b g r f i
a d e n t r o d e l a p r i m e r a
27 a=axes ( [ 0 . 2 , 0 . 6 5 , 0 . 6 , 0 . 2 , a x i s b g= ' y ' )
28 n , bins , p a t
h e s=h i s t ( s , 4 0 0 , normed=1)
29 t i t l e ( ' P r o b a b i l i d a d ' )
30 s e t p ( a , x t i
k s = [ , y t i
k s = [ )
31 show ( )
Cuando es ne
esario intera
tuar
on la gr
a matplotlib nos permite
apturar una
serie de eventos,
ono son los
li
ks de mouse o presinar una te
la.
1 #! / u s r / b i n / e n v p y t h o n
2
3 #C a p t u r a n d o e v e n t o s
4 from m a t p l o t l i b . pylab import
5
6 #Una g r f i
a
u a l q u i e r a
7 p l o t ( arange ( 1 0 ) )
8
9 #La f u n
i n a e j e
u t a r
o n e l e v e n t o
10 def on_
li
k ( event ) :
11
#g e t t h e x and y p i x e l
o o r d s
12
x , y = event . x , event . y
13
i f event . i n a x e s :
14
print ' Coordenadas : ' , event . xdata , event . ydata
15
#P i n a l o s p u n t o s n u e v o s
88
11 Un Po
o de Gra
a
in
16
17
18
19
20
21
22
23
draw ( )
#C o n e t a
los
eventos
on
la
las
grfi a
fun iones
# o n n e t ( ' m o t i o n _ n o t i f y _ e v e n t ' ,
on_ li k )
89
11 Un Po
o de Gra
a
in
Los objetos, eventos tiene ms propiedades:
button
Propiedades
Uso
Posi in en x
Posi in en y
inaxes
xdata
ydata
name
anvas
key
Te la presionada
En algunas o
a
iones nuestro eje x
onsiste de fe
has, matplotlib, nos permite gra
ar
valores de fe
has f
ilmente, el
omando datatime.date() genera un objeto
on la fe
ha
espe
i
ada. La instru
in datetime.delta genera una diferen
ia entre dias y nalmente
la instru
in drange genera un rango de fe
has desde la primera fe
ha, hasta la segunda
separada por el delta espe
i
ado.
#!/ u s r / b i n / env python
from m a t p l o t l i b . p yl a b import import d a t e t i m e
#Dos f e
h a s para
r e a r un rango
date1
= datetime . date ( 1997 , 1 , 1 )
date2
= d a t e t i m e . d a t e ( 2 0 0 7 , 4 , 12 )
#Un d e l t a de tiempo ( d i f e r e n
i a e n t r e dos f e
h a s )
delta
= d a t e t i m e . t i m e d e l t a ( days =50)
#Un rango , a l e s t i l o a r a n g e > drange
dates
= drange ( date1 , date2 , d e l t a )
#Un par de v a l o r e s a l e a t o r i o s
s = rand ( l e n ( d a t e s ) )
#La g r f i
a de f e
h a s
plot_date ( dates , s )
show ( )
90
11 Un Po o de Gra a in
91
11 Un Po
o de Gra
a
in
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#Ahora
try :
ex
ept :
else :
guardalos ,
pero
uidado
por
si
falla
try :
ex ept :
datos
#P r i m e r a
olumna
#S e g u n d a
olumna
#G r a f i a
los
t=data [ : , 0
s=data [ : , 1
datos
Matplotlib permite realizar gr
as en
oordenadas polares de forma muy sen
illa.
1 #! / u s r / b i n / e n v p y t h o n
2
3 #G r f i
a s p o l a r e s
4 from m a t p l o t l i b . pylab import f i g u r e , arange , pi , show
5
6 #C r e a l a f i g u r a
7 fig = figure ()
8
9 #A g r e g a una g r a f i
a ( s u b p l o t 1 1 1 e s s l o una g r f i
a ) ,
92
que
sea
polar
11 Un Po
o de Gra
a
in
10
11
12
13
14
15
16
17
18
19
ax = f i g . add_subplot ( 1 1 1 , p o l a r=True )
#C r e a
los
datos
r=arange ( 0 , 1 , 0 . 0 0 1 )
t h e t a =4 p i r
#G r a f i a
93