Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Inteligencia Artficial, Guías, Proyectos, Investigaciones de Inteligencia Artificial

Inteligencia Artificial con Python

Tipo: Guías, Proyectos, Investigaciones

2017/2018

Subido el 18/11/2018

jlinares
jlinares 🇵🇪

2 documentos

1 / 40

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
El lenguaje
Python
David Masip Rodó
PID_00174138
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28

Vista previa parcial del texto

¡Descarga Inteligencia Artficial y más Guías, Proyectos, Investigaciones en PDF de Inteligencia Artificial solo en Docsity!

El lenguaje

Python

David Masip Rodó

PID_

Los textos e imágenes publicados en esta obra están sujetos –excepto que se indique lo contrario– a una licencia de Reconocimiento-NoComercial-SinObraDerivada (BY-NC-ND) v.3.0 España de Creative Commons. Podéis copiarlos, distribuirlos y transmitirlos públicamente siempre que citéis el autor y la fuente (FUOC. Fundació per a la Universitat Oberta de Catalunya), no hagáis un uso comercial y no hagáis una obra derivada. La licencia completa se puede consultar en http://creativecommons.org/licenses/by-nc-nd/3.0/es/legalcode.es

  • Introducción
  • Objetivos
    1. Instalación de Python
    1. Variables
    • 2.1. Operadores
    • 2.2. Cadenas de caracteres
    1. Control de flujo
    • 3.1. Sentencias condicionales: la instrucción if
      • 3.1.1. Sentencias if-elif-else
    • 3.2. Secuencias iterativas: bucles
      • 3.2.1. Bucles for in
      • 3.2.2. while
    1. Funciones
    • 4.1. Parámetros de entrada
    • 4.2. Valores de retorno
    1. Tipos de datos en Python
    • 5.1. Tuplas
    • 5.2. Listas
    • 5.3. Diccionarios
    • 5.4. Conjuntos
    • 5.5. Ficheros
      • 5.5.1. Ficheros de texto
    1. Python y la orientación a objetos
    • 6.1. Los objetos en Python
      • 6.1.1. Creación de instancias (objetos) de una clase
    • 6.2. Herencia
    • 6.3. Encapsulación
    • 6.4. Polimorfismo
    1. Python como lenguaje funcional
    • 7.1. Funciones lambda
    • 7.2. Comprensión de listas
    1. Librerías: NumPy PyLab y SciPy
    • 8.1. NumPy
    • 8.2. PyLab
    • 8.3. SciPy
  • Resumen
  • Ejercicios de autoevaluación
  • Bibliografía

Introducción

En este módulo aprenderemos las bases del lenguaje de programación Python.

Este módulo no pretende ser una guía exhaustiva de todas las características

que este lenguaje de programación 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 módulos de teoría, y pro-

porcionar una base que permita al estudiante elaborar las distintas actividades

que el curso requiere.

A nivel de pre-requisitos, no asumiremos ningún conocimiento previo de

Python. Sin embargo, es muy importante tener conocimientos de algún len-

guaje de programación previo (C, C++, JAVA, ...), puesto que los conceptos

elementales (variable, bucle, función,...) no se tratarán en profundidad en es-

te módulo.

El lenguaje Python fue diseñado a finales de la década de los ochenta por Gui-

do van Rossum. Se trata de un lenguaje de programación de muy alto nivel,

con una sintaxis muy clara y una apuesta firme por la legibilidad del código.

Sin duda es un lenguaje de programación muy versátil, fuertemente tipado,

imperativo y orientado a objetos, aunque contiene también características que

lo convierten en un lenguaje de paradigma funcional.

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

el código Python no se ejecuta directamente en la máquina destino, sino que

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

JAVA, Python compila el código escrito en lenguaje de alto nivel para obtener

un pseudo código máquina ( bytecode ) que es el que propiamente ejecuta el

intérprete. Existen versiones del intérprete de Python para la mayor parte de

las plataformas.

En este módulo, explicaremos los pasos necesarios para instalar Python en

una determinada plataforma. A continuación veremos las principales caracte-

rísticas del lenguaje a nivel sintáctico.

1. Instalación de Python

.

Existen actualmente múltiples implementaciones del lenguaje Python, en fun-

ción del lenguaje base en el que se ha construido el intérprete. La más 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 versión de Python, aconsejamos recurrir a su si-

tio web oficial*. En el momento de escribir estos manuales, esta URL contiene

toda la información necesaria para instalar el entorno. En la sección de des-

cargas** se pueden obtener los últimos paquetes de instalación para Windows,

Linux y MacOS X en sus distintas versiones.

