python inteligencia artificial.pdf

Upload: jj-rodriguez

Post on 11-Oct-2015

60 views

Category:

Documents


6 download

TRANSCRIPT

  • 5/21/2018 Python Inteligencia Artificial.pdf

    1/40

    El lenguaje

    PythonDavid Masip Rod

    PID_00174138

  • 5/21/2018 Python Inteligencia Artificial.pdf

    2/40

    Los textos e imgenes publicados en esta obra estn sujetos excepto que se indique lo contrario auna licencia de Reconocimiento-NoComercial-SinObraDerivada (BY-NC-ND) v.3.0 Espaa deCreative Commons. Podis copiarlos, distribuirlos y transmitirlos pblicamente siempre que citisel autor y la fuente (FUOC. Fundaci per a la Universitat Oberta de Catalunya), no hagis un usocomercial y no hagis una obra derivada. La licencia completa se puede consultar en

    http://creativecommons.org/licenses/by-nc-nd/3.0/es/legalcode.es

  • 5/21/2018 Python Inteligencia Artificial.pdf

    3/40

    CC-BY-NC-ND PID_00174138 El lenguaje Python

    ndice

    Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    1. Instalacin de Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    2. Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    2.1. Operadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    2.2. Cadenas de caracteres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    3. Control de flujo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    3.1. Sentencias condicionales: la instruccin if. . . . . . . . . . . . . . . . . . . . 12

    3.1.1. Sentencias if-elif-else .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

    3.2. Secuencias iterativas: bucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

    3.2.1. Bucles for ... in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

    3.2.2. while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

    4. Funciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

    4.1. Parmetros de entrada . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

    4.2. Valores de retorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

    5. Tipos de datos en Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

    5.1. Tuplas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

    5.2. Listas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

    5.3. Diccionarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    5.4. Conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

    5.5. Ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

    5.5.1. Ficheros de texto .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

    6. Python y la orientacin a objetos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    6.1. Los objetos en Python . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    6.1.1. Creacin de instancias (objetos) de una clase . . . .. . . . . 28

    6.2. Herencia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

    6.3. Encapsulacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

    6.4. Polimorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    7. Python como lenguaje funcional. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

    7.1. Funciones lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    7.2. Comprensin de listas . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

  • 5/21/2018 Python Inteligencia Artificial.pdf

    4/40

    CC-BY-NC-ND PID_00174138 El lenguaje Python

    8. Libreras: NumPy PyLab y SciPy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

    8.1. NumPy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

    8.2. PyLab. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

    8.3. SciPy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

    Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

    Ejercicios de autoevaluacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

    Bibliografa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

  • 5/21/2018 Python Inteligencia Artificial.pdf

    5/40

    CC-BY-NC-ND PID_00174138 5 El lenguaje Python

    Introduccin

    En este mdulo aprenderemos las bases del lenguaje de programacin Python.

    Este mdulo no pretende ser una gua exhaustiva de todas las caractersticas

    que este lenguaje de programacin nos ofrece, sino que est enfocado a in-

    troducir al estudiante en el entorno Python. El objetivo del texto ser ayudar

    a comprender los ejemplos que se exponen en los mdulos de teora, y pro-

    porcionar una base que permita al estudiante elaborar las distintas actividades

    que el curso requiere.

    A nivel de pre-requisitos, no asumiremos ningn conocimiento previo dePython. Sin embargo, es muy importante tener conocimientos de algn len-

    guaje de programacin previo (C, C++, JAVA, ...), puesto que los conceptos

    elementales (variable, bucle, funcin,...) no se tratarn en profundidad en es-

    te mdulo.

    El lenguaje Python fue diseado a finales de la dcada de los ochenta por Gui-

    do van Rossum. Se trata de un lenguaje de programacin de muy alto nivel,

    con una sintaxis muy clara y una apuesta firme por la legibilidad del cdigo.

    Sin duda es un lenguaje de programacin muy verstil, fuertemente tipado,

    imperativo y orientado a objetos, aunque contiene tambin caractersticas que

    lo convierten en un lenguaje de paradigma funcional.

    Python se puede considerar un lenguaje semi-interpretado. A diferencia de C,

    el cdigo Python no se ejecuta directamente en la mquina destino, sino que

    es ejecutado por un SW intermedio (o intrprete). Sin embargo, al igual que

    JAVA, Python compila el cdigo escrito en lenguaje de alto nivel para obtener

    un pseudo cdigo mquina (bytecode) que es el que propiamente ejecuta el

    intrprete. Existen versiones del intrprete de Python para la mayor parte de

    las plataformas.

    En este mdulo, explicaremos los pasos necesarios para instalar Python en

    una determinada plataforma. A continuacin veremos las principales caracte-

    rsticas del lenguaje a nivel sintctico.

  • 5/21/2018 Python Inteligencia Artificial.pdf

    6/40

    CC-BY-NC-ND PID_00174138 6 El lenguaje Python

    Objetivos

    Los objetivos que el alumno debe de haber conseguido una vez estudiados los

    contenidos de este mdulo son los siguientes:

    1. Refrescar los conceptos elementales de programacin aprendidos en cursos

    anteriores.

    2. Aprender las bases del lenguaje Python.

    3. Ser capaz de entender el cdigo que se muestra en los ejemplos de teora y

    poder modificarlo para realizar otras funcionalidades.

    4. Usar caractersticas avanzadas de Python que permitan utilizarlo como len-

    guaje rpido para el diseo y codificacin de prototipos de inteligencia

    artificial.

  • 5/21/2018 Python Inteligencia Artificial.pdf

    7/40

    CC-BY-NC-ND PID_00174138 7 El lenguaje Python

    1. Instalacin de Python.

    Existen actualmente mltiples implementaciones del lenguaje Python, en fun-

    cin del lenguaje base en el que se ha construido el intrprete. La ms conoci-

    da es CPython, o simplemente Python, que ha sido implementada en lenguaje

    C. Otras opciones disponibles son: IronPython (codificada en C#) o JPython

    (codificada en JAVA).

    * http://www.python.org/

    ** http://www.python.org

    /download/

    Para instalar una determinada versin de Python, aconsejamos recurrir a su si-

    tio web oficial*. En el momento de escribir estos manuales, esta URL contienetoda la informacin necesaria para instalar el entorno. En la seccin de des-

    cargas** se pueden obtener los ltimos paquetes de instalacin para Windows,

    Linux y MacOS X en sus distintas versiones.

    Una vez obtenido el paquete para el sistema operativo y versin adecuados,

    ejecutaremos el instalador, y en una lnea de comandos ejecutaremos el intr-

    prete de Python, y probaremos que todo funciona correctamente mediante el

    clsico Hello World.

    macbook:~ david$ python

    Python 2.6.6 (r266:84292, Oct 16 2010, 21:41:03)

    [GCC 4.0.1 (Apple Inc. build 5490)] on darwin

    Type help, copyright, credits or license for

    more information.

    >>> print Hello World

    Hello World

    >>> quit()

    macbook:~ david$

    En este ejemplo, hemos llamado al intrprete de Python desde el smbolo de

    sistema. Al iniciarse, despus de imprimir la informacin de versiones, Python

    nos muestra el smbolo >>> para indicarnos que el intrprete est espe-

    rando comandos. En este pequeo ejemplo le pedimos que nos imprima la

    cadena de caracteres Hello World, y despus de ver el resultado, salimos de

    Python mediante la instruccinquit(), volviendo al smbolo de sistema. Lle-

    gados a este punto, podemos considerar que tenemos la instalacin bsica de

    Python lista para su uso.

    En este mdulo trabajaremos fundamentalmente con un editor de textos, y

    ejecutaremos los scripts, que programaremos mediante el intrprete. En el

    ejemplo anterior, podramos haber guardado la lnea print Hello Worlden un archivo llamado Hola.py, y ejecutarlo mediante el intrprete con la ins-

    truccin:

  • 5/21/2018 Python Inteligencia Artificial.pdf

    8/40

    CC-BY-NC-ND PID_00174138 8 El lenguaje Python

    macbook:~ david$ python Hola.py

    Hello World

    Entornos de desarrollo IDE

    * http://pydev.org/

    ** http://sourceforge.net

    /projects/spe/

    *** http://www.wingware.com/

    Existe la posibilidad de instalar entornos de desarrollo IDE especficos para Python. No

    es el objetivo de este mdulo analizar los IDE disponibles en el mercado actualmente,aunque citaremos los tres entornos libres ms conocidos. Por un lado PyDEV* es un co-nocidoplug in de Python para el entorno de desarrollo Eclipse, bastante utilizado en elsistema universitario. Tambin existe la opcin de usar un entorno propio, como SPE(Stanis Python Editor)** , o Wing***. En este mdulo trabajaremos directamente con-tra el intrprete de comandos, cualquier editor de textos simple ser suficiente para lasfuncionalidades que desarrollaremos.

  • 5/21/2018 Python Inteligencia Artificial.pdf

    9/40

    CC-BY-NC-ND PID_00174138 9 El lenguaje Python

    2. Variables.

    Los tipos bsicos del lenguaje Python son esencialmente los ya conocidos en

    cualquier lenguaje de programacin: los valores numricos, las cadenas de

    texto, y los valores booleanos. En el cdigo2.1se muestra un ejemplo de cada

    tipo.

    Cdigo 2.1: Ejemplos de uso de variables

    1 # E j em pl o s d e v a r i a b l e s

    23 a =42; # v a lo r e nt e r o

    4 a lon g = 42L ; # v a l o r e n t e r o l o ng (3 264 b i t s e n f u nc i n d e l a p l at af o rm a )5 ahex = 0x2a ; # a en e n n o t a c i n h e x ad e c im a l

    6 a oc ta l = 0 52; #a e n n o ta c i n o c t a l78 b = 3. 14 16 ; # v a l o r e n coma f l o t a n t e9 b no ta ci on = 3 . 14 e 0 ;

    10 c = 3 + 7j ; # P y th o n s o p o r t a n m er os c o m p l e j o s11 d = " E je mp lo de c ad en a d e c a r a c t e r e s " #Una c ad en a d e c a r a c t e r e s

    1213 # I mp ri m ir l a s v a r i a b l e s p or p a n ta l l a

    14 print a , b , c , d ;1516 # t i p o d e l as v a r i a bl e s17 t yp e ( a ) ;

    18 type ( b ) ;19 t yp e ( c ) ;20 type ( d ) ;

    Los nmeros enteros se pueden representar en notacin decimal, octal (an-

    teponiendo un 0 al valor) o hexadecimal (anteponiendo 0x al valor). Al

    igual que en lenguaje C (en el que est escrito Python), los nmeros se pueden

    representar mediante enteros (por defecto) o long(entero largo), que permite

    un rango mayor de valores posibles. Este rango, de nuevo como en C, depen-

    der de la plataforma subyacente, pudiendo ser de 32 o 64 bits.

    Los valores flotantes son implementados a bajo nivel directamente con el tipo

    double de C (registro de 64 bits). Por su parte, los nmeros complejos estn

    soportados de base y en la prctica se implementan mediante dos flotantes,

    uno para la parte real y otro para la parte imaginaria.

    2.1. Operadores

    Los operadores que soporta el lenguaje Python son los clsicos de cualquierlenguaje de programacin. Las tablas 1 y 2 muestran un resumen con ejemplos

    de estas operaciones. Adems, Python provee de extensiones para operaciones

    ms complejas en el mdulomath.

  • 5/21/2018 Python Inteligencia Artificial.pdf

    10/40

    CC-BY-NC-ND PID_00174138 10 El lenguaje Python

    Taula1. Operadores con los tipos bsicos

    Nombre Suma Resta o negacin Multiplicacin Divisin Mdulo Divisin entera Exponenciacin

    Operador + - * / % // **

    Ejemplo a= 1 + 2 a= 2 5o a = 3 a= 2 3 a= 5,4/2 a= 5%2 a= 5,8//2 a= 3 4

    #a= 3 #a= 3 #a= 6 #a= 2,7 #a= 1 #a= 2,0 #a= 81

    Taula2. Operadores a nivel de bit

    Nombre And Or Xor Not Desplazamiento a laderechaDesplazamiento a la

    izquierda

    Operador & |

    Ejemplo a= 2&1 a= 2|1 a= 3 1 a=1 a= 4 2 a= 1 2

    #a= 0(10&01) #a= 3(10|01) #a= 1 #a= 2 #a= 1 #a= 4

    El valor de retorno de un operador en Python viene determinado por el tipo

    de las variables que intervienen en la operacin. As, por ejemplo, si sumamos

    dos nmeros enteros, nos devolver otro valor entero. Si uno de los dos ope-

    randos es un valor en punto flotante, el resultado de la operacin ser tambinun valor en punto flotante.

    El tipo bsico booleano puede recibir dos valores (true, false), y se utilizan

    fundamentalmente para expresar el resultado de condiciones, especialmente

    tiles en los bucles y control de flujo condicional. En la tabla 3se resumen los

    distintos operadores que trabajan con valores booleanos, comunes a la mayor

    parte de lenguajes de programacin.

    Taula3. Operadores con booleanos

    Operador And Or Not == ! = < >

    Ejemplo b= False and True b= False or True b= Not False 8 == 9 8! = 9 8 < 9 8 > 9

    Resultado b ser False b ser True a=n ser True False True True False

    2.2. Cadenas de caracteres

    Las cadenas de caracteres son fragmentos de texto delimitados en Python por

    comillas simples (Ejemplo de cadena) o dobles (Ejemplo de cadena). Si

    queremos introducir saltos de lnea, disponemos del carcter de escape \ n.

    Tambin podemos usar otros caracteres de escape tradicionales como \t (ta-bulacin) o \b (borrar carcter). Para conseguir que el texto se imprima tal

    y como aparece en el cdigo fuente sin tener que recurrir a los cdigos de es-

    cape, podemos delimitarlo por triples comillas (podis ver un ejemplo en el

    cdigo2.2).

    Cdigo 2.2: Ejemplos de uso cadenas de caracteres

    1 # E j e m p l o s d e c a d en a s23 a = " h ol a\n "4 b = " \ t E s t e e s un ejempp\ b lo de c ad en as d e c a r a c t e r e s \n "5 c = " " " E s p o si bl e e s c r i b i r s a l to s de l in ea

    6 s i n n e ce s id a d de c di g os de e s ca p e . " " "78 print a , b , c9

    10 >>>hola

  • 5/21/2018 Python Inteligencia Artificial.pdf

    11/40

    CC-BY-NC-ND PID_00174138 11 El lenguaje Python

    11 E st e es un ejemplo de cadenas de c ar ac te re s12 Es p o si bl e e s c r i b ir s a l to s d e l in ea13 s i n n e ce s id a d d e c d ig o s d e e s c a pe .1415 d = a + b ; # c o n c a t e n a c i n16 e = " r e p i te "17 f = 3e ; # r e p e t i c i n

    18 g = e 3; # e q u iv a l en t e al ca so a n t e r i o r 1920 print d, f , g

    Algunos operadores usados con valores numricos se encuentran sobrecarga-

    dos en el caso de las cadenas de caracteres. Son ejemplos de ello la igualdad

    (que asigna una cadena a una variable) y el operador suma +. La suma de

    dos cadenas es el resultado de concatenar la segunda detrs de la primera. Del

    mismo modo, el producto de una cadena por un escalar da por resultado la

    misma cadena repetida tantas veces como indique el operador numrico.

    Ejemplo

    Si tecleamosstr(8.987)en lalnea de comandos,obtendremos la salida8.987.

    Por ltimo, una funcin muy til en Python es str, que permite realizar la

    conversin de valores numricos a cadena de caracteres.

  • 5/21/2018 Python Inteligencia Artificial.pdf

    12/40

    CC-BY-NC-ND PID_00174138 12 El lenguaje Python

    3. Control de flujo.

    Todos los lenguajes de programacin ponen a nuestra disposicin instruccio-

    nes de control de flujo. Estas instrucciones permiten al programador alterar el

    orden secuencial del cdigo con el fin de permitir ejecutar diferentes rdenes

    en funcin de una serie de condiciones sobre el estado. Python ofrece los dos

    tipos bsicos de sentencias de control de flujo: las sentencias condicionales

    y losbucles(o repeticiones).

    3.1. Sentencias condicionales: la instruccin if

    La instruccin condicionalif(del inglssi) recibe como entrada una expresin

    booleana, y sirve para ejecutar una de porcin de cdigo en funcin de si se

    cumple esta condicin (el resultado de su evaluacin estrue).

    .

    La sintaxis de la instruccin consiste en la palabra clave if, a continua-

    cin la expresin booleana de la condicin, y un signo : que indica elfinal de la condicin, y finalmente, el cdigo a ejecutar en caso de que

    la condicin se evale atrue.

    En el cdigo3.1tenis un ejemplo de instruccin if.

    Cdigo 3.1: Ejemplo de sintaxis de un bloque if

    1 # E j em pl o s d e u so d e i f

    23 c = 37;4 if c > 0 :5 print " El nmero es pos it iv o\n"6 print "Que tenga un buen da\n"7 # c o n t i n u a c i n d e l p ro gr am a

    .

    Un detalle muy importante a observar en este ejemplo de cdigo es la

    identacin. En Python los bloques de cdigo se delimitan mediante

    una correcta tabulacin. A diferencia de otros lenguajes donde dispo-

    nemos de palabras clave especficas (begin, end,...) o llaves ( {,..., }) re-

    servadas para definir bloques de cdigo, en Python slo podemos usartabulacin.

  • 5/21/2018 Python Inteligencia Artificial.pdf

    13/40

    CC-BY-NC-ND PID_00174138 13 El lenguaje Python

    La identacin es un rasgo muy caracterstico del cdigo Python, y permite

    entre otras cosas una lectura mucho ms agradable de los programas, y una

    fcil identificacin de las distintas partes.

    3.1.1. Sentencias if-elif-else

    Cuando el objetivo de la sentencia condicional es dividir la ejecucin del c-

    digo en funcin de si se cumple la condicin o no, y queremos que se haga

    alguna accin de forma explcita cuando la condicin no se cumple, usamos

    la palabra claveelse(siempre seguida de:).

    Existe una tercera palabra clave en las instrucciones de control de flujo condi-

    cionales,elif, que se utiliza para aadir ms condiciones a la sentencia if. Esto

    nos puede ser muy til si tenemos muchos casos que diferenciar y queremostratarlos todos. Se pueden aadir tantos bloques elif como queramos. En el

    cdigo3.2podemos ver un ejemplo de uso del entorno if-elif-else.

    Cdigo 3.2: Ejemplo de sintaxis de un bloque else

    1 # E j em pl o s d e u so d e i f

    23 c = 10;4 if c > 0 :5 print " El nmero es pos it iv o\n"6 print "Que tenga un buen da\n"7 e lif c = = 0 :8 print " El nmero es exactamente 0"

    9 else :10 print " El nmero es neg at ivo"11 print "Que tenga sue rte "12 # c o n t i n u a c i n d e l p ro gr am a

    Si el valor de c fuera 0, se ejecutara la lnea print El nmero es exactamente

    0. Cuando no se cumple la condicin del if, ni de ninguno de los elif que pu-

    diera haber, se acaba ejecutando el bloque de instrucciones correspondientes

    alelse.

    Finalmente, existe una forma compacta de representar sentencias condicio-nales (de forma similar a como usamos Cond ? accin si A es cierto: accin si

    Cond es falso en C) en Python. Se trata de los bloques Accion1 if Cond else

    Accion2. En este caso, se comprueba la condicin Condy se ejecutaAccion1si

    estrueo Accion2si es false.

    3.2. Secuencias iterativas: bucles

    .

    Los bucles son estructuras de control de flujo que permiten repetir un

    bloque de cdigo un determinado o indeterminado nmero de veces.

    Esencialmente existen dos tipos de bucles: fory while.

  • 5/21/2018 Python Inteligencia Artificial.pdf

    14/40

    CC-BY-NC-ND PID_00174138 14 El lenguaje Python

    3.2.1. Bucles for ... in

    El bucle for...in se utiliza para ejecutar una secuencia de pasos un determinado

    nmero de veces (ya conocido previamente).

    .

    La sintaxis que se utiliza es: forelemento in secuencia: y a continuacin

    el bloque de acciones con la identacin correcta.

    En el ejemplo del cdigo 3.3 podemos ver un uso tpico del bucle for para

    recorrer un vector de datos.

    Cdigo 3.3: Ejemplo de sintaxis de un bucle for...in

    1 # E j em pl os de u so d e l b u cl e f o r 23 v e ct o r = [ " h ol a " , " buenos " , " d a s " ] ;4 for palab r a in vector :5 print palab r a6 # i m p ri m i r a t o d a s l a s p a la b ra s d e l v e c t o r

    .

    Es importante destacar que el bucle for no se comporta exactamente

    como estamos acostumbrados en la mayor parte de lenguajes de pro-

    gramacin. En Python, a cada paso del bucle se instancia el elemento

    iterador con un valor de la secuencia de forma automtica.

    En el ejemplo, la variable palabra ir cogiendo a cada paso el valor de uno de

    los elementos de la lista vector (ms adelante veremos ms detalles sobre el

    funcionamiento de las listas): en la primera iteracin palabra tomar el valor

    hola, en la segunda valdr automticamente buenos, y as sucesvamente.

    No ser necesario trabajar con ndices puesto que Python har todo el trabajo

    por nosotros.

    3.2.2. while

    El bucle while sigue un planteamiento mucho ms similar a los lenguajes de

    programacin tradicionales. Este bucle nos permite ejecutar un determinado

    bloque de cdigo mientras una determinada condicin sea cierta.

    .

    Su sintaxis es:whileCondicin:

    En el ejemplo del cdigo3.4se muestra un uso tpico del bucle while.

  • 5/21/2018 Python Inteligencia Artificial.pdf

    15/40

    CC-BY-NC-ND PID_00174138 15 El lenguaje Python

    Cdigo 3.4: Ejemplo de sintaxis de un bucle while

    1 # E j em pl os de u so d e l b u cl e f o r 23 pares = 2;4 while p a r es 0 :5 print par es6 pares = pares + 27 if p a r e s > 2 0 :8 break9 # i m p r i m ir a t o d os l o s n m er os p a r es

  • 5/21/2018 Python Inteligencia Artificial.pdf

    16/40

    CC-BY-NC-ND PID_00174138 16 El lenguaje Python

    4. Funciones.

    Todos los lenguajes de programacin ofrecen mecanismos que permiten en-

    capsular una serie de operaciones de forma parametrizable, y devolver unos re-

    sultados determinados. Estos fragmentos de cdigo se denominan funciones.

    .

    En Python las funciones se declaran mediante la palabra clave def. Su

    sintaxis es:

    defnombre_funcion(parametro1, parametro2, ..., parametroN):

    Delimitacin de cdigofuente

    Hay que recordar que Pythonno usa llaves ni palabras clavepara delimitar cdigo fuente.

    A continuacin se escribe un salto de lnea y las operaciones asociadas a la fun-

    cin, como siempre con una identacin a la derecha (tabulacin) que indica

    que este cdigo se corresponde a la funcin.

    Una vez se ha definido la funcin, se puede llamar con distintos parmetros

    dentro del cdigo.

    .

    La llamada o ejecucin de una funcin sigue la sintaxis: nom-

    bre_funcin(parametro1, parametro2,..., parametroN).

    4.1. Parmetros de entrada

    Las llamadas a funciones reciben como argumentos una lista de parmetros

    (implementada en Python como una tupla), que se corresponden con los pa-

    rmetros establecidos en el momento de la definicin de la funcin. En el

    ejemplo del cdigo4.1se puede observar la llamada a una funcin que im-

    prime el resultado de elevar un nmero base (parametro1) a un exponente

    (parametro2).

    Cdigo 4.1: Ejemplo de sintaxis de una funcin

    1 # E j em pl o s d e d e f i n i c i o n e s y l la ma da s d e f u n c i o n e s2 # F u nc i n p o t e nc i a d e d o s v a l o r e s ( u sa c omo b as e e l p r im e r p ar m et ro

    3 # y com o e x p o n e n t e e l s e g un d o p a r m e t r o )45 def exponenciar ( parametro1 , parametro2 ) :

  • 5/21/2018 Python Inteligencia Artificial.pdf

    17/40

    CC-BY-NC-ND PID_00174138 17 El lenguaje Python

    6 " " E jemp lo de fu nc i n que e le v a un nmero o b as e a un e xp on en te7 print parametro1 parametro289 def exponenciar2( parametro1 , parametro2= 2) :

    10 print parametro1 parametro21112 e xp on en ci ar ( 2 , 3 ) ;

    13 exponenciar ( parametro2=3, parametro1= 2);14 e xp on en ci ar ( 3 , 2 ) ;15 exponenciar ( parametro2=2, parametro1= 3);1617 e xp on en ci ar 2 ( 5 ) ;18 exponenc iar 2( 5 , 3) ;1920 # l l a m ad a s e r r n e a s21 exponenc iar ( 2 , 3 , 4) ;

    En primer lugar notad que la tabulacin vuelve a jugar un papel clave. Pa-

    ra diferenciar el final de la definicin de la funcin y el resto de cdigo del

    programa principal, basta con mirar el cdigo fuente por encima. La propiaidentacin delimita claramente los bloques.

    Tambin se puede observar una cadena inicial que empieza por . Estas cade-

    nas se utilizan para documentar las funciones. Los programadores familiariza-

    dos con JAVA pueden ver cierto paralelismo con el doc usado en este lenguaje.

    Al final de la definicin de la funcin se encuentran las llamadas. Es interesan-

    te observar las distintas formas de cmo se pueden parametrizar las funciones

    en Python. El uso normal suele ser llamar a la funcin con los parmetros en

    el mismo orden en que se ha definido la funcin. Sin embargo, se puede tam-

    bin llamar a la funcin con el nombre del parmetro y su valor asociado. De

    este modo son posibles llamadas que se saltan la regla del orden como las del

    ejemplo, donde encontramosexponenciar(parametro2=3, parametro1=2), que es

    equivalente aexponenciar(2,3). Es importante destacar que Python obliga a lla-

    mar a las funciones usando exactamente el mismo nmero de argumentos, en

    caso contrario se generar un error de ejecucin.

    Existe tambin la posibilidad de inicializar parmetros con valores por defecto

    en caso de que no se proporcione su valor en el momento de la llamada. Lafuncinexponenciar2 muestra un ejemplo donde en caso de no proporcionar

    un argumento utilizara un 2 por defecto (elevara al cuadrado).

    Python permite tambin funciones con un nmero variable de parmetros.

    En el ejemplo del cdigo4.2se puede ver la sintaxis utilizada en una funcin

    que imprime la suma de todos sus argumentos.

    Cdigo 4.2: Ejemplo de sintaxis de una funcin con parmetros variables

    1 # E j em pl o s d e d e f i n i c i o n e s y l la ma da s d e f u n c i o n e s

    2 # fu n c i n s uma34 def s um ar Lis t a( parametros ):5 r e s u lt a do = 0 ;6 for val in parametros :

  • 5/21/2018 Python Inteligencia Artificial.pdf

    18/40

    CC-BY-NC-ND PID_00174138 18 El lenguaje Python

    7 r e s u lt a do = r e s u lt a do + val ;8 print r es ult ado ;9

    10 s u ma r Li s ta ( 1 , 2 , 3 , 4 ) ;

    Ved tambin

    Las listas y las tuplas seestudian en el apartado5deeste mdulo.

    La sintaxis de este ejemplo es un poco confusa, puesto que an no hemos tra-tado los tipos de datos complejos, como las listas y las tuplas. Esencialmente se

    define un argumento que contiene una tupla con todos los posibles parme-

    tros a recibir. Esta tupla se recorre en tiempo de ejecucin para poder utilizar

    los parmetros de forma adecuada.

    Un ltimo factor a tener en cuenta en los parmetros a funciones en cualquier

    lenguaje de programacin es su modificacin en tiempo de ejecucin. Tradi-

    cionalmente los pasos por parmetro funcionan por valoro por referencia.

    En el primer caso los argumentos a una funcin no se modifican al salir de ella

    (en caso de que el cdigo interno los altere). Tcnicamente, se debe al hecho

    de que realmente no pasamos a la funcin la variable en cuestin, sino una

    copia local a la funcin que es eliminada al acabar su ejecucin. En el caso

    del paso por referencia se pasa a la funcin un puntero al objeto (en el caso

    de C) o simplemente una referencia (en lenguajes de alto nivel) que permite

    su indireccin. De este modo, las modificaciones a los parmetros que se ha-

    cen dentro de la funcin se ven reflejadas en el exterior una vez la funcin

    termina. En Python los pasos por parmetros son en general por referencia.

    La excepcin la conforman los tipos de datos bsicos o inmutables (enteros,

    flotantes, ...), que se pasan por valor. El cdigo4.3muestra un ejemplo de este

    hecho.

    Cdigo 4.3: Ejemplo de paso por valor y referencia en Python

    1 # E j em pl o s d e d e f i n i c i o n e s y l la ma da s d e f u n c i o n e s

    2 # f u nc i n p a ra v e r i f i c a r l a m o d i f i c a b il i d a d d e l o s p ar a me t ro s34 def pe rsis tenci aPar ametr os (parametro1 , parametro2 ):5 parametro1 = parametro1 + 5 ;6 parametro2 [ 1 ] = 6 ;7 print parametro1 ;8 print parametro2 ;9

    10 numeros = [1 , 2 , 3 , 4] ;

    11 v a lo r In m ut a bl e = 2 ;12 per s is t enc iaP ar am et r os ( valor Inm ut ab le , numer os ) ;13 print numeros ;14 print valorInmutable ;

    Como se puede observar a partir de la ejecucin del ejemplo, el vector de

    nmeros sufre las modificaciones debidas al cdigo interno de la funcin,

    mientras que el valor entero se modifica dentro de la funcin pero pierde esta

    modificacin al devolver el control al programa principal.

    4.2. Valores de retorno

    Hasta ahora se han descrito las funciones Python como fragmentos de cdigo

    que efectan unas determinadas acciones de forma reutilizable. Los ejemplos

  • 5/21/2018 Python Inteligencia Artificial.pdf

    19/40

    CC-BY-NC-ND PID_00174138 19 El lenguaje Python

    vistos son en el fondo versiones procedimentales de funciones, puesto que en

    ningn caso se devuelve un valor de retorno.

    .

    La sintaxis para el retorno de valores en Python difiere de los lenguajes

    de programacin habituales, puesto que Python permite devolver ms

    de un valor de retorno. La palabra clave a utilizar es return, seguida de

    la lista de argumentos que hay que devolver.

    Existe tambin la posibilidad de obviar los valores de retorno y utilizar el paso

    de parmetros por referencia, obteniendo un resultado similar. El cdigo 4.4

    muestra tres ejemplos de uso de retorno de valores en funciones. Notad que

    la funcinsumaPotencia devuelve el resultado de efectuar las dos operaciones

    en forma de lista. En realidad la funcin slo devuelve un valor (la lista), peroel efecto producido es el mismo que si pudiera devolver mltiples valores.

    Cdigo 4.4: Ejemplo de retorno de valores en Python

    1 # E j em pl o s d e d e f i n i c i o n e s y l la ma da s d e f u n c i o n e s

    2 # f un ci n p ar a p r a c t i c a r e l r e t o rn o de v a l o r es34 def suma( parametro1 , parametro2 ) :5 return parametro1 + parametro2;67 def pote ncia ( parametro1 , parametro2 ) :8 return parametro1 parametro2 ;

    910 def sumaPotencia( parametro1 , parametro2 ) :11 return parametro1 + parametro2 , parametro1 parametro2 ;1213 r e s u lt a d o 1 = s uma ( 2 , 3 ) ;14 print r es ult ado1 ;15 r e s u lt a d o 2 = p o te n ci a ( 2 , 3 ) ;16 print r es ult ado2 ;17 r e s u lt a d o 3 = s um aP ot en ci a ( 2 , 3 ) ;18 print r es ult ado3 ;

  • 5/21/2018 Python Inteligencia Artificial.pdf

    20/40

    CC-BY-NC-ND PID_00174138 20 El lenguaje Python

    5. Tipos de datos en Python.

    En el apartado anterior hemos visto los tipos elementales de datos en Python:

    los enteros, los valores flotantes, las cadenas de texto y los valores booleanos.

    En este apartado, veremos tipos de datos ms complejos que permiten trabajar

    con agrupaciones de estos tipos de datos bsicos. En especial, veremos las

    tuplas, las listas, los conjuntos, los diccionarios y finalmente, los ficheros.

    5.1. Tuplas

    .

    Una tupla es una secuencia inmutable y ordenada de elementos. Cada

    uno de los elementos que conforman una tupla puede ser de cualquier

    tipo (bsico o no). La sintaxis para declarar una tupla consiste en espe-

    cificar sus elementos separados por una coma ( ,).

    Es muy habitual agrupar todos los elementos de una tupla entre parntesis,aunque no es imprescindible (slo se exige el uso del parntesis cuando puede

    existir confusin con otros operadores). A menudo se coloca una coma al final

    de la tupla para indicar la posicin del ltimo elemento. En el cdigo 5.1se

    pueden ver distintos ejemplos de uso de tuplas.

    Cdigo 5.1: Ejemplo de tuplas en Python

    1 # E j em pl o s d e u so d e t u p l a s

    23 t up la _v ac ia = ( ) ;4 tu pl a1 = 1 ,2 , 3 , 4 , 6 ,

    5 t u pl a 1b = ( 1 , 2 , 3 , 4 , 6 ) ;6 t up la 2 = h ol a , 2 , 37 t up la 3 = t up la 2 , 908 t u pl a 4 = t u p l e ( e j em pl o ) ;9

    10 # R e su l ta d o d e l a e j e c u c i n11 >> print tupla112 ( 1 , 2 , 3 , 4 , 6)13 >>> print tupla1b14 ( 1 , 2 , 3 , 4 , 6)15 >>> print tupla216 ( h ol a , 2 , 3 )17 >>> print tupla218 ( h ol a , 2 , 3 )19 >>> print tupla3

    20 ( ( h ola , 2 , 3 ) , 9 0)21 >>> print tupla422 ( e , j , e , m , p , l , o )

  • 5/21/2018 Python Inteligencia Artificial.pdf

    21/40

    CC-BY-NC-ND PID_00174138 21 El lenguaje Python

    5.2. Listas

    .

    Una lista es una secuencia mutable y ordenada de elementos. A dife-

    rencia de las tuplas, los elementos de las listas se pueden modificar una

    vez han recibido un valor asignado. Para especificar los elementos que

    forman una lista, se usa una tira de elementos separada de nuevo por

    coma (,), al principio y al final la lista se envuelve entre corchetes [,].

    En el cdigo5.2se pueden ver ejemplos de usos de listas.

    Cdigo 5.2: Ejemplo de listas en Python

    1 # E j em pl os de u so de l i s t a s

    2

    3 l is t a _v ac ia = [ ] ;4 l i s t a = [ 1 , 2 , 3 , 4 , 6 ]5 l i s t a 2 = [ h ola , 2 , 3 ] ;6 l i s t a 3 = [ l i s t a 2 , 9 0 , good ] ;7 l i s t a 4 = l i s t ( e jemplo ) ;8 l i s t a 5 = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] ;9

    10 # R e su l ta d o d e l a e j e c u c i n

    1112 >>> print l i s t a _ v a c i a13 [ ]14 >>> print l i s t a15 [ 1 , 2 , 3 , 4 , 6]16 >>> print l i s t a 217 [ h ol a , 2 , 3 ]

    18 >>> print l i s t a 319 [ [ ho la , 2 , 3 ] , 9 0 , good ]20 >>> print l i s t a 421 [ e , j , e , m , p , l , o ]22 >>> l i s t a 3 [ 2 ]23 good 24 >>> l i s t a 3 [ 0 ]25 [ h ol a , 2 , 3 ]2627 # E je mp lo s d e a c c e s o a s u b l i s t a s28 >>> l i s t a 5 [ 2 : 3 ]29 [ 3]30 >>> l i s t a 5 [ 3 : ]31 [ 4 , 5 , 6 , 7 , 8 , 9 ]32 >>> l i s t a 5 [ : 3 ]

    33 [ 1 , 2 , 3 ]34 >>> l i s t a 5 [ : ]35 [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9]3637 # A a di r e l e m e n t o s a una l i s t a38 >>> l i s t a = [ 1 , 2 , 3 , 4 , 6 ]39 >>> l i s t a . a ppend ( [ 7 , 8 , 9 ] )40 >>> print l i s t a41 [ 1 , 2 , 3 , 4 , 6 , [ 7 , 8 , 9 ]]42 >>> l i s t a = [ 1 , 2 , 3 , 4 , 6 ]43 >>> l i s t a . ex te nd ( [ 7 , 8 , 9 ] )44 >>> print l i s t a45 [ 1 , 2 , 3 , 4 , 6 , 7 , 8 , 9]4647 # B u sc a r y e l i m i n a r e l e m en t o s

    48 >>> l i s t a 2 . i nd ex ( h ol a )49 050 >>> print l i s t a 251 [ h ol a , 2 , 3 ]52 >>> l i s t a2 . r emove( hola )

  • 5/21/2018 Python Inteligencia Artificial.pdf

    22/40

    CC-BY-NC-ND PID_00174138 22 El lenguaje Python

    53 >>> print l i s t a 254 [ 2 , 3 ]5556 # o p e r a d o r e s s o b r e c a r g a d o s d e c o n c a t en a c i n

    57 >>> print l i s t a 2 + l i s t a258 [ 2 , 3 , 2 , 3 ]59 >>> print l i s t a 2 4

    60 [ 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3]61 >>>

    Notad que los accesos a las listas (y tambin a las tuplas) se hacen mediante

    indexacin directa. Para leer el primer elemento de una lista se usa la sintaxis

    nombre_lista[0]. Es importante destacar que los ndices empiezan a contar

    desde 0, y llegan hasta el (nmero de elementos -1). As, en el ejemplo,lista3

    tiene 3 elementos, el primero de los cuales (ndice 0) es otra lista, el segundo

    (ndice 1) es un 90 y el tercero (indice 2) good. Existe tambin la posibilidad

    de referenciar los elementos de una lista con ndices negativos. En este caso

    se empieza a contar desde el final de la lista, siendo el ndice -1 el ltimo

    elemento de la lista. Por ejemplo, lista3[-1] nos dara la palabragood, lista3[-2]

    un 90, y lista3[-3] la lista equivalente a la lista2.

    Aparte de poder consultar los elementos individuales de las listas, tambin

    se puede acceder a una sublista. Para ello se usa el operador :. A la izquierda

    del operador se coloca el ndice inicial y a la derecha el ndice final. Si no se

    especifica ningn ndice significa que se cogern todos los elementos hasta

    llegar al extremo correspondiente. En el ejemplo, vemos cmo lista5[:3] nos

    da todos los elementos hasta el segundo (incluido), y lista5[3:] empieza por eltercero hasta el final de la lista. En el caso de lista5[:] nos devolver toda la

    lista.

    Ved tambin

    Ms adelante, en elapartado6, dedicado a laorientacin a objetos, sedescribir con ms detalle elconcepto de mtodo.

    Para aadir elementos a una lista, disponemos de dos mtodos, append y

    extend. Append aade un elemento a una lista (independientemente de su

    tipo), y extend recibe una lista de elementos, y los concatena a la lista actual.

    En el ejemplo se puede observar la diferencia de comportamiento de ambos

    mtodos ante la misma entrada.

    Otros mtodos auxiliares tiles son la bsqueda de elementos y la elimina-

    cin de elementos. La bsqueda se suele realizar con el mtodo index, que

    devuelve la posicin donde se encuentra la primera ocurrencia del elemento.

    La eliminacin se realiza con el mtodo removeque elimina la primera ocu-

    rrencia de un determinado elemento en una lista. El ejemplo muestra el uso

    de estos dos mtodos, donde se busca un determinado elemento.

    Otra funcin muy til en las listas, sobre todo para usar en bucles for, es range.

    Esta funcin, dado un nmero natural N, nos devuelve una lista con todos los

    elementos hasta N-1. As pues, si tecleamos range(8)en la lnea de comandos,obtendremos[0, 1, 2, 3, 4, 5, 6, 7], que podrn ser seguidos en un bucle for

    para ejecutar una determinada accin 8 veces.

  • 5/21/2018 Python Inteligencia Artificial.pdf

    23/40

    CC-BY-NC-ND PID_00174138 23 El lenguaje Python

    Finalmente, existen sobrecargas de los operadores aritmticos bsicos +,*. El

    operador suma concatena dos listas, y el operador multiplicacin recibe una

    lista y un valor escalar, devolviendo la repeticin de la lista (tantas veces como

    indica el valor).

    5.3. Diccionarios

    Los diccionarios conforman uno de los tipos de datos ms tiles para los pro-

    gramadores en Python, y representan una interesante novedad respecto a los

    lenguajes de programacin imperativos tradicionales. Se trata de unas estruc-

    turas de memoriaasociativa. Los elementos en los diccionarios no se consul-

    tan mediante un ndice, sino que se accede directamente a ellos por conteni-

    do. El cdigo5.3muestra un ejemplo de diccionario y su uso.

    Cdigo 5.3: Ejemplo de tuplas en Python

    1 # E j em pl o s d e u so d e d i c c i o n a r i o s23 dic c ionar io1 = { nombre : A lejandr o , edad : 34, num er os favor itos : ( 3 , 7 , 13) }45 t upla = ( ( nombre , A lejandr o ) , ( edad , 34) , ( num eros favor it os , ( 3 , 7 , 13) ) )67 d i cc i on a ri o 2 = d i c t ( t u p l a ) ;8 d i c c io n a r i o 3 = { l i b r o s : e l j u eg o d e E nd er , t e l e f o n o : 9 34 57 23 45 }9

    10 a = dic c ionar io1 [ nombre ]11 >>> print a12 A l ej a nd r o1314 >>> nombre in dic c ionar io215 T ru e1617 dic c ionar io1 . update( dic c ionar io3 )18 >>> print dic c ionar io119 { e da d : 3 4 , nombre : A l e j an d ro , n u m e ro s fa v or i to s : ( 3 , 7 , 1 3 ) , l i b r o s : e l j u eg o d e E nd er ,20 t e l e f o n o : 9 34 57 23 45 }2122 del dic cio nar io1 [ nombre ]23 >>> print dic c ionar io124 { e da d : 3 4 , n u m e ro s fa v or i to s : ( 3 , 7 , 1 3 ) , l i b r o s : e l j u eg o d e E nd er , t e l e f on o : 9 34 57 23 45 }2526 >>> nombre in dic c ionar io127 F al se

    Para crear el diccionario simplemente indicaremos entre llaves {,} las parejas

    de elementos que lo conforman. En cada pareja indicaremos primero el valor

    llave para acceder al elemento, y despus el valor que contendr (que pue-

    de ser de cualquiera de los tipos disponibles en Python). La consulta de un

    valor del diccionario se reducir a preguntar por el valor que tiene la llave aso-

    ciada. En el ejemplo, guardamos en la variable a el contenido de la posicin

    de memoria nombre. El string nombre nos sirve para indexar posiciones de

    memoria o variables. Las estructuras de memoria asociativa que permiten esta

    funcionalidad son de gran utilidad en el tratamiento de datos textuales y los

    sistemas de clasificacin de lenguaje natural.

  • 5/21/2018 Python Inteligencia Artificial.pdf

    24/40

    CC-BY-NC-ND PID_00174138 24 El lenguaje Python

    Existen varios mtodos auxiliares para trabajar con diccionarios, entre los que

    destacan el mtodo in, que permite consultar si una determinada llave est

    presente en el diccionario, el mtodo update que permite combinar dos dic-

    cionarios y el mtododel que elimina una entrada de un diccionario.

    5.4. Conjuntos

    Los conjuntos son secuencias ordenadas de elementos nicos (concepto mate-

    mtico de conjunto). Existen dos tipos de conjuntos, lossetsy los frozensets

    (que son mutables e inmutables respectivamente). Las operaciones tpicas so-

    bre conjuntos son: conocer la longitud de un conjunto (mtodo len), conocer

    si un elemento est en un conjunto (mtodo in), unin (mtodo union), la

    interseccin (mtodo intersection), aadir un elemento a un conjunto (mto-

    doadd) y eliminar un elemento de un conjunto (mtodo remove). El cdigo5.4muestra un ejemplo de uso de conjuntos en Python.

    Cdigo 5.4: Ejemplo de conjuntos en Python

    1 # E j e mp lo s d e u so d e c o n j u n to s23 c on ju nt o1 = s e t ( [ 1 , 2 , 3 , 4 ] )4 co nj un to 2 = s e t ( [ 3 , 4 ] )5 c onjunto2. remove( 3)6 c on ju nt o2 . a dd ( 5 )7 print conjunto289

    10 uni = c onjunt o1 . union( c onjunto2)11 int = c onjunt o1 . int e r s ec t ion ( c onjunt o2)12 >>> print un i13 s et ( [1 , 2 , 3 , 4 , 5 ])14 >>> print i nt15 s et ( [ 4 ] )

    5.5. Ficheros

    Observacin

    Hemos preferido explicar lafuncionalidad bsica de losficheros en estos apuntes,puesto que pueden sernecesarios durante todo elcurso para cargar los datosnecesarios para losalgoritmos de teora.

    Los ficheros no son un tipo de datos en s mismos, sino un objeto que permite

    interactuar con el sistema de entrada y salida para escribir datos en el disco.

    En este manual, an no hemos tratado el concepto de orientacin a objetos

    en Python. Sin embargo, ser necesario introducir algunos mtodos bsicos

    para acceder al objeto que hace de interfaz con el disco. La funcin bsica de

    acceso a un fichero se denomina open, que recibe como parmetro un nombre

    de fichero y un modo (lectura r, escritura w). El acceso a los datos se puede

    realizar mediante los mtodos:

    read: Lee un determinado nmero de bytes del fichero (argumento delmtodo).

    seek: Se encarga de posicionar el lector en el byte indicado en el argu-

    mento.

  • 5/21/2018 Python Inteligencia Artificial.pdf

    25/40

    CC-BY-NC-ND PID_00174138 25 El lenguaje Python

    tell: Devuelve la posicin que se est leyendo en la actualidad del fichero.

    close: Cierra el fichero.

    Cdigo 5.5: Ejemplo de acceso a un fichero. Ejecutar el cdigo y verificar el

    funcionamiento de las funciones bsicas de acceso a fichero

    1 # E j em pl o s d e u so d e f i c h e r o s23 f =open ( " f i l e s . py " , " r " )4 f . t e l l ( )56 f . r ea d ( 3 0)78 f . r ea d ( 1 0)9 f . t e l l ( )

    1011 f . s e ek ( 2 )12 f . t e l l ( )13 f . r ea d ( 8 )14 f . c l o s e ( )

    5.5.1. Ficheros de texto

    Los ficheros de texto son un caso particular que Python permite tratar de

    forma mucho ms cmoda e integrada en el lenguaje. Existe un mtodoread-

    lines(), que permite leer el contenido del fichero por lneas, devolviendo un

    array donde se puede indexar cada una de ellas. Del mismo modo, es posible

    acceder lnea por lnea al contenido de un fichero, y efectuar un tratamiento

    individualizado de cada una de ellas mediante un simple bucle for. En el ejem-plo del cdigo 5.6podis ver el cdigo que recorre un fichero y lo imprime

    por pantalla.

    Cdigo 5.6: Ejemplo de acceso a un fichero

    1 # E j em pl o s d e u so d e f i c h e r o s23 # L e e r una l i n e a4 f = open ( " T e x t f i l e s . py " , " r " )5 l i n e as = f . r e a dl i ne s ( )67 # i mp r im i r p o r p a n ta l l a l a p r im e ra l i n e a8 print l i n e a s [ 0 ]

    9 # i m p r i m i r l a s t o d a s10 print l i n e a s [ : ]1112 # C er r ar e l f i c h e r o

    13 f . c l o s e ( ) ;1415 # Le er t od o e l f i c he r o l i ne a a l i n e a16 for l i n e in open ( " T e x t f i l e s . p y " , " r " ) :17 print l i n e1819 # Bu cl e q ue r e c o r r e l a s l i ne a s d e un f i c h er o o r ig en y l as20 # c op ia e n e l d e st i n o

    21 fw r it e = open( " CopiaTex t files . py" , "w " )22 for l i n e in open ( " T e x t f i l e s . p y " , " r " ) :23 f w ri te . w ri te ( l i ne ) ;

    2425 f w r i t e . c l o s e ( )

  • 5/21/2018 Python Inteligencia Artificial.pdf

    26/40

    CC-BY-NC-ND PID_00174138 26 El lenguaje Python

    Finalmente, disponemos del mtodowriteque permite escribir contenidos en

    un fichero. En el ejemplo anterior, recorremos el primer fichero y lnea a lnea

    lo vamos escribiendo en el fichero destino (CopiaTextfiles).

  • 5/21/2018 Python Inteligencia Artificial.pdf

    27/40

    CC-BY-NC-ND PID_00174138 27 El lenguaje Python

    6. Python y la orientacin a objetos.

    El lenguaje Python permite trabajar mediante el paradigma de programacin

    imperativa clsica (como en todos los ejemplos vistos hasta ahora), o median-

    te el paradigma de la orientacin a objetos, e incluso mediante lenguaje fun-

    cional. En este apartado veremos la sintaxis de la orientacin a objetos (OO)

    en Python, con algunos ejemplos prcticos. Asumiremos que el estudiante co-

    noce las bases de la OO, y que est familiarizado con los conceptos de clase,

    objeto y mtodo.

    6.1. Los objetos en Python

    Un objeto no es ms que el resultado de encapsular una determinada entidad,

    que est formada por un estado (los datos o atributos) y un funcionamiento

    (losmtodos). Una clase es la plantilla o concepto genrico de un objeto, que

    se usa para definir sus propiedades y servicios. Un objeto es pues una instancia

    concreta de una clase.

    Para definir una clase usamos la palabra claveclass. En el fragmento de cdigo

    6.1mostramos un ejemplo de definicin de una clase.

    Cdigo 6.1: Ejemplo de definicin de una clase

    1 # D e f i n i c i n d e l a c l a s e P an ad er ia

    2 class Panaderi a :3 def _ _ i n i t _ _ ( s e l f , p an es , p a s t i t a s ) :4 s e l f . panes = panes5 s e l f . pa s t as = p a s t i t a s6 print " E n l a t i e nd a hay " , s e l f . p a ne s , " p a ne s y " , p a s t a s , " p a s t a s aunque e s t a s no s e venden "7 def vender ( s el f ) :

    8 if s e l f . p an es > 0 :9 print "Vendido un pan ! "10 s e l f . panes = 111 else :12 print "Lo sentimos no quedan panes por vender"13 def c o c e r ( s e l f , p i e z a s ) :14 s e l f . panes += p i ez as15 print "Quedan" , se lf .panes , "panes"1617 p a na d er ia 1 = P a na d er i a ( 3 , 4 )18 p a na d er ia 2 = P a na d er i a ( 1 , 2 )1920 p a na d er ia 2 . v en de r ( )21 p a na d er ia 2 . v en de r ( )22

    23 p a na d er ia 2 . c o ce r ( 1 )24 p a na d er ia 2 . v en de r ( )

  • 5/21/2018 Python Inteligencia Artificial.pdf

    28/40

    CC-BY-NC-ND PID_00174138 28 El lenguaje Python

    Ved tambin

    La palabra clavedefseestudia en el apartado4,dedicado a las funciones.

    Lo primero que observamos, despus de los comentarios, es el uso de la pala-

    bra claveclass, que nos permite definir el entorno de una clase. A continua-

    cin viene el nombre de la clase, Panadera, que se utilizar posteriormente

    para construir objetos de la clase. Para definir los mtodos de la clase, hace-

    mos uso de nuevo de la palabra clave def. Los mtodos se definen siguiendo

    una sintaxis bastante parecida a las funciones.

    Otro punto destacable es el mtodo__init__. Este mtodo es especial, siempre

    recibe el mismo nombre (independientemente de la clase), y sirve para especi-

    ficar las acciones a llevar a cabo en el momento de la creacin e inicializacin

    de un objeto de la clase en cuestin. En este caso, recibe tres parmetros, aun-

    que el primero de ellos es de nuevo especial, se trata de la palabra reservada

    self.Selfse utiliza para hacer referencia al propio objeto. Una vez creado,self

    nos permitir diferenciar los nombres de las variables miembro del objeto del

    resto de valores. La funcin del selfes parecida a this en otros lenguajes de

    programacin (C++, JAVA,...). Si seguimos mirando el ejemplo, observamos

    cmo tenemos una variable miembro llamada panes, y un argumento a la

    funcin __init__ con el mismo nombre. En la expresin (self.panes=panes)

    diferenciamos ambos valores mediante el uso del self.

    6.1.1. Creacin de instancias (objetos) de una clase

    Para crear un objeto concreto de una clase, basta con usar el nombre que le

    hemos dado a la clase seguido de los argumentos que necesita la funcin de

    inicializacin (que aqu tiene un efecto similar a los constructores del lenguaje

    C++). En el ejemplo hemos creado dos objetos de la clase Panadera (panade-

    ria1y panaderia2).

    .

    La ejecucin de mtodos, como en muchos len-

    guajes de programacin, sigue la sintaxis nom-

    bre_del_objeto.nombre_del_metodo(argumentos,...).

    En el ejemplo se llama en diversas ocasiones a los mtodos vendery cocerde

    los objetos creados. Ejecutad el fragmento de cdigo e interpretar el resultado

    que se imprime por pantalla.

    6.2. Herencia

    .

    Cuando decimos que una clase hereda de otra, nos referimos a que la

    clase resultante contendr todos los atributos y mtodos de la clase pa-

    dre o superclase, permitiendo de esta forma una especializacin progre-

    siva de las clases y una mayor reutilizacin de cdigo.

  • 5/21/2018 Python Inteligencia Artificial.pdf

    29/40

    CC-BY-NC-ND PID_00174138 29 El lenguaje Python

    Para hacer que una clase herede de otra en Python, simplemente tenemos que

    indicarlo a continuacin del nombre de la clase, entre parntesis. En el cdigo

    6.2se muestra un ejemplo muy simple de herencia.

    Cdigo 6.2: Ejemplo de uso de herencia en las clases Python

    1 # D e f i n i ci n d e l a c l a s e Animal : E je mp lo s d e H e r en c ia

    2 class Animal :3 def _ _ ini t _ _ ( s el f , age , w eig ht ) :4 s e l f . age = age5 s e l f . __weight = weight6 def __privateMethod( self ):7 print s e l f . w ei gh t ;8 def getWeight( self ):9 return s e lf . _ _w eig ht ;

    10 def eat ( se lf , kgm) :11 s e l f . __weight += kgm;12 print "The animal Weitghs: " , se lf . __weight , " af te r eating . "1314 class Bird(Animal):

    15 def f l y ( s e l f ) :16 print " I f l y a s a b ir d ! "1718 class Mammal( Animal ) :19 def f l y ( s e l f ) :20 print " I can not fl y , I am a mammal! "2122 class Ostrich (Animal , Bird ): # A v e s t r u z23 def f l y ( s e l f ) :24 print " I can n ot f l y , I am a B i rd b ut o s t r i c h s do n ot f l y ! "2526 class Pla typ us1 (Mammal, Bir d ):27 pass2829 class P lat ypu s2 ( Bird ,Mammal) :30 pass313233 animal1 = A nim al( 3 , 0. 5 )34 animal1 . eat ( 0. 1)3536 c an ar y = B i rd ( 1 , 0 . 4 5 )37 c an ar y . e a t ( 0 . 0 2 )38 c an ar y . f l y ( )3940 bear = Mammal(10 ,150)41 b e ar . e a t ( 1 0 )42 b e ar . f l y ( )4344 o s tr i ch = O st ri ch ( 5 , 3 0 )

    45 o s t r i ch . f l y ( )4647 p l a ty p us = P l a ty p us 1 ( 2 , 3 )48 p l a ty p us . f l y ( )4950 p l a ty p us = P l a ty p us 2 ( 2 , 3 )51 p l a ty p us . f l y ( )5253 print bear . getWeight( )54 b ear . pr ivateMet hod ( )

    Observad que en este ejemplo trabajamos con cuatro clases distintas: Animal,

    Bird, Mammal y Ostrich. Animal es superclase del resto, que heredan de ella.En el caso de Ostrich, notad que hereda de dos clases a la vez (aunque no

    fuese estrictamente necesario). Python permite herencia mltiple. Ejecutad el

  • 5/21/2018 Python Inteligencia Artificial.pdf

    30/40

    CC-BY-NC-ND PID_00174138 30 El lenguaje Python

    cdigo, y entender su funcionamiento. Observad que el mtodofly()tiene un

    comportamiento diferente en funcin del tipo concreto del objeto.

    Muchos lenguajes no permiten herencia mltiple, dado que esto puede origi-

    nar conflictos cuando se heredan mtodos o atributos con el mismo nombre

    de dos superclases.

    .

    En caso de conflicto, Python da preferencia a la clase situada ms a la

    izquierda en el momento de su definicin.

    Volver a ejecutar el ejemplo, y observad el resultado de las llamadas aflyde las

    dos clasesPlatypus1y Platypus2. Este ejemplo sinttico ilustra el orden de pre-

    ferencias en funcin del orden de definicin de la herencia en caso de conflic-

    tos de nombre.

    6.3. Encapsulacin

    Encapsulacin en otroslenguajes

    En otros lenguajes s se

    utilizan palabras clave paradenominar la encapsulacin.Por ejemplo,en C++ o JAVA,que usanpublic, private,protected,...

    Una de las principales ventajas de la programacin orientada a objetos es la

    encapsulacin. Esta propiedad permite construir objetos con mtodos y atri-

    butos que no pueden llamarse externamente. Se trata de cdigo interno que

    el programador ha preparado y que no quiere que se vea alterado. El objeto

    ofrece una serie de servicios al exterior, ocultando parte de su codificacin

    interna. En Python no tenemos palabras clave especficas para denominar la

    encapsulacin. Todos los mtodos en Python son pblicos, excepto aquellos

    que empiezan por un doble guin bajo (__). En el ejemplo anterior, la llamada

    abear.privateMethod()produce una excepcin en tiempo de ejecucin.

    Ved tambin

    El concepto de getter y setterse ha tratado conprofundidad en la asignaturaProgramacin orientada aobjetos.

    La encapsulacin tiene mucha utilidad si se quieren esconder los detalles de

    implementacin de una determinada clase. Supongamos por ejemplo que in-

    ternamente el peso de una clase Animal se guardase en otras unidades (sistema

    ingls) en lugar de kilogramos. El uso de funciones setters y getters pblicas

    permitira que la interfaz con el usuario fuese siempre la misma, independien-

    temente de esta codificacin interna, que sera privada. Se ha ejemplificado

    este hecho en el mtodo getWeight()de la claseMammal.

    Como curiosidad, observad que la funcin __init__empieza tambin por dos

    guiones bajos. Los mtodos Python que empiezan y terminan por guiones

    bajos son especiales, y no tienen que ver con el concepto de mtodo privado.

    Otra funcin especial es el destructor o __del__que se llama cuando el objeto

    deja de utilizarse para su eliminacin.

  • 5/21/2018 Python Inteligencia Artificial.pdf

    31/40

    CC-BY-NC-ND PID_00174138 31 El lenguaje Python

    6.4. Polimorfismo

    En el caso de Python, como en la mayora de lenguajes de programacin, se

    basa en el uso de herencia.

    * Del griego varias formas..

    La palabra polimorfismo* en programacin denomina a la propiedad

    que tienen muchos lenguajes de ejecutar cdigo distinto en funcin

    del objeto que hace la llamada.

    Enlace dinmico

    El enlace dinmico es ladecisin de qu cdigo se

    ejecuta en tiempo deejecucin en lugar de entiempo de compilacin.

    As, podramos referenciar objetos mediante el tipo superclase, pero que en

    el momento de ejecutar sus mtodos, se llamar realmente a los mtodos de

    la clase derivada. El concepto de polimorfismo se encuentra muy ligado al

    enlace dinmico. Python por defecto ya usa el enlace dinmico, con lo que

    no requiere ninguna notacin especial para usar polimorfismo.

  • 5/21/2018 Python Inteligencia Artificial.pdf

    32/40

    CC-BY-NC-ND PID_00174138 32 El lenguaje Python

    7. Python como lenguaje funcional.

    La programacin funcional es un paradigma de programacin basado en el

    concepto matemtico de funcin, no en un sentido procedural como hemos

    visto hasta ahora, sino ms bien en el uso de funciones de orden superior.

    Este concepto hace referencia al uso de las funciones como si fueran valores

    propios del lenguaje.

    .

    Es decir, en la programacin funcional podemos guardar una funcin

    en una variable, para posteriormente aplicarla sobre unos argumentos,

    permitiendo incluso que una funcin retorne otra funcin como salida.

    Las caractersticas funcionales de Python no van a ser las ms utilizadas en este

    curso, pero en este apartado haremos un breve resumen con algn ejemplo

    orientativo, puesto que existen algunos iteradores bastante utilizados que se

    basan en el paradigma funcional.

    El cdigo7.1es un ejemplo en el que se muestra el uso bsico de la programa-

    cin funcional, el acceso a las funciones como variables.

    Cdigo 7.1: Ejemplo simple de aplicacin de Python funcional

    1 # E j em pl o d e u so d e l e n g u aj e f u n c io n a l

    23 def money(cou ntry ):4 def s pain ( ) :5 print "Euro"6 def japan ( ) :7 print "Yen"8 def eeuu ( ) :9 print " dol lar "

    10 fu ncto r_mon ey = { " e s " : s p ai n ,11 " jp " : japan ,12 " us " : eeuu }13 return functor_money[ country]1415 f = m oney( " us " )16 money( "us " ) ()17 f ( )1819 f = money( " jp " )20 f ( )

    Introducid el ejemplo y ejecutadlo. Como podris observar, la lnea de c-digo f = money(us) no realiza ninguna accin visible. Esta lnea se encarga

    de crear una nueva variable, que ser una funcin. Esta funcin se genera o

    selecciona en funcin de la entrada del usuario, en este caso, una cadena de

  • 5/21/2018 Python Inteligencia Artificial.pdf

    33/40

    CC-BY-NC-ND PID_00174138 33 El lenguaje Python

    caracteres que activa el selector en el diccionario interno a la funcin money.

    El resultado guardado enfes una funcin, y por tanto puede ser llamado para

    su ejecucin. Como podis observar, las llamadasmoney(us)()y f() son equi-

    valentes. A posteriori hemos cambiado el valor donde apunta la funcin

    f, modificando en consecuencia su codificacin (y por tanto, generando una

    salida distinta).

    El paradigma funcional tiene mltiples ventajas y aplicaciones. En este ma-

    nual nos centraremos en describir tres iteradores que se han usado mucho en

    conjuncin con las listas: map, filter y reduce. El estudiante familiarizado

    con los lenguajes LISP o ML ver cierto paralelismo con estos iteradores. El

    cdigo7.2muestra su ejemplo de uso.

    Cdigo 7.2: Ejemplo de aplicacin de iteradores

    1 # E je mp lo d e us o d e i t e r a d o r e s23 def double (num) :4 return num25 def even (num) :6 return (num%2) == 07 def op er ati on (num1,num2) :8 return num1num2+1;9

    10 l 1 = ra ng e ( 1 0 ) ;1112 l2 = map( double , l1 ) ;13 l 3 = f i l t e r ( even , l 1 ) ;14 l 4 = r ed u ce ( o p e ra t io n , l 1 ) ;15

    16 # E q u i v a l e n t e p e r o u sa nd o l ambda f u n c t i o n17 l 5 = map (lambda num: num2 , l 1 )18 l6 = f i l t e r (lambda num: num%2==0,l 1 )19 l 7 = r ed uce (lambda num1,num2: num1num2 +1 , l1 )2021 # Co mp re ns i n d e l i s t a s

    22 l 8 = [ num2 for num in l 1 ] ;2324 print l125 print l2 , l526 print l3 , l627 print l4 , l72829 print l8

    Observad que la sintaxis de map, filtery reduce es similar. Siempre reciben un

    primer argumento, que es el nombre de la funcin que van a ejecutar sobre los

    elementos de la lista (pasada como segundo argumento). En el caso de map, el

    iterador aplica la funcin a cada elemento de la lista, devolviendo una nueva

    lista con el resultado de aplicar esta funcin a cada elemento. Por su parte,

    filter, devuelve una lista con aquellos elementos de la lista original que pasan

    la evaluacin de la funcin. En este caso la funcin que recibe filterdevuelve

    un valor booleano (true, false) que hace las funciones de seleccin. Finalmente

    reduce aplica recursivamente la funcin a cada par de elementos de la lista,hasta dejar un solo resultado.

  • 5/21/2018 Python Inteligencia Artificial.pdf

    34/40

    CC-BY-NC-ND PID_00174138 34 El lenguaje Python

    7.1. Funciones lambda

    Las funciones lambda son funciones annimas definidas en lnea, que no se-

    rn referenciadas posteriormente. Se construyen mediante el operador lamb-

    da, sin usar el parntesis para indicar los argumentos. Estos van directamente

    despus del nombre de la funcin, que finaliza su declaracin con dos pun-

    tos (:). Justo despus, en la misma lnea se escribe el cdigo de la funcin. En

    el ejemplo anterior se ha incluido la versin de llamada a map,filteryreduce

    usando funciones lambda. Observad que estas funciones estn limitadas a una

    sola expresin.

    7.2. Comprensin de listas

    Pattern matching

    A diferencia de otroslenguajes puramentefuncionales, Python noimplementapatternmatching, aunque es posiblesimularlo. Estos conceptosquedan ya fuera del alcancede este manual.

    Una sintaxis alternativa a los iteradores anteriores que se est imponiendo enlas ltimas versiones de Python es la comprensin de listas. En este caso, se

    pretende crear una lista a partir de otra lista. La sintaxis es de nuevo muy sen-

    cilla, se especifica entre corchetes (o parntesis) la expresin a aplicar, seguida

    de la palabra clave for, la variable a iterar, la palabra clave in y la lista ori-

    gen. Como se puede observar en el ejemplo anterior, hemos reproducido la

    funcin que duplicaba cada elemento de la lista aplicando comprensin, y la

    expresin se leera: para cada num de l1 haz num*2.

  • 5/21/2018 Python Inteligencia Artificial.pdf

    35/40

    CC-BY-NC-ND PID_00174138 35 El lenguaje Python

    8. Libreras: NumPy PyLab y SciPy.

    El cdigo Python se puede agrupar en mdulos y paquetes para mejorar su

    organizacin y poder reutilizar y compartir todo lo programado. Cada fichero

    equivale a un mdulo. Para poder utilizar cdigo de estos ficheros se utiliza

    la palabra clave import, seguida del nombre del mdulo, del mismo modo

    que en C usbamos include. Hay que tener en cuenta que import carga li-

    teralmente todo el contenido del fichero, ejecutando tambin toda la parte

    ejecutable dentro del mdulo. Es habitual definir mdulos donde slo se de-

    finan las funciones y clases que se quieren publicar para evitar ejecucionesinvoluntarias. Tambin es posible importar slo un objeto concreto que nos

    interese, esto se hace mediante la construccin frommduloimportnombre

    del objeto. Las llamadas a objetos suelen ir precedidas con el nombre del m-

    dulo donde se encuentran, para preservar el espacio de nombres y mantener

    objetos con el mismo nombre en distintos mdulos.

    Python tiene asociada una variable de entorno (PYTHONPATH) en la que se

    le indica dnde encontrar (la carpeta concreta) la mayor parte de las libreras

    integradas en el lenguaje. En caso de crear nuevos mdulos en otra ubicacin

    distinta del cdigo actual, se puede aadir esta ruta a la variable de entorno

    PYTHONPATH.

    Los paquetes no son ms que entidades que organizan los mdulos. Los pa-

    quetes tienen su equivalencia con el sistema de carpetas o directorios, donde

    podemos guardar de forma estructurada diferentes ficheros (mdulos). La pa-

    labra clave import se utiliza tambin para importar mdulos de los paquetes, y

    se usa la misma nomenclatura en cuanto a espacio de nombres. As pues, para

    importar un mdulo llamadomoduloEjemplo, del paquetePaquetesEjemplo, se-

    guiramos la sintaxis:importPaquetesEjemplo.moduloEjemplo. Suponiendo queen este mdulo tuviramos de nuevo definida la funcin double, la llamara-

    mos de la siguiente manera: PaquetesEjemplo.moduloEjemplo.double(3), accin

    que nos devolvera un 6. Esta notacin se puede simplificar notablemente con

    la palabra clave as. Siguiendo el ejemplo, si importramos el cdigo como:im-

    port PaquetesEjemplo.moduloEjemplo as e, podramos llamar posteriormente a

    la funcin double comoe.double(3).

    En este curso trabajaremos con varios paquetes de Python, pero tres de ellos

    sern imprescindibles puesto que contienen las principales libreras de machi-

    ne learningya implementadas en Python. Se trata de NumPy, PyLab y SciPy.

  • 5/21/2018 Python Inteligencia Artificial.pdf

    36/40

    CC-BY-NC-ND PID_00174138 36 El lenguaje Python

    8.1. NumPy

    * http://numpy.scipy.org/

    La librera NumPy nos permite trabajar con datos cientficos, equiparando en

    cierta forma el potencial de Python al de otros lenguajes como Matlab o Octa-

    ve. NumPy se encuentra disponible de forma gratuita en Internet*. Desde all

    se puede bajar y consultar la documentacin de las diferentes propiedades que

    nos ofrece NumPy, que se centran bsicamente en el tratamiento de matrices

    y arrays N-dimensionales, y en un conjunto de funcionalidades de lgebra

    lineal y tratamiento de la seal aplicada al anlisis cientfico.

    8.2. PyLab

    * http://www.scipy.org/PyLab

    PyLab es una librera que intenta aportar funcionalidades extra a NumPy in-

    tegrando gran parte de las funciones Matlab que se han usado histricamenteen entornos de machine learning. En Internet* se puede encontrar el paquete

    listo para descargar, con la correspondiente documentacin.

    8.3. SciPy

    * http://www.scipy.org/

    SciPy es una expansin de NumPy, que integra nuevos paquetes para el tra-

    tamiento cientfico de datos. Integra gran cantidad de funciones de procesa-

    miento de imgenes, procesado de la seal, estadstica, integracin numrica.

    En Internet* se puede encontrar la ltima versin de la plataforma y su docu-

    mentacin asociada.

  • 5/21/2018 Python Inteligencia Artificial.pdf

    37/40

    CC-BY-NC-ND PID_00174138 37 El lenguaje Python

    Resumen

    En este mdulo hemos visto los elementos bsicos de la programacin en Pyt-

    hon. El mdulo est pensado para que un estudiante con conocimientos de

    programacin pueda rpidamente introducirse en Python, y pueda realizar sus

    primeros programas en poco tiempo. El objetivo primordial del mdulo y de

    la asignatura es el correcto seguimiento de los conceptos expuestos en teora.

    No se pretende formar expertos programadores en Python, sino ms bien ca-

    pacitar al estudiante para poder entender el abundante cdigo de ejemplo que

    incorporan los materiales.

    Es aconsejable que realicis los ejercicios para acabar de asentar los conoci-

    mientos bsicos. No es necesario realizarlos todos, simplemente intentar hacer

    aquellos que a primera vista parezcan ms complejos. Junto con el material,

    podris encontrar en el aula las soluciones a los ejercicios, para poder realizar

    las consultas y comparaciones oportunas.

  • 5/21/2018 Python Inteligencia Artificial.pdf

    38/40

    CC-BY-NC-ND PID_00174138 38 El lenguaje Python

    Ejercicios de autoevaluacin

    1. Escribid una funcin en Python que, dada una lista de nmeros, devuelva otra lista enorden inverso. Para realizar este ejercicio se deber utilizar un bucle o estructura repetitiva.No se permite el uso de funciones miembro de la clase list (en especial list.reverse()).

    2. Escribid una funcin que, dado un nmero entero N, devuelva una lista con todos losnmeros primos hasta N. Para solucionar el ejercicio debis crear una funcin auxiliar queindique si un determinado nmero es primo (retornando un valor booleano).

    3. Escribid una funcin que reciba una tupla compuesta por caracteres, y devuelva una listacon los caracteres en maysculas. Debis recorrer la tupla carcter a carcter para realizarla conversin. Para convertir un carcter a mayscula podis usar el mtodo upper(). Porejemplo a.upper() nos devuelve A.

    4. Convertid el texto ejemplo en una lista que contenga sus 7 caracteres. Despus conver-tidlo en una tupla y usando la funcin del ejercicio anterior obtened una lista con el textoen maysculas.

    5. Escribid una funcin que, dada una lista de nmeros, devuelva una lista con slo loselementos en posicin par.

    6. Extended la funcin anterior para que, dada una lista y unos ndices, nos devuelva la listaresultado de coger slo los elementos indicados por los ndices. Por ejemplo si tenemos lalista [1,2,3,4,5,6] y los ndices [0,1,3] debera devolver la lista [1,2,4].

    7. Escribid una funcin que nos devuelva cuntas veces aparece cada una de las palabrasde un texto (frecuencia de aparicin de las palabras). Para ello podis usar un diccionariodonde la llave sea cada una de las palabras del texto y el contenido guarde el nmero deapariciones de la palabra. Para simplificar el ejercicio, podis usar el mtodo split( ), que,dado un separador (el espacio), nos devuelve una lista con todas las palabras de un texto deforma separada. Por ejemplo: hola esto es un ejemplo.split( ) nos devolvera: [hola, esto,es, un, ejemplo]

    8. Escribid una funcin que devuelva un conjunto formado por los nmeros compuestos(no primos) menores que un N dado.

    9. Codificad una funcin que escriba en un fichero de texto los nmeros primos que vandesde el 1 hasta el 999.999.

    10.Escribid una funcin que lea el contenido de un fichero de texto y nos d la frecuen-cia de aparicin de cada palabra. Podis usar el cdigo del ejercicio 7, en el que se usabandiccionarios para contar las apariciones de cada palabra.

    11. Implementad un programa que tenga dos clases, Camin y Coche, ambas subclases dela superclase Vehculo. Elegid tres atributos comunes a Coche y Camin y dos atributosespecficos a cada clase. Pensad bien dnde colocar cada atributo. Escribid un mnimo dedos mtodos en cada clase y ejecutadlos en el programa principal.

    12.Escribid una versin del ejercicio 2 que utilice programacin funcional. Podis usar eliterador filter para mantener slo aquellos valores de la lista que sean primos.

    13.Escribid una funcin que dependiendo de un selector ejecute alguno de los primeros 5ejercicios de este apartado. La funcin recibir un carcter (1,2,...,5) y deber devolver unafuncin que testea el apartado correspondiente. Por ejemplo, si escribimos f=selector(4),f deber ser una funcin que al ejecutarse finalmente nos devuelva la palabra ejemplo enmaysculas.

  • 5/21/2018 Python Inteligencia Artificial.pdf

    39/40

    CC-BY-NC-ND PID_00174138 39 El lenguaje Python

    Bibliografa

    Gonzlez Duque, Ral.Python para todos. CC. (Version on-line)

    Lutz, Mark(2011).Programming Python(4.a ed.). OReilly Media.

    Lutz, Mark(2007).Learning Python (3.a ed.). OReilly Media.

    Martelli, Alex (2006).Python in a Nutshell(2.a ed.). OReilly Media.

    Pilgrim, Mark(2004).Dive Into Python. APress (Versin on-line).

  • 5/21/2018 Python Inteligencia Artificial.pdf

    40/40