Está en la página 1de 151

Wednesday, March 7, 2012

Objetivo

Aprender a programar en Python!

Pero 25 horas tan slo nos permitirn echar un


vistazo muy superficial a todo el lenguaje...
en el mejor de los casos.

Establecer unas bases slidas para el aprendizaje por


nuestra cuenta.

La participacin es fundamental.

No es lo mismo que aprender a programar a secas.


No aspiramos a escribir C en Python.

Wednesday, March 7, 2012

Y estos dos?

Instituto de Astrofsica de Andaluca (Granada)


Csar Husillos (ALHAMBRA, minera de datos)
Vctor Terrn (PANIC, reduccin de datos)
Algunos aos ya programando en Pyhton
sta es la segunda edicin de este curso

Quiz
En realidad,
imaginisseque
parecen
nuestras
mucho
fiestas
ms
son
a esto
algo as
Wednesday, March 7, 2012

Evaluaciones

Agradeceremos enormemente cualquier sugerencia que nos


hagis sobre el temario, estilo y desarrollo del curso.

Por cualquier medio; ya sea en persona, por correo


electrnico o mediante amenazas por telfono de
madrugada.

Si esperis al viernes para decir algo podris mejorar la


experiencia de los que vengan detrs, pero no la vuestra.
Hablad ahora o callad hasta la siguiente convocatoria.

Wednesday, March 7, 2012

Evaluaciones
Y ahora, explicado en el lenguaje del siglo XXI

NosotrosNosotros
Vosotros

A Granada
Wednesday, March 7, 2012

Python
como calculadora

Wednesday, March 7, 2012

Aritmtica bsica

>>> 2 + 2
4
Wednesday, March 7, 2012

Aritmtica bsica

>>> 2.1 + 4.9


7.0
Wednesday, March 7, 2012

Aritmtica bsica

>>> 8 - 5
3
Wednesday, March 7, 2012

Aritmtica bsica

>>> 3 * 4
12
Wednesday, March 7, 2012

Aritmtica bsica

>>> 9 / 3
3
Wednesday, March 7, 2012

Aritmtica bsica

>>> 3 / 4
0
Por qu?
Wednesday, March 7, 2012

Estamos operando con

int / int = int


3 / 4 = 0.75
int(0.75) = 0
Wednesday, March 7, 2012

Necesitamos nmeros

float / float = float


float / int = float
int / float = float
Wednesday, March 7, 2012

Pero esto no

>> float(3/4)
float(int)
float(0) = 0.0
Wednesday, March 7, 2012

int() trunca...

>> int(0.49) = 0
>> int(1.50) = 1
>> int(2.9) = 2
Wednesday, March 7, 2012

... y round() redondea

>> round(0.49) = 0
>> round(1.50) = 2
>> round(2.9) = 3
Wednesday, March 7, 2012

from _ _future_ _ import division

>> 1 / 4
0.25
>> 4 / 7
0.5714285714285714
Wednesday, March 7, 2012

Python 2.7

Publicada en julio de 2010

La mayor parte del cdigo existente sigue siendo 2.x. De


ah que lo usemos en este curso. Y una vez podamos
defendernos en Python 2.x, el salto a Py3K es trivial (y
automatizable: herramienta 2to3)

Python 2.7 est en modo de mantenimiento: slo se


arreglan bugs.

Wednesday, March 7, 2012

ltima versin de la serie 2.x


El futuro: Python 3000; nueva versin del lenguaje
incompatible con 2.x. Mejorada, reorganizada, unificada.
ltima versin: Python 3.2 (febrero 2011)

from _ _future_ _ import division

La divisin funciona como esperaramos desde


Python 3.0. Pero en realidad estaba
implementado desde la versin 2.2 (diciembre
de 2001), slo que su uso era opcional.

Permite una transicin suave, a aos vista.

Wednesday, March 7, 2012

La mquina del tiempo de


los creadores de Python.

Aritmtica bsica

>>> 7 % 2
1
Wednesday, March 7, 2012

Aritmtica bsica

>>> 10 ** 2
1024
Wednesday, March 7, 2012

Aritmtica bsica

>>> (1 + 3) * 4 + 2
18
Wednesday, March 7, 2012