Una vez obtenido el paquete para el sistema operativo y versión adecuados,

ejecutaremos el instalador, y en una línea de comandos ejecutaremos el intér-

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

clásico “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 intérprete de Python desde el símbolo de

sistema. Al iniciarse, después de imprimir la información de versiones, Python

nos muestra el símbolo “>>>” para indicarnos que el intérprete está espe-

rando comandos. En este pequeño ejemplo le pedimos que nos imprima la

cadena de caracteres “Hello World”, y después de ver el resultado, salimos de

Python mediante la instrucción quit(), volviendo al símbolo de sistema. Lle-

gados a este punto, podemos considerar que tenemos la instalación básica de

Python lista para su uso.

En este módulo trabajaremos fundamentalmente con un editor de textos, y

ejecutaremos los scripts, que programaremos mediante el intérprete. En el

ejemplo anterior, podríamos haber guardado la línea print “Hello World”

en un archivo llamado Hola.py, y ejecutarlo mediante el intérprete con la ins-

trucción:

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 específicos para Python. No es el objetivo de este módulo analizar los IDE disponibles en el mercado actualmente, aunque citaremos los tres entornos libres más conocidos. Por un lado PyDEV* es un co- nocido plug in de Python para el entorno de desarrollo Eclipse, bastante utilizado en el sistema universitario. También existe la opción de usar un entorno propio, como SPE (Stani’s Python Editor)** , o Wing***. En este módulo trabajaremos directamente con- tra el intérprete de comandos, cualquier editor de textos simple será suficiente para las funcionalidades que desarrollaremos.

Taula 1. Operadores con los tipos básicos Nombre Suma Resta o negación^ Multiplicación^ División Módulo División entera Exponenciación Operador + - * / % // ** Ejemplo a = 1 + 2 a = 2 – 5 o 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

Taula 2. Operadores a nivel de bit Nombre And Or Xor Not Desplazamiento a laderecha Desplazamiento a laizquierda

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 operación. Así, por ejemplo, si sumamos

dos números enteros, nos devolverá otro valor entero. Si uno de los dos ope-

randos es un valor en punto flotante, el resultado de la operación será también

un valor en punto flotante.

El tipo básico 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 3 se resumen los

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

parte de lenguajes de programación.

Taula 3. 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 línea, disponemos del carácter de escape ’\ n’.

También podemos usar otros caracteres de escape tradicionales como ’\t’ (ta-

bulación) o ’\b’ (borrar carácter). Para conseguir que el texto se imprima tal

y como aparece en el código fuente sin tener que recurrir a los códigos de es-

cape, podemos delimitarlo por triples comillas (podéis ver un ejemplo en el

código 2.2).

Código 2.2: Ejemplos de uso cadenas de caracteres

1 # E j e m p l o s de cadenas 2 3 a = " hola\n" 4 b = " \ t E s t e es un ejempp\blo de cadenas de c a r a c t e r e s \n" 5 c = " " " Es p o s i b l e e s c r i b i r s a l t o s de l i n e a 6 s i n necesidad de códigos de escape. " " " 7 8 print a , b , c 9 10 >>>hola

11 E s t e es un ejemplo de cadenas de c a r a c t e r e s 12 Es p o s i b l e e s c r i b i r s a l t o s de l i n e a 13 s i n necesidad de códigos de escape. 14 15 d = a + b ; # c o n c a t e n a c i ó n 16 e = " r e p i t e " 17 f = 3 ∗e ; # r e p e t i c i ó n 18 g = e ∗3; # e q u i v a l e n t e a l c a s o a n t e r i o r 19 20 print d , f , g

Algunos operadores usados con valores numéricos 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 detrás 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 numérico.

Ejemplo

Si tecleamos str(8.987) en la línea de comandos, obtendremos la salida ’8.987’.

Por último, una función muy útil en Python es str , que permite realizar la

conversión de valores numéricos a cadena de caracteres.

La identación es un rasgo muy característico del código Python, y permite

entre otras cosas una lectura mucho más agradable de los programas, y una

fácil identificación de las distintas partes.

3.1.1. Sentencias if-elif-else

Cuando el objetivo de la sentencia condicional es dividir la ejecución del có-

digo en función de si se cumple la condición o no, y queremos que se haga

alguna acción de forma explícita cuando la condición no se cumple, usamos

la palabra clave else (siempre seguida de : ).

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

cionales, elif , que se utiliza para añadir más condiciones a la sentencia if. Esto

nos puede ser muy útil si tenemos muchos casos que diferenciar y queremos

tratarlos todos. Se pueden añadir tantos bloques elif como queramos. En el

código 3.2 podemos ver un ejemplo de uso del entorno if-elif-else.

