Академический Документы
Профессиональный Документы
Культура Документы
3.x
Versin: 23-Sep-2015
Lo
bsico
2
Sobre
Python
Es
un
lenguaje
interpretado
aunque
se
precompila
a
un
lenguaje
de
mquina
virtual.
Es
un
lenguaje
con
Jpado
dinmico:
Los
datos
Jenen
Jpo.
Pero
una
variable
puede
albergar
cualquier
Jpo.
Eso
hace
que
Python
nunca
pueda
ser
tan
rpido
como,
pongamos,
C.
3
Sobre
Python
Es
un
lenguaje
muy
expresivo:
se
puede
decir
mucho
con
poco.
Es
un
lenguaje
muy
ortogonal:
lo
que
se
aprende
para
una
cosa
suele
ser
Jl
para
otra
porque
todo
se
ha
diseado
con
unos
principios
claros.
Sobre
Python
Cmo
ejecutar
Podemos
ejecutar
cdigo
directamente
con
un
intrprete
interacJvo.
O
desarrollar
programas
que
escribimos
en
cheros
de
texto
(Tpicamente
con
extensin
.py)
y
ejecutarlos
pasndole
el
nombre
del
chero
al
intrprete.
Y
podemos
desarrollar
mdulos
reuJlizables,
cuyas
funciones
y
clases
pueden
importarse
en
otros
mdulos
o
programas.
5
Tipos
bsicos
Booleano:
a
=
True
True
o
False
Entero: a = 1234
Complejos:
a
=
-2
+
3j
La
j
es
la
raz
de
-1
Variables
Los
iden,cadores,
como
en
Java:
letras,
dgitos
y
_,
pero
no
pueden
empezar
por
dgito
Una
variable
manJene
una
referencia
a
una
direccin
de
memoria
en
la
que
reside
el
valor
a
=
3
b
=
a
c
=
hola
b
c
hola
8
and
or
not
==
!=
<
>
<=
>=
=
+=
-=
/=
*=
&
|
!
<<
>>
Funciones
Las
funciones
matemJcas
deben
importarse
del
mdulo
math:
from
math
import
sin,
cos,
tan,
sqrt,
ceil
10
11
12
La
cadena
se
puede
converJr
en
un
valor
entero
o
otante
con
una
funcin
de
conversin
de
Jpos:
b = int(a)
c = float(input())
13
Ejercicio
1
Disea
un
programa
que
pida
dos
nmeros
por
teclado,
a
y
b,
y
muestre
por
pantalla
su
suma
como
en
el
siguiente
ejemplo:
Introduce
a:
2
Introduce
b:
5
La
suma
de
2
y
5
es
7
14
Estructuras
de
control
15
Estructuras
de
control
Se
marcan
terminando
la
sentencia
con
dos
puntos
El
bloque
del
cuerpo
debe
aparecer
con
mayor
sangrado
que
la
lnea
con
la
estructura
Ejemplo:
a = int(input("a: "))
if a == 0: print(a)
while a > 0:
a = a - 1
if a % 2 == 0:
print("Par")
16
Una
excepcin
Si
el
bloque
Jene
una
sola
lnea,
puede
unirse
a
la
primera
if
a
==
1:
print(b)
Las
lneas
sencillas
(las
que
no
acaban
en
:)
pueden
unirse
con
;
a
=
1;
b
=
2
17
Seleccin
if
Si
la
condicin
es
cierta,
ejecuta
el
bloque;
si
no,
se
lo
salta:
if
condicin:
bloque
18
Seleccin
if-else
Si
la
condicin
es
cierta,
ejecuta
el
primer
bloque;
si
no,
ejecuta
el
segundo:
if
condicin:
primer
bloque
else:
segundo
bloque
19
Seleccin
if-elif(-else)
Evala
las
condiciones
de
arriba
abajo
y
ejecuta
slo
el
bloque
de
la
primera
que
se
evala
a
True
Si
hay
else,
se
ejecuta
su
bloque
cuando
no
es
cierta
ninguna
condicin
if
condicin:
primer
bloque
elif
otra
condicin:
otro
bloque
elif
y
otra
condicin
ms:
y
otro
bloque
ms
else:
opcional
l;mo
bloque
20
Bucle
while
Repite
el
bloque
mientras
se
cumple
la
condicin
El
bloque
puede
repeJrse
cero
o
ms
veces
while
condicin:
bloque
21
Bucle
for
Ejecuta
el
bloque
una
vez
por
cada
valor
de
una
secuencia
La
variable
de
control
toma
en
cada
iteracin
un
valor
de
la
secuencia
(ordenadamente)
for
variable
in
secuencia:
bloque
22
23
24
25
Comentarios
Con
#
se
inicia
un
comentario
que
naliza
con
la
lnea
print(0)
#Un
comentario
26
Tipos
estructurados
27
Listas
Literales
[]
es
la
lista
vaca
[1,
3,
4]
es
una
lista
con
3
elementos
[1,
'a',
3.4]
es
otra
lista
con
3
elementos
Funciones
a
+
[5,
6]
a
*
10
a[0]
a[1:3]
a[:len(a)-1]
a[1:]
indexador
corte
a[-1]
a[:-1]
a[-3:]
29
ndices
y
cortes
a
=
[5,
10,
2,
3]
0
5
-4
10
-3
2
2
-2
3
-1
a
-4
-3
-2
-1
3
10
31
-1
32
-1
33
Listas
Mtodos.
Si
a
es
la
lista
[1,
2,
1,
3]
a.append(10)
a
es
[1,
2,
1,
3,
10]
a.count(1)
devuelve
2
a.extend([1,2])
a
es
[1,
2,
1,
3,
1,
2]
a.index(2)
devuelve
1
a.insert(0,
20)
a
es
[20,
1,
2,
1,
3]
a.reverse()
a
es
[3,
1,
2,
1]
a.pop()
a
es
[1,
2,
1]
y
devuelve
3
a.remove(1)
a
es
[2,
1,
3]
a.sort()
a
es
[1,
1,
2,
3]
34
Ejercicio
2
Disea
un
programa
que
lea
enteros
de
teclado
hasta
que
el
usuario
teclee
uno
negaJvo.
Los
enteros
posiJvos
se
irn
aadiendo
a
una
lista.
Muestra
el
contenido
de
la
lista
ordenado
de
menor
a
mayor
valor,
con
un
elemento
por
lnea
de
pantalla.
35
Cadenas
Casi
todo
lo
que
has
aprendido
para
listas
vale
para
cadenas
(salvo
lo
que
modique
el
contenido,
ya
que
las
cadenas
son
inmutables)
[Recuerda:
Python
es
un
lenguaje
muy
ortogonal]
Las
cadenas
Jene
algunos
mtodos
especiales:
,
.join(pepe,
mara,
juan)
pepe
mara
lpez.upper()
pepe
mara
lpez.split()
pepe.mara.lpez.split(.)
36
Tuplas
Una
tupla
es
una
lista
inmutable:
( )
es
la
tupla
vaca.
(2,)
es
una
tupla
con
un
elemento.
(2, 3, 4) es
una
tupla
con
3
elementos.
2, 3, 4 en
algunos
contextos,
tambin
es
una
tupla
con
3
elementos.
37
Diccionario
Asocia
a
cada
clave
un
valor.
La
clave
ha
de
ser
inmutable
(un
escalar,
una
cadena,
una
tupla).
El
valor
puede
ser
de
cualquier
Jpo.
a = {'una clave': 1,
'otra clave': [1, 2],
'y otra ms': 'si}
print(a['una clave'])
print(a['otra clave'][0])
a['nuevo'] = 1.1
a['y otra ms'] = 'no'
print(a['nuevo'], a['y otra ms'])
38
Ejercicio
3
Crea
un
diccionario
con
el
nombre
de
3
amigos
y
asocia
a
cada
uno
su
edad.
39
Conjuntos
Un
conjunto
es
como
una
lista,
pero
sin
orden
ni
elementos
repeJdos.
Sus
elementos
han
de
ser
inmutables.
a
=
set([1,
2,
3])
print(len(a))
#
3
print(2
in
a)
#
True
a.add(4)
print(len(a))
#
4
a.add(2)
print(len(a))
#
4
40
Conversin
de
Jpos
Hay
funciones
que
permiten
pasar
de
un
Jpo
a
otro
list(
(1,
2,
3)
)
tuple([1,
2,
3])
set([1,
2,
3])
list(set([1,
2,
3,
1,
2]))
tuple(list(set([1,
2,
3,
1,
2])))
41
Funciones
42
Funciones
La
palabra
clave
def
permite
denir
funciones
def
nombre(parmetros):
bloque
Invocacin
de
funciones
Se
usa
el
nombre
con
los
argumentos
separados
por
comas
y
encerrados
entre
parntesis:
print(suma(1, 2+2))
Ojo:
en
la
prcJca
podis
considerar
que
los
escalares
y
cadenas
se
pasan
por
valor
otras
estructuras
se
pasan
por
referencia
pero
ojo
con
la
asignacin!
44
Invocacin
de
funciones
def f(unentero, unalista):
unentero += 1
unalista[1] = unentero
print("dentro:", unentero, unalista)
milista = [1, 2, 3]
mientero = 10
f(mientero, milista)
print("fuera:", mientero, milista)
45
Invocacin
de
funciones
def f(unentero, unalista):
unentero += 1
unalista = [unalista[0], unentero, unalista[2]]
print("dentro:", unentero, unalista)
milista = [1, 2, 3]
mientero = 10
f(mientero, milista)
print("fuera:", mientero, milista)
46
return
Interrumpe
inmediatamente
la
ejecucin
de
una
llamada
a
funcin.
Para
que
una
funcin
devuelva
un
valor,
se
usa
return
seguida
de
una
expresin.
Las
funciones
sin
return
(o
con
return
sin
expresin)
devuelven
None.
47
return
Se
puede
devolver
ms
de
un
valor
gracias
a
las
tuplas:
def minymax(lista):
return min(lista), max(lista)
a, b = minymax([1, 10, 2, 20, 3, 0])
print(a, b)
48
Ejercicio
4
Qu
ocurre
al
ejecutar
este
programa?
def myfunction(a, b):
a += 1
b.append(0)
x = 1
y = [2, 1]
myfunction(x, y)
print(x, y)
49
Ejercicio
5
Qu
ocurre
al
ejecutar
este
programa?
def myfunction(a, b):
a = 2 * a
b[0] = 10
b.append(0)
b = list(range(3))
return b*a
x = 1
y = list(range(6))
print(x, y)
print(myfunction(x, y))
print(x, y)
50
Ejercicio
6
Disea
una
funcin
que,
dados
tres
nmeros,
a,
b
y
c,
devuelva
las
dos
races
de
la
ecuacin
de
segundo
grado:
a
x2
+
b
x
+
c
=
0
Usa
la
funcin
en
un
programa
que
pide
los
tres
nmeros
y
muestra
por
la
pantalla
la(s)
solucin(es)
de
la
ecuacin.
Ojo!
Si
slo
hay
una
solucin,
no
muestres
dos
valores.
51
Ms
sobre
funciones
52
Consejo
En
principio,
las
funciones
deberan
ser
mudas
y
ciegas:
Excepciones:
54
55
Nmero
variable
de
parmetros
con
nombre
def fn(**kw):
print('---')
if len(kw) > 0:
print('Hay {} parmetro/s:'.format(len(kw)))
for key in kw:
print(' {} -> {}'.format(key, kw[key]))
else:
print('No hay parmetros')
fn(a=10)
fn(x=10, y=20)
fn()
dic = {'p1' : 123, 'p2' : 'hola'}
fn(**dic)
56
Ejercicio
7
Qu
ocurre?
def f (a, b, *c, **d):
return a + b + len(c) + d['yo']
print(f(1, 2, 1, 2, 3, yo=1, tu=2))
print(f(1, 2, yo=1, tu=2))
print(f(1, 2, 1, 2, 3))
print(f(1))
57
59
Funciones
annimas
Podemos
denir
funciones
sencillas
sin
nombre
lambda
parmetros:
expresin
Ejemplo:
def summation(a, b, f):
s = 0
for i in range(a, b+1): s += f(i)
return s
def square(x):
return x*x
print(summation(1, 3, square))
print(summation(1, 3, lambda x: x*x))
60
61
Orientacin
a
objetos
62
Clase
La
palabra
reservada
class
permite
denir
una
clase.
En
su
cuerpo
aparecen
deniciones
de
funciones:
mtodos.
Los
mtodos
Jenen
un
primer
parmetro
llamado
self
(por
convenio)
que
es
una
referencia
a
una
instancia
de
la
clase.
Los
mtodos
se
acceden
y
los
campos
(o
atributos)
se
denen/acceden
con
el
operador
punto
(.)
sobre
self.
63
class Person:
__slots__ = ('name', 'age')
campos
constructor
def last_name(self):
return self.name.split()[-1]
mtodo
64
Ejercicio
8
Dene
una
clase
Estudiante
en
el
que
almacenamos
el
nombre
y
un
diccionario
cuyas
claves
son
asignaturas
a
las
que
asociamos
calicaciones.
Un
estudiante
recibe
nombre
al
ser
construido,
pero
nada
ms.
Si
e
es
un
estudiante,
con
e.calica(EI1022,
10)
le
asignamos
un
10
a
la
asignatura
EI1022.
Con
e.nota(EI1022)
obtenemos
la
nota
de
esa
asignatura.
Con
e.media()
obtenemos
su
nota
media
(o
None
si
no
ha
cursado
nada).
Con
e.muestra_expediente()
vemos
su
nombre
y
una
tabla
con
sus
asignaturas
y
notas.
65
Mtodos
especiales
Ciertos
mtodos
se
invocan
de
modo
especial:
def
__len__(self)
len(instancia)
value in instancia
instancia[key]
instancia[key] = value
def __iter__(self)
for i in instancia:
instancia
+
other
66
Ejemplo
Queremos
implementar
objetos
de
Jpo
mulJconjunto.
Un
mulJconjunto
es
una
coleccin
de
elementos
con
posibles
repeJciones.
Usaremos
un
diccionario
en
el
que
la
clave
es
un
elemento
y
el
valor
es
el
nmero
de
repeJciones
Creemos
una
clase
Mul;Set
con
mtodos
para
aadir
elementos,
eliminar
elementos,
preguntar
por
la
pertenencia
de
un
elemento,
iterar
67
class MultiSet:
def __init__(self, seq=[]):
self.content = {}
for item in seq:
self.add(item)
A = MultiSet([1, 3, 3])
A.add(1)
A.add(4)
print(len(A))
print(1 in A, 2 in A)
A.remove(4)
A.remove(3)
for a in A:
print(a)
print(A)
68
Herencia
Podemos
crear
clases
que
heredan
los
mtodos
de
otras
Sirve
para:
Crear
clases
que
especializan
a
una
clase.
Por
ejemplo,
un
estudiante
de
doctorado
y
un
estudiante
de
grado
son
dos
Jpos
diferentes
de
estudiante.
Tienen
algunos
campos
en
comn
(nombre,
direccin,
etc)
y
otros
diferentes
(en
el
primer
caso,
Ttulo
del
proyecto
de
tesis,
tutor
de
doctorado
en
el
segundo
caso,
especialidad
que
cursa)
Evitar
la
reescritura
de
cdigo
Expresar
relaciones
sobre
la
naturaleza
de
los
objetos
69
70
Propiedades
Adems
de
atributos
y
mtodos,
nuestras
clases
pueden
tener
propiedades
(proper;es).
Son
una
alternaJva
a
los
geGers
y
seGers.
Se
denen
en
la
clase
como
mtodos
decorados.
Se
uJlizan
desde
fuera
como
atributos.
class Props(object):
def __init__(self):
self._x = 0
@property
def x(self):
#getter
return self._x
@x.setter
def x(self, v): #setter
self._x = v
props = Props()
props.x = 5
print(props.x)
71
Inyeccin
de
dependencias
Es
un
patrn
uJlizado
habitualmente
por
la
biblioteca
algoritmia
.
Permite
que
una
clase
reciba
constructores
externos.
from algoritmia.datastructures.sets import IntSet
class Alg(object):
def __init__(self, createSet = lambda capacity : set()):
self.createSet = createSet
def f1(self, c):
aux = self.createSet(capacity=c)
aux.add(7)
print(aux)
x = Alg()
x.f1(10)
Excepciones
73
Excepciones
Cuando
se
produce
un
error
de
ejecucin,
se
lanza
inmediatamente
una
excepcin.
a = 1/0
print('End')
# ZeroDivisionError
# No se ejecuta
Excepciones
Hay
una
estructura
de
control
para
capturar
excepciones:
try-except
try:
a = 1/0
except ZeroDivisionError:
print("Divisin por 0")
75
Excepciones
Las
excepciones
pueden
ir
acompaadas
de
informacin
adicional
a
la
que
podemos
acceder
de
la
siguiente
forma:
try:
a = 1/0
except ZeroDivisionError as e:
print("Error: {0}".format(e))
76
Excepciones
Podemos
lanzar
una
excepcin
cuando
detectemos
un
error:
raise IndexError
77
Mdulos
78
Programas
y
libreras
Un
programa
suele
residir
en
un
chero
.py
Pero
no
es
natural
tener
todo
nuestro
cdigo
en
un
solo
chero:
su
tamao
puede
hacerlo
inmanejable
(puede
tener
varios
millares
de
lneas).
no
invita
a
reuJlizar
el
cdigo.
import
y
from-import
Cualquier
chero
.py
se
puede
uJlizar
como
un
mdulo
que
exporta
sus
deniciones.
Podemos
acceder
a
un
mdulo
con
la
sentencia
import.
Supongamos
que
unmodulo.py
conJene
la
denicin
de
una
funcin
llamada
f:
import
unmodulo
unmodulo.f()
Ejercicio
9
Haz
un
programa
que
importe
la
clase
UndirectedGraph
que
se
encuentra
en
la
biblioteca
de
algoritmia
en
el
mdulo
algoritmia.datastructures.digraphs
y
crea
un
grafo
para
representar
el
siguiente
mapa
de
carreteras:
Villorrio
Villaabajo
Villita
Villaarriba
Villaconejos
Villavilla
Recorre
los
vrJces
del
grafo
y
muestra,
para
cada
uno,
sus
ciudades
vecinas.
Ficheros
de
texto
83
84
85
Iterables
86
Iterables
Podemos
recorrer
el
contenido
de
una
lista,
conjunto,
claves
de
un
diccionario
porque
estos
objetos
son
iterables
a = [1, 2, 3]
for elem in a:
print(elem)
b = {'a': 1, 'b': 2, 'c': 3}
for key in b:
print(key, b[key])
87
Generadores
Un
generador
es
un
objeto
que
genera
una
secuencia
(nita
o
no)
de
elementos.
range(n),
por
ejemplo,
es
un
generador
(de
enteros
consecuJvos).
Los
generadores
son
iterables.
Podemos
usar
generadores,
por
ejemplo,
donde
se
espera
un
iterable
en
un
bucle
for.
Y
podemos
crear
listas
con
expresiones
generatrices.
88
Expresiones
generatrices
a = [ i*2 for i in range(5) ]
a = []
for i in range(5):
a.append(i*2)
89
90
Ejercicio
10
UJlizando
una
expresin
generatriz,
inicializa
un
diccionario
que
asocie
a
cada
nmero
entre
1
y
100
el
valor
True
si
el
nmero
es
divisible
por
3
y
False
en
caso
contrario.
91
yield
Los
generadores
son
objetos
que
producen
una
secuencia
de
valores.
Se
pueden
implementar
con
funciones
que
uJlicen
la
instruccin
yield.
Al
llegar
a
yield,
la
funcin
interrumpe
su
ejecucin,
pero
recuerda
dnde
lo
hizo
y
puede
seguir
cuando
se
solicita
el
siguiente
valor
en
la
secuencia.
92
Ejercicio
11
Disea
una
funcin
que
reciba
una
lista
y
genere
una
secuencia
con
el
cuadrado
de
cada
uno
de
sus
elementos.
Usa
la
funcin
para
mostrar
por
pantalla
los
cuadrados
de
la
lista
[1,
2,
10,
4,
5].
94
Ejercicio
12
Escribe
una
funcin,
rst,
que
reciba
un
entero
n
y
un
iterable
iter
y
genere
los
n
primeros
elementos
de
iter.
UJliza
yield.
Prueba
rst
con
las
siguientes
entradas:
a) first(20,
range(50,
200))
b) first(100,
[2,4,5,7,2])
95
Ejercicio
13
Escribe
una
funcin,
lter,
que
reciba
una
funcin
cond
(que
reciba
un
entero
y
devuelva
un
booleano)
y
un
iterador
iter
y
genere
los
elementos
de
iter
que
hagan
que
cond
sea
cierto.
Prueba
lter
con
las
siguientes
entradas:
a) Filter(lambda
n:
n<100,
range(50,
200))
b) filter(lambda
n:
n%2
==
0,
[2,4,5,7,2])
96
Ejercicio
14
Escribe
una
funcin,
take_while,
que
reciba
una
funcin
cond
(que
reciba
un
entero
y
devuelva
un
booleano)
y
un
iterador
iter
y
genere
elementos
de
iter
hasta
que
encuentre
uno
que
haga
que
cond
sea
falso.
Prueba
take_while
con
las
siguientes
entradas:
a) take_while(lambda
n:
n<100,
range(50,
200))
b) take_while(lambda
n:
n%2
==
0,
[2,4,5,7,2])
97
Ejercicio
15
Disea
una
funcin
generadora,
squares,
que
genere
la
secuencia
(innita)
de
los
cuadrados
perfectos
desde
el
uno.
UJliza
squares,
rst,
lter
y
take_while
para:
a) Obtener
los
primeros
100
cuadrados
perfectos.
b) Obtener
los
cuadrados
perfectos
menores
que
100.
c) Obtener
los
20
primeros
cuadrados
perfectos
capicas.
98