Long integers

>> 1024 ** 2 ** 2
1099511627776L
Y esa L?

Wednesday, March 7, 2012

Long integers
Enteros normales utilizan al menos 32 bits
(mximo entero positivo representable
2,147,483,647; en el caso de 64 bits:
9,223,372,036,854,775,807)

Por encima de ese umbral Python usa

automticamente los long ints, limitados


nicamente por la memoria disponible. En
otras palabras: precisin ilimitada.

Wednesday, March 7, 2012

Variables

>>> x = 8.5
>>> x
8.5
Wednesday, March 7, 2012

Variables

>>> x = 1
>>> y = 2
>>> x + y
3
Wednesday, March 7, 2012

Variables

int x;
double y;

Wednesday, March 7, 2012

Variables

int x;
x = 5.6;

Wednesday, March 7, 2012

Variables

>>> xx == 6.6
5
>>>
>>>
>>> xx ++ 22
8.6
7
Wednesday, March 7, 2012

Asignacin mltiple

>>> x, y = 5, 3
>>> x + y
8
Wednesday, March 7, 2012

Asignacin mltiple

>>> x = y = 3
>>> x
3
Wednesday, March 7, 2012

Variables no declaradas

>>> x = 1
>>> x + y
NameError: name 'y' is not
defined
Wednesday, March 7, 2012

Operadores de
comparacin

>>> 2 == 3
False
Wednesday, March 7, 2012

Operadores de
comparacin

>>> 2 != 3
True
Wednesday, March 7, 2012

Operadores de
comparacin

>>> 5 < 3
False
Wednesday, March 7, 2012

Operadores de
comparacin

>>> 5 > 5
False
Wednesday, March 7, 2012

Operadores de
comparacin

>>> 5 >= 5
True
Wednesday, March 7, 2012

Operadores lgicos

>>> not 2 > 3


True
Wednesday, March 7, 2012

Operadores lgicos

>>> x = 1.56
>>> x >= 0 and x <= 1
False
Wednesday, March 7, 2012

Operadores lgicos

>>> x = 1.56
>>> x >= 0 or x <= 1
True
Wednesday, March 7, 2012

Operadores lgicos

>>> x = 1.56
>>> 0 <= x <= 1
False
Wednesday, March 7, 2012

Tipos de datos bsicos

Wednesday, March 7, 2012

int entero
float real
bool lgico
string texto

Tipos de datos bsicos

>>> x = 4.5
>>> type(x)
<type 'float'>
Wednesday, March 7, 2012

Strings

Cadenas de texto:
Hola mundo!

Comillas simples o dobles:


Hola mundo!

Inmutables

Wednesday, March 7, 2012

Strings

>>> nombre = Sara


>>> nombre
Sara
Wednesday, March 7, 2012

Strings
>>> frase = Sara dijo hola!
>>> frase
Sara dijo hola!

Wednesday, March 7, 2012

Strings

Secuencia de escape:
Sara dijo \hola!\

Wednesday, March 7, 2012

Strings

Triple entrecomillado:
Sara dijo hola!

Wednesday, March 7, 2012

Slices
a[index]
Devuelve el index-1 elemento
a = Abstulit qui dedit
a[0] = A
a[6] = i
a[-1] = t
Wednesday, March 7, 2012

El primer elemento
tiene ndice = 0
Wednesday, March 7, 2012

Edsger W. Dijkstra
Why numbering should start at zero (1982)
Wednesday, March 7, 2012

Para representar la secuencia 1, 2, ..., 10


tenemos cuatro posibilidades:

a) 1 i < 11
b) 0 < i 10
c) 1 i 10
d) 0 < i < 11
b) nos obliga a utilizar un nmero no natural (cero) para
Tanto
a) como
tienen ladeventaja
de que
la diferencia
determinar
unb)
intervalo
nmeros
naturales.
Poco
entre los lmites del intervalo
elegante.(11-1 y 10-0) es igual al
nmero de elementos de ste
Wednesday, March 7, 2012

Para representar una secuencia de N elementos, utilizando la


nomenclatura a), tenemos dos opciones:

a) 1 i < N+1
b) 0 i < N
La opcin b) es ms simple e intuitiva: el lmite superior nos indica
directamente el nmero de elementos en el intervalo

Wednesday, March 7, 2012

Slices
a[start:end]

Elementos desde start hasta end-1


a = Alea jacta est
a[0:10] = Alea jacta
a[5:10] = jacta
a[5:6] = j
a[5:5] =
Wednesday, March 7, 2012

Slices
a[start:]
Elementos desde start hasta el final
a = Fabricando fit faber
a[12:] = fit faber
a[-5:] = faber
Wednesday, March 7, 2012

Slices
a[:end]
Elementos desde el comienzo hasta end-1

a = In vino veritas
a[:2] = In
a[:8] = In vino
a[:-5] = In vino ve
Wednesday, March 7, 2012

Slices
a[start:end:step]
De start a end de step en step elementos

a = Is fecit, cui prodest


a[::2] = I ei,cipoet
a[:12:3] = Ifi
a[::-1] = tsedorp iuc ,ticef sI
Wednesday, March 7, 2012

Inmutables
>>> nombre = Sara
>>> nombre[0] = M
TypeError: 'str' object
does not support item
assignment
Wednesday, March 7, 2012

Inmutables
>>> nombre = Sara
>>> nombre = Mara
>>> nombre
Mara
Wednesday, March 7, 2012

Concatenacin
>> nombre = Sara
>> nombre = M + nombre[1:]
>> nombre
Mara
Wednesday, March 7, 2012

Subcadenas
>>> ere in sapere aude
True

Wednesday, March 7, 2012

Subcadenas
>>> sapere aude.find(ere)
3
La subcadena existe y empieza en el elemento
3 (es decir, el cuarto)
Wednesday, March 7, 2012

Subcadenas
>>> flux in et veritas
False

Wednesday, March 7, 2012

Subcadenas
>>> et veritas.find(flux)
-1
La subcadena no existe

Wednesday, March 7, 2012

Tamao
>>> len(victoria aut mors)
17

Wednesday, March 7, 2012

Tamao
>>> comic = V de Vendetta
>>> len(comic)
13

Wednesday, March 7, 2012

Maysculas

>>> hoygan.upper()
HOYGAN

Wednesday, March 7, 2012

Minsculas
>>> vocales = AEIOU
>>> vocales.lower()
aeiou

Wednesday, March 7, 2012

Eliminando espacios
>>> planeta =

Saturno

>>> planeta.lstrip()
Saturno

Wednesday, March 7, 2012

Eliminando espacios
>>> lugar = En el Sol

>>> print lugar.rstrip(), hace calor


En el Sol hace calor

Wednesday, March 7, 2012

Eliminando espacios
>>> apellido = Lee

>>> print Bruce, apellido.strip(), Jr.


Bruce Lee Jr.

Wednesday, March 7, 2012

Ejercicios
Manipulacin de cadenas utilizando el
cadena = Cabeza grande, ojos hermosos
1.
2.
3.
4.
5.
6.
7.
8.
9.

El tamao de la cadena?
Los primeros cinco caracteres de la cadena
Los siete ltimos caracteres.
De los cinco primeros caracteres, los que ocupan posiciones pares.
De los ltimos trece caracteres, los de posiciones impares
En mayscula, los caracteres en posiciones mltiplo de tres
De dos en dos, del caracter en la posicin 4 al de la 17
Est el caracter x en la cadena?
Y o, en mayscula o minscula?

Wednesday, March 7, 2012

Mdulos
Instrucciones almacenadas en un
fichero y ejecutadas por el
intrprete de Python

Wednesday, March 7, 2012

Mdulos
x=4
y=5
x ** (y + 1)

Wednesday, March 7, 2012

Mdulos
python fichero.py
El nombre del mdulo es fichero
(sin la extensin .py)

Wednesday, March 7, 2012

Mdulos
chmod +x fichero.py
Hacemos el fichero ejecutable

Wednesday, March 7, 2012

Mdulos
#! /usr/bin/env python
Primera lnea del mdulo: especifica que debe
utilizarse Python para ejecutar el cdigo
contenido en el fichero

Wednesday, March 7, 2012

Mdulos

udit-d41:~ vterron$ python ejemplo.py