Código 3.2: Ejemplo de sintaxis de un bloque else

1 # E j e m p l o s de uso de i f 2 3 c = –10; 4 i f c > 0 : 5 print " E l número es p o s i t i v o \n" 6 print "Que tenga un buen día \n" 7 e l i f c == 0 : 8 print " E l número es exactamente 0 " 9 else : 10 print " E l número es negativo " 11 print "Que tenga s u e r t e " 12 # c o n t i n u a c i ó n d e l programa

Si el valor de c fuera 0, se ejecutaría la línea print “El número es exactamente

0”. Cuando no se cumple la condición del if, ni de ninguno de los elif que pu-

diera haber, se acaba ejecutando el bloque de instrucciones correspondientes

al else.

Finalmente, existe una forma compacta de representar sentencias condicio-

nales (de forma similar a como usamos Cond? acción si A es cierto: acción si

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

Accion2. En este caso, se comprueba la condición Cond y se ejecuta Accion1 si

es true o Accion2 si es false.

3.2. Secuencias iterativas: bucles

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

bloque de código un determinado o indeterminado número de veces.

Esencialmente existen dos tipos de bucles: for y while.

3.2.1. Bucles for ... in

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

número de veces (ya conocido previamente).

La sintaxis que se utiliza es: for elemento in secuencia: y a continuación

el bloque de acciones con la identación correcta.

En el ejemplo del código 3.3 podemos ver un uso típico del bucle for para

recorrer un vector de datos.

Código 3.3: Ejemplo de sintaxis de un bucle for...in

1 # E j e m p l o s de uso d e l b u c l e f o r 2 3 vect or = [ " hola " , " buenos " , " d í a s " ] ; 4 for palabra in vect or : 5 print palabra 6 # i m p r i m i r í a t o d a s l a s p a l a b r a 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-

gramación. En Python, a cada paso del bucle se instancia el elemento

iterador con un valor de la secuencia de forma automática.

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

los elementos de la lista vector (más adelante veremos más detalles sobre el

funcionamiento de las listas): en la primera iteración palabra tomará el valor

“hola”, en la segunda valdrá automáticamente “buenos”, y así sucesívamente.

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 más similar a los lenguajes de

programación tradicionales. Este bucle nos permite ejecutar un determinado

bloque de código mientras una determinada condición sea cierta.

Su sintaxis es: while Condición:

En el ejemplo del código 3.4 se muestra un uso típico del bucle while.

4. Funciones

.

Todos los lenguajes de programación ofrecen mecanismos que permiten en-

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

sultados determinados. Estos fragmentos de código se denominan funciones.

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

sintaxis es:

def nombre_funcion(parametro1, parametro2, ..., parametroN):

Delimitación de código fuente

Hay que recordar que Python no usa llaves ni palabras clave para delimitar código fuente.

A continuación se escribe un salto de línea y las operaciones asociadas a la fun-

ción, como siempre con una identación a la derecha (tabulación) que indica

que este código se corresponde a la función.

Una vez se ha definido la función, se puede llamar con distintos parámetros

dentro del código.

La llamada o ejecución de una función sigue la sintaxis: nom-

bre_función(parametro1, parametro2,..., parametroN).

4.1. Parámetros de entrada

Las llamadas a funciones reciben como argumentos una lista de parámetros

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

rámetros establecidos en el momento de la definición de la función. En el

ejemplo del código 4.1 se puede observar la llamada a una función que im-

prime el resultado de elevar un número base ( parametro1 ) a un exponente

( parametro2 ).

Código 4.1: Ejemplo de sintaxis de una función

1 # E j e m p l o s de d e f i n i c i o n e s y llamadas de f u n c i o n e s 2 # Función p o t e n c i a de dos v a l o r e s ( usa como base e l p r i m e r parámetro 3 # y como e x p o n e n t e e l segundo parámetro ) 4 5 def exponenciar ( parametro1 , parametro2 ) :

6 " " Ejemplo de función que e l e v a un número o base a un exponente 7 print parametro1∗∗ parametro 8 9 def exponenciar2 ( parametro1 , parametro2 = 2 ) : 10 print parametro1∗∗ parametro 11 12 exponenciar ( 2 , 3 ) ; 13 exponenciar ( parametro2 =3 , parametro1 = 2 ) ; 14 exponenciar ( 3 , 2 ) ; 15 exponenciar ( parametro2 =2 , parametro1 = 3 ) ; 16 17 exponenciar2 ( 5 ) ; 18 exponenciar2 ( 5 , 3 ) ; 19 20 #llamadas e r r ó n e a s 21 exponenciar ( 2 , 3 , 4 ) ;

En primer lugar notad que la tabulación vuelve a jugar un papel clave. Pa-

ra diferenciar el final de la definición de la función y el resto de código del

programa principal, basta con mirar el código fuente por encima. La propia

identación delimita claramente los bloques.

También 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 definición de la función se encuentran las llamadas. Es interesan-

te observar las distintas formas de cómo se pueden parametrizar las funciones

en Python. El uso normal suele ser llamar a la función con los parámetros en

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

bién llamar a la función con el nombre del parámetro y su valor asociado. De

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

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

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

mar a las funciones usando exactamente el mismo número de argumentos, en

caso contrario se generará un error de ejecución.

Existe también la posibilidad de inicializar parámetros con valores por defecto

en caso de que no se proporcione su valor en el momento de la llamada. La

función exponenciar2 muestra un ejemplo donde en caso de no proporcionar

un argumento utilizaría un 2 por defecto (elevaría al cuadrado).

Python permite también funciones con un número variable de parámetros.

En el ejemplo del código 4.2 se puede ver la sintaxis utilizada en una función

que imprime la suma de todos sus argumentos.

Código 4.2: Ejemplo de sintaxis de una función con parámetros variables

1 # E j e m p l o s de d e f i n i c i o n e s y llamadas de f u n c i o n e s 2 # f u n c i ó n suma 3 4 def sumarLista ( ∗ parametros ) : 5 r e s u l t a d o = 0 ; 6 for v a l in parametros :

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

ningún caso se devuelve un valor de retorno.

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

de programación habituales, puesto que Python permite devolver más

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

la lista de argumentos que hay que devolver.

Existe también la posibilidad de obviar los valores de retorno y utilizar el paso

de parámetros por referencia, obteniendo un resultado similar. El código 4.

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

la función sumaPotencia devuelve el resultado de efectuar las dos operaciones

en forma de lista. En realidad la función sólo devuelve un valor (la lista), pero

el efecto producido es el mismo que si pudiera devolver múltiples valores.

Código 4.4: Ejemplo de retorno de valores en Python

1 # E j e m p l o s de d e f i n i c i o n e s y llamadas de f u n c i o n e s 2 # f u n c i ó n para p r a c t i c a r e l r e t o r n o de v a l o r e s 3 4 def suma ( parametro1 , parametro2 ) : 5 return parametro1 + parametro2 ; 6 7 def potencia ( parametro1 , parametro2 ) : 8 return parametro1 ∗∗ parametro2 ; 9 10 def sumaPotencia ( parametro1 , parametro2 ) : 11 return parametro1 + parametro2 , parametro1 ∗∗ parametro2 ; 12 13 r e s u l t a d o 1 = suma ( 2 , 3 ) ; 14 print r e s u l t a d o 1 ; 15 r e s u l t a d o 2 = potencia ( 2 , 3 ) ; 16 print r e s u l t a d o 2 ; 17 r e s u l t a d o 3 = sumaPotencia ( 2 , 3 ) ; 18 print r e s u l t a d o 3 ;

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 más complejos que permiten trabajar

con agrupaciones de estos tipos de datos básicos. 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 (básico 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 paréntesis,

aunque no es imprescindible (sólo se exige el uso del paréntesis cuando puede

existir confusión con otros operadores). A menudo se coloca una coma al final

de la tupla para indicar la posición del último elemento. En el código 5.1 se

pueden ver distintos ejemplos de uso de tuplas.

Código 5.1: Ejemplo de tuplas en Python

1 # E j e m p l o s de uso de t u p l a s 2 3 t u p l a _ v a c i a = ( ) ; 4 tupla1 = 1 , 2 , 3 , 4 , 6 , 5 tupla1b = ( 1 , 2 , 3 , 4 , 6 ) ; 6 tupla2 = ’ hola ’ ,2 , 7 tupla3 = tupla2 , 8 tupla4 = tuple ( ’ ejemplo ’ ) ; 9 10 # R e s u l t a d o de l a e j e c u c i ó n 11 >> print tupla 12 ( 1 , 2 , 3 , 4 , 6) 13 >>> print tupla1b 14 ( 1 , 2 , 3 , 4 , 6) 15 >>> print tupla 16 ( ’ hola ’ , 2 , 3) 17 >>> print tupla 18 ( ’ hola ’ , 2 , 3) 19 >>> print tupla 20 ( ( ’ hola ’ , 2 , 3 ) , 90) 21 >>> print tupla 22 ( ’ e ’ , ’ j ’ , ’ e ’ , ’m’ , ’ p ’ , ’ l ’ , ’ o ’ )