udit-d41:~ vterron$

Wednesday, March 7, 2012

Mdulos

udit-d41:~ vterron$ ./ejemplo.py


udit-d41:~ vterron$

Wednesday, March 7, 2012

print

>>> print Abre las puertas, HAL


Abre las puertas, HAL

Wednesday, March 7, 2012

print
>>> print Lo siento,
>>> print Dave
Lo siento,
Dave
Aade salto de lnea al final

Wednesday, March 7, 2012

print

>>> print Me temo que, no puedo


Me temo que no puedo
Inserta espacio entre las cadenas mostradas por pantalla

Wednesday, March 7, 2012

print
>>> x = 2
>>> y = 3
>>> print x, ^, y, =, 2**3
2^3=8

Wednesday, March 7, 2012

Formateo de cadenas

Pero print slo nos proporciona una funcionalidad bsica


de manipulacin de cadenas; para un control ms
avanzado necesitamos necesitamos formatear la cadena.

Idntico al antediluviano y universal printf, presente en


cualquier lenguaje de programacin digno de ese
hombre.

Nos da control absoluto de la representacin por


pantalla de la informacin. Entre otro, podemos
especificar tipo, precisin, signo, alineamiento, entre
otros.

Wednesday, March 7, 2012

Formateo de cadenas
>>> print Numero: %d % 42
Nmero: 42
>>> print Pi: %f % 3.1415927
Pi: 3.141593
>>> print Pi: %.3f % 3.1415927
Pi: 3.142
Wednesday, March 7, 2012

Formateo de cadenas
>>> print %d + %d = %d % (5, 3, 8)
5+3=8
>>> b = 10.4
>>> e = 2
>>> print %f ** %d = %.2d % (b, e, b ** e)
10.400000 ** 2 = 108.16

Wednesday, March 7, 2012

Comentarios

#
A partir del primer # y hasta el final de la

Wednesday, March 7, 2012

Comentarios
>>> x = 2
>>> x = x + 1 # incrementa x en uno
>>> x
3

Wednesday, March 7, 2012

Listas

Serie de elementos separados por comas,


encerrados entre corchetes.

Los elementos pueden ser de distinto tipo


Dinmicas: nmero variable de elementos
Mutables

Wednesday, March 7, 2012

Listas
>>> v = [1, 2, 3]
>>> v
[1, 2, 3]

Wednesday, March 7, 2012

Listas
>>> v = [1, 2.0, tres]
>>> print v[1]
2.0

Wednesday, March 7, 2012

Listas
>>> v = []
>>> v
[]

Wednesday, March 7, 2012

Asignacin
>>> v = [4, 7, 3, 8]
>>> v[-1] = 0
>>> v
[4, 7, 3, 0]
Wednesday, March 7, 2012

Tamao
>>> v = [1, 2.0, tres]
>>> len(v)
3

Wednesday, March 7, 2012

Insercin
>>> v = [1, 3, 4]
>>> v.append(5)
>>> v
[1, 2, 3, 5]

Wednesday, March 7, 2012

Insercin
>>> v = [1, 3, 4]
>>> v.insert(9, 2)
>>> v
[1, 3, 9, 4]
Aade el elemento 9 en la posicin de index = 2

Wednesday, March 7, 2012

Eliminacin
>>> v = [1, 3, 4]
>>> v.remove(3)
>>> v
[1, 4]
Borrado por valor

Wednesday, March 7, 2012

Eliminacin
>>> v = [9, 5, 8, 5, 9]
>>> del v[3]
>>> v
[9, 5, 8, 9]
Borrado por posicin

Wednesday, March 7, 2012

Bsqueda
>>> v = [7, 0, 7]
>>> 7 in v
True

Wednesday, March 7, 2012

Bsqueda
>>> v = [7, 0, 7]
>>> v.index(7)
0

Wednesday, March 7, 2012

Bsqueda
>>> v = [7, 0, 7]
>>> 3 in v
False

Wednesday, March 7, 2012

Bsqueda
>>> v = [7, 0, 7]
>>> 8 not in v
True

Wednesday, March 7, 2012

Bsqueda
>>> v = [7, 0, 7]
>>> v.index(3)
ValueError: list.index(x): x not in
list

Wednesday, March 7, 2012

Concatenacin

>>> [1, 2, 3] + [9, 8]


[1, 2, 3, 9, 8]

Wednesday, March 7, 2012

Concatenacin
>>> x = [1, 2, 3]
>>> x.append([9, 8])
>>> x
[1, 2, 3, [9, 8]]
El cuarto elemento es ahora una lista
Wednesday, March 7, 2012

Mximo

>>> max([7, 2, 5])


7
Wednesday, March 7, 2012

Mnimo

>>> x = [7, 2, 5]
>>> min(x)
2
Wednesday, March 7, 2012

Sumatorio

>>> sum([7, 2, 5])


14
Wednesday, March 7, 2012

Listas vacas

>>> x = []
>>> len(x)
0
Wednesday, March 7, 2012

Listas vacas

>>> x = []
>>> bool(x)
False
Las listas vacas evalan a False

Wednesday, March 7, 2012

Ejercicios
Manipulacin de listas utilizando el
lista = [primero, 2, 3.5, 4.0, ultimo]
1.
2.
3.
4.
5.
6.
7.
8.

El tamao de la lista?
El tamao de la lista multiplicado por su segundo elemento
El producto del segundo elemento de la lista por el tercero
Est 2 en la lista? Y 2.0?
Eliminar el primer elemento de la lista
Eliminar ahora los dos ltimos elementos simultaneamente
Est la lista vaca?
Aadir el elemento nuevo ultimo a la lista.

Wednesday, March 7, 2012

Entrada de datos
raw_input(mensaje)

Imprime mensaje por pantalla


Devuelve entrada en un string

Wednesday, March 7, 2012

Entrada de datos
>>> persona = raw_input(Nombre: )
Nombre: Mr. Marshall
>>> print Bienvenido,, persona
Bienvenido, Mr. Marshall

Wednesday, March 7, 2012

Entrada de datos
>>> x = raw_input(x: )
x: 57
>>> print 2*x
5757

Wednesday, March 7, 2012

Entrada de datos

raw_input() siempre devuelve una


cadena de texto

Necesitamos hacer una conversin al


tipo de dato que necesitamos

Wednesday, March 7, 2012

Entrada de datos
int * string concatena string int veces

>>> 3 * adios
adiosadiosadios
De vuelta al ejemplo anterior...

Wednesday, March 7, 2012

Entrada de datos
>>> x = int(raw_input(x: ))
x: 57
>>> print 2*x
114

Wednesday, March 7, 2012

Entrada de datos
input(mensaje)

Tambin imprime mensaje por pantalla


Pero la entrada es interpretada como una expresin
de cdigo Python

Wednesday, March 7, 2012

Entrada de datos
>>> numeros = input(Lista: )
Nombre: [7, 8, 9]
>>> del numeros[-1]
>>> numeros
[7, 8]

Wednesday, March 7, 2012

Entrada de datos
>>> x = [1, 2]
>>> x.append(input())
18
>>> x
[1, 2, 18]

Wednesday, March 7, 2012

Entrada de datos
>>> x = [7, 8]
>>> x.append(input(elemento: ))
elemento: y
NameError: name 'y' is not defined
La mayor parte del tiempo necesitamos raw_input

Wednesday, March 7, 2012

Estructuras de control
Necesitamos modificar el flujo de ejecucin del
programa en funcin de los datos

if
for
while
Wednesday, March 7, 2012

if
Evala una condicin y ejecuta un bloque de instrucciones si
es verdadera

>>> if 2 > 1:
...

print obviamente

...
obviamente
Wednesday, March 7, 2012

Bloque

Un bloque es un conjunto de instrucciones que se


ejecutan secuencialmente

En este caso en particular, son aquellas instrucciones


ejecutadas cuando la condicin es verdadera

Python utiliza el indentado para reconocer las lneas


que forman un bloque de instrucciones

Wednesday, March 7, 2012

if - else
Evala una condicin y ejecuta un bloque de instrucciones (bloque-if) si
es verdadera. Si no lo es, ejecuta el otro bloque (bloque-else)

>>> if 7 % 2 == 0:
...

print es par

... else:
...

print no par

...
no par
Wednesday, March 7, 2012

if - elif - else
Para elegir entre ms de dos opciones
Python ignora las dems condiciones en cuando
una se cumple

Funcionalidad similar al switch de C/C++

Wednesday, March 7, 2012

if - elif - else
>>> if 2 < 0:
...

print negativo!

... elif 2 == 0:
...

print nada!

... else:
...

print positivo!

...
positivo!
Wednesday, March 7, 2012

for
Itera sobre los elementos de una secuencia

>>> for i in [1, 2, 3]:


...
...
1
2
3
Wednesday, March 7, 2012

print i

for

El cuerpo del bloque (bloque-for) se ejecuta tantas


veces como elementos tenga la secuencia (por
ejemplo, caracteres en un string)

Usado para repetir un bloque de instrucciones para


los que una variable toma diferentes valores.

Cmo ejecutamos un bloque n veces?

Wednesday, March 7, 2012

range(n)
Genera una lista de n valores [0, 1, 2 ... n-1]

>> range(7)
[0, 1, 2, 3, 4, 5, 6]

Wednesday, March 7, 2012

range(start, n)
Genera la lista [start, start+1, ... n-1]

>> range(3, 7)
[3, 4, 5, 6]

Wednesday, March 7, 2012

range(start, n, step)
Genera la lista [start, start+step, ... n-1]

>>> range(1, 11, 2)


[1, 3, 5, 7, 9]

Wednesday, March 7, 2012

for
>>> for i in range(3):
...
...
hola
hola
hola
Wednesday, March 7, 2012

print hola

for (en C++)


for (int i = 0 ; i < 10 ; i++)
cout << i << endl;

Wednesday, March 7, 2012

for
for i in range(10):
print i

No utilizamos condiciones de inicio, parada e incremento, sino que


especificamos claramente qu elementos se utilizan
Ms expresivo y seguro

Wednesday, March 7, 2012

for
>>> for letra in Sara:
...
...
S
a
r
a
Wednesday, March 7, 2012

print letra

for
Y si dentro del bucle necesitamos conocer el ndice del elemento?

>>> numeros = [2, 4, 5]


index 0 -> 2
index 1 -> 4
index 2 -> 5
Wednesday, March 7, 2012

for
>>> numeros = [2, 4, 5]
>>> for i in range(len(numeros)):
...

Wednesday, March 7, 2012

print i, ->, numeros[i]

enumerate(sec)
Permite iterar simultneamente sobre el ndice y
sobre el elemento de una secuencia

>>> for i, num in enumerate([1, 2, 3]):


...

Wednesday, March 7, 2012

print i, ->, num

while
Ejecuta el bucle mientras la condicin sea cierta

>>> x = 1
>>> while x < 10:
...

x=x+1

... print x
...
10
Wednesday, March 7, 2012

while
>>> x = 5
>>> factorial = 1
>>> while x > 0:
...

factorial = factorial * x

...

x=x-1

... print factorial


...
120
Wednesday, March 7, 2012

while
>>> x = 0
>>> while True:
...
...
Wednesday, March 7, 2012

x=x+1

Y si necesitamos salir del bucle?

GOTO?

Wednesday, March 7, 2012

Edsger W. Dijkstra
Go To Statement Considered Harmful, (1968)
Wednesday, March 7, 2012

Wednesday, March 7, 2012

break
Abandona el bucle inmediatamente

>>> for i in [1, 2, 3]:


...

if i % 2 == 0:

...

break

... print i
...
2
Wednesday, March 7, 2012

break
>>> x = 15
>>> while True:
...

if x % 9 == 0:

...

print x

...

break

...
...
18
Wednesday, March 7, 2012

x=x+1

continue
Salta inmediatamente a la siguiente iteracin

>>> for i in [1, 2, 3]:


...

if i % 2 == 0:

...

continue

...
...
1
3
Wednesday, March 7, 2012

print i

continue
>>> while True:
...

x = int(raw_input())

...

if not x % 2 == 0:

...

continue

...

print es par!

Wednesday, March 7, 2012

Ejercicios
if, for, while y range()

http://www.iaa.es/python/ejercicios

Wednesday, March 7, 2012