Академический Документы
Профессиональный Документы
Культура Документы
Objetivo
• ¡Aprender a programar en Python!
• No es lo mismo que “aprender a programar” a secas.
No aspiramos a escribir “Fortran en Python”. Los que
ya sabéis programar tendréis que olvidar algunas de
las cosas que sabéis – mientras estéis aquí.
• Pero 20 horas tan sólo nos permitirán echar un
vistazo muy superficial a todo el lenguaje...
en el mejor de los casos.
• Establecer unas bases sólidas para el
aprendizaje por nuestra cuenta.
• La participación es fundamental.
2
¡Volvernos renacentistas!
3
Evaluaciones
• Agradeceremos enormemente cualquier sugerencia
que nos hagáis sobre el temario, estilo y desarrollo
del curso.
• Por cualquier medio; ya sea en persona, por correo
electrónico o mediante amenazas por teléfono de
madrugada.
• Si esperáis al jueves para decir algo podréis mejorar
la experiencia de los que vengan detrás, pero no la
vuestra. Hablad ahora o callad hasta la siguiente
convocatoria.
4
Evaluaciones
Y ahora, explicado en el lenguaje del siglo XXI
Nosotros
Nosotros
Vosotros
A la UDIT
5
http://www.iaa.es/python
6
pyIAA
7
Python Kung Fu
Python IDL
8
Python
como calculadora
9
Aritmética básica
>>> 2 + 2
4
10
Aritmética básica
>>> 8 - 5
3
12
Aritmética básica
>>> 3 * 4
12
13
Aritmética básica
>>> 9 / 3
3
14
Aritmética básica
>>> 3 / 4
0
¿Por qué?
15
¡Estamos operando con enteros!
>> float(3/4)
float(int)
float(0) = 0.0
18
int() trunca...
>> int(0.49) = 0
>> int(1.50) = 1
>> int(2.9) = 2
19
... y round() redondea
>> round(0.49) = 0
>> round(1.50) = 2
>> round(2.9) = 3
20
from _ _future_ _ import division
>> 1 / 4
0.25
>> 4 / 7
0.5714285714285714
21
Python 2.7
• Publicada en julio de 2010
• Última versión de la serie 2.x!
• El futuro: Python 3000;! nueva versión del lenguaje
incompatible con 2.x. Mejorada, reorganizada, unificada.
Última versión: Python 3.4 (03/2014)
• La mayor parte del código 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 3000 es objetivamente mejor que 2.x. Ver
presentación “Python 3.3: Trust Me, It's Better Than
Python 2.7”, de Brett Cannon (PyCon US 2013)
22
from _ _future_ _ import division
23
Aritmética básica
>>> 7 % 2
1
24
Aritmética básica
>>> 10 ** 2
1024
25
Aritmética básica
>>> (1 + 3) * 4 + 2
18
26
Long integers
>> 1024 ** 2 ** 2
1099511627776L
¿Y esa L?
27
Long integers
28
Variables
>>> x = 8.5
>>> x
8.5
29
Variables
>>> x = 1
>>> y = 2
>>> x + y
3
30
Variables
int x;
double y;
31
Variables
int x;
x = 5.6;
32
Variables
>>> x = 6.6
5
>>> x + 2
7
8.6
33
Asignación múltiple
>>> x, y = 5, 3
>>> x + y
8
34
Asignación múltiple
>>> x = y = 3
>>> x
3
35
Variables no declaradas
>>> x = 1
>>> x + y
NameError: name 'y' is
not defined
36
Operadores de comparación
>>> 2 == 3
False
37
Operadores de comparación
>>> 2 != 3
True
38
Operadores de comparación
>>> 5 < 3
False
39
Operadores de comparación
>>> 5 > 5
False
40
Operadores de comparación
>>> 5 >= 5
True
41
Operadores lógicos
>>> x = 1.56
>>> x >= 0 and x <= 1
False
43
Operadores lógicos
>>> x = 1.56
>>> x >= 0 or x <= 1
True
44
Operadores lógicos
>>> x = 1.56
>>> 0 <= x <= 1
False
45
Tipos de datos básicos
• int → entero
• float → real
• bool → lógico
• string → texto
46
Tipos de datos básicos
>>> x = 4.5
>>> type(x)
<type 'float'>
47
Strings
• Cadenas de texto:
“¡Hola mundo!”
• Comillas simples o dobles:
‘¡Hola mundo!’
• Inmutables
48
Strings
50
Strings
Secuencia de escape:
“Sara dijo \“¡hola!\””
51
Strings
Triple entrecomillado:
“““ Sara dijo “¡hola!” ”””
52
Slices
a[index]
Devuelve el index-1 elemento
54
Edsger W. Dijkstra
“Why numbering should start at zero” (1982)
55
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 número no natural
Tanto
(cero) a) como
para b) tienen
determinar la ventajade
un intervalo denúmeros
que la
diferencia entre los límites
naturales. del intervalo (11-1 y
Poco elegante.
10-0) es igual al número de elementos de éste
56
Para representar una secuencia de N elementos,
utilizando la nomenclatura a), tenemos dos opciones:
a) 1 ≤ i < N+1
b) 0 ≤ i < N
57
Slices
a[start:end]
Elementos desde start hasta end-1
a[start:]
Elementos desde start hasta el final
59
Slices
a[:end]
Elementos desde el comienzo hasta end-1
a[start:end:step]
De start a end de step en step elementos
64
Subcadenas
65
Subcadenas
66
Subcadenas
67
Subcadenas
La subcadena no existe
68
Tamaño
69
Tamaño
70
Mayúsculas
>>> “hoygan”.upper()
“HOYGAN”
71
Minúsculas
72
Eliminando espacios
73
Eliminando espacios
74
Eliminando espacios
75
Ejercicios
Manipulación de cadenas utilizando el intérprete
76
Módulos
(un primer vistazo)
Instrucciones almacenadas
en un fichero y ejecutadas
por el intérprete de Python
77
Módulos
(un primer vistazo)
x=4
y=5
x ** (y + 1)
78
Módulos
(un primer vistazo)
python fichero.py
79
Módulos
(un primer vistazo)
chmod +x fichero.py
Hacemos el fichero ejecutable
80
Módulos
(un primer vistazo)
#! /usr/bin/env python
Primera línea del módulo: especifica que debe utilizarse
Python para ejecutar el código contenido en el fichero
81
Módulos
(un primer vistazo)
82
Módulos
(un primer vistazo)
83
print
84
print
85
print
86
print
>>> x = 2
>>> y = 3
>>> print x, “^”, y, “=”, 2**3
2^3=8
87
Formateo de cadenas
• Pero print sólo nos proporciona una funcionalidad
básica de manipulación de cadenas; para un
control más avanzado necesitamos necesitamos
formatear la cadena.
• Idéntico al antediluviano y universal printf,
presente en cualquier lenguaje de programación
digno de ese nombre.
• Nos da control absoluto de la representación por
pantalla de la información. Entre otro, podemos
especificar tipo, precisión, signo, alineamiento,
entre otros.
88
Formateo de cadenas
90
Comentarios
#
A partir del primer # y hasta el final de la línea
91
Comentarios
>>> x = 2
>>> x = x + 1 # incrementa x en uno
>>> x
3
92
Listas
93
Listas
>>> v = [1, 2, 3]
>>> v
[1, 2, 3]
94
Listas
95
Listas
>>> v = []
>>> v
[]
96
Asignación
>>> v = [4, 7, 3, 8]
>>> v[-1] = 0
>>> v
[4, 7, 3, 0]
97
Tamaño
98
Inserción
>>> v = [1, 3, 4]
>>> v.append(5)
>>> v
[1, 2, 3, 5]
99
Inserción
>>> v = [1, 3, 4]
>>> v.insert(9, 2)
>>> v
[1, 3, 9, 4]
Añade el elemento 9 en la posición de index = 2
100
Eliminación
>>> v = [1, 3, 4]
>>> v.remove(3)
>>> v
[1, 4]
Borrado por valor
101
Eliminación
>>> v = [9, 5, 8, 5, 9]
>>> del v[3]
>>> v
[9, 5, 8, 9]
Borrado por posición
102
Búsqueda
>>> v = [7, 0, 7]
>>> 7 in v
True
103
Búsqueda
>>> v = [7, 0, 7]
>>> v.index(7)
0
104
Búsqueda
>>> v = [7, 0, 7]
>>> 3 in v
False
105
Búsqueda
>>> v = [7, 0, 7]
>>> 8 not in v
True
106
Búsqueda
>>> v = [7, 0, 7]
>>> v.index(3)
ValueError: list.index(x): x
not in list
107
Concatenación
108
Concatenación
>>> x = [1, 2, 3]
>>> x.append([9, 8])
>>> x
[1, 2, 3, [9, 8]]
El cuarto elemento es ahora una lista
109
Máximo
110
Mínimo
>>> x = [7, 2, 5]
>>> min(x)
2
111
Sumatorio
112
Listas vacías
>>> x = []
>>> len(x)
0
113
Listas vacías
>>> x = []
>>> bool(x)
False
Las listas vacías evalúan a False
114
Ejercicios
Manipulación de listas utilizando el intérprete
115
Entrada de datos
raw_input(mensaje)
• Imprime mensaje por pantalla
• Devuelve entrada en un string
116
Entrada de datos
117
Entrada de datos
>>> x = raw_input(“x: ”)
x: 57
>>> print 2*x
5757
118
Entrada de datos
119
Entrada de datos
int * string concatena string int veces
>>> 3 * “adios”
“adiosadiosadios”
De vuelta al ejemplo anterior...
120
Entrada de datos
121
Entrada de datos
input(mensaje)
• También imprime mensaje por pantalla
• Pero la entrada es interpretada como una
expresión de código Python
122
Entrada de datos
123
Entrada de datos
>>> x = [1, 2]
>>> x.append(input())
18
>>> x
[1, 2, 18]
124
Entrada de datos
>>> x = [7, 8]
>>> x.append(input(“elemento: ”))
elemento: y
125
Estructuras de control
if
for
while
126
if
Evalúa una condición y ejecuta un bloque de
instrucciones si es verdadera
>>> if 2 > 1:
... print “obviamente”
...
obviamente
127
Bloque
128
if - else
Evalúa una condición 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”
129
if - elif - else
130
if - elif - else
>>> if 2 < 0:
... print “negativo!”
... elif 2 == 0:
... print “nada!”
... else:
... print “positivo!”
...
“positivo!”
131
for
Itera sobre los elementos de una secuencia
133
range(n)
Genera una lista de n valores [0, 1, 2 ... n-1]
>> range(7)
[0, 1, 2, 3, 4, 5, 6]
134
range(start, n)
Genera la lista [start, start+1, ... n-1]
>> range(3, 7)
[3, 4, 5, 6]
135
range(start, n, step)
Genera la lista [start, start+step, ... n-1]
136
for
>>> for i in range(3):
... print “hola”
...
hola
hola
hola
137
for (en C++)
138
for
for i in range(10):
print i
No utilizamos condiciones de inicio, parada e incremento, sino
que especificamos claramente qué elementos se utilizan
139
for
>>> for letra in “Sara”:
... print letra
...
S
a
r
a
140
for
¿Y si dentro del bucle necesitamos conocer el índice del elemento?
index 0 -> 2
index 1 -> 4
index 2 -> 5
141
for
142
enumerate(sec)
Permite iterar simultáneamente sobre el
índice y sobre el elemento de una secuencia
143
while
Ejecuta el bucle mientras la condición sea cierta
>>> x = 1
>>> while x < 10:
... x = x + 1
... print x
...
10
144
while
>>> x = 5
>>> factorial = 1
>>> while x > 0:
... factorial = factorial * x
... x = x - 1
... print factorial
...
120
145
while
>>> x = 0
>>> while True:
... x = x + 1
...
146
¿Y si necesitamos salir del bucle?
¿GOTO?
147
Edsger W. Dijkstra
“Go To Statement Considered Harmful,” (1968)
148
149
break
Abandona el bucle inmediatamente
152
continue
153
Ejercicios
if, for, while y range()
http://www.iaa.es/python/ejercicios
154
155
Python
• Monthy Python
• 1991, Países Bajos
• Guido van Rossum
• CPython
• Énfasis en legibilidad y sencillez
156
Guido van Rossum
157
Python
158
Python
• Axioma 1: el tiempo de un programador es
(bastante) más valioso que el de CPU
• Podrá tardar algo más en ejecutarse, pero a
cambio el tiempo se desarrollo es 5-10x menor
• En cualquier caso, los bloques de cálculo más
intensivo pueden pueden implementarse en
Fortran/C/C++ y ejecutarse desde Python
• La optimización prematura es la raíz de todo mal
(Donald Knuth)
159
Python
• Axioma 2: el código se escribe una única vez pero
es leído muchas más. De ahí el énfasis en la
legibilidad y sencillez.
• “Hay más de una forma de hacerlo”, de Perl
• “Debe haber una –y preferiblemente sólo una–
manera obvia de hacerlo”, de Python
• “Pythónico” como halago.
160
Raymond Hettinger
161
Jesse Noller
162
El Zen de Python
>>> import this
Ejemplos: http://stackoverflow.com/q/228181/
163
Bonito es mejor que feo
(Beautiful is better than ugly)
if a == 2 && b == 0 || b == 3:
print 'yes'
vs
if a == 2 and b == 0 or c == 3:
print 'yes'
164
Explícito es mejor que implícito
(Explicit is better than implicit)
int x = 1;
x++;
++x;
vs
x=1
x = x +1
165
Simple es mejor que complejo
(Simple is better than complex)
int x = 5;
int y = 3;
int tmp = x;
x = y;
y = tmp;
vs
x=5
y=3
x, y = y, x
166
Complejo es mejor que complicado
(Complex is better than complicated)
167
Plano es mejor que anidado
(Flat is better than nested)
if x >= 3:
if x < 10:
if x % 2 == 0:
print "aha!"
vs
168
Disperso es mejor que denso
(Sparse is better than dense)
if i > 0: x = x ** 2
elif x % 2 = 0: x = -1
else: x = 3
vs
if i > 0:
x = x ** 2
elif x % 2 = 0:
x = -1
else:
x=3
169
La legibilidad cuenta
(Readibility counts)
“Los programas deben escribirse para que los lean las personas, y
sólo de forma circunstancial para que los ejecuten las máquinas.”
— Hal Abelson y Gerals Sussman (1984)
170
Los casos especiales no son lo
suficientemente especiales como para
romper las reglas
(Special cases aren’t special enough to break the rules)
char c = 'a';
Una cadena de texto de longitud
uno no es lo suficientemente
vs especial como para merecer
tener un tipo de dato propio
c = "a"
171
Aunque lo pragmático gana a la pureza
(Although practicality beats purity)
>>> ord("e")
Por eso tenemos las funciones ord()
(conversión de carácter, es decir, 101
cadena de longitud uno, a entero ) y
chr() (entero a carácter)
>>> chr(101)
'e'
172
Estilo de Programación
• PEP 8 -- Style Guide for Python Code
• Tamaño máximo de línea de 79 líneas
• 4 espacios por nivel de indentación
• No usar los caracteres de tabulación
• Pero, si se usan (¡nooo!), no mezclarlos con espacios
• Espacios alrededor de asignaciones y comparaciones
• Un espacio después de las comas → x, y = 1, 2
• Ningún espacio justo después de abrir un paréntesis o
corchete, y tampoco antes de cerrarlo → x = [1, 2]
• Comentarios en su propia linea, si es posible
173
Comentarios
x = x + 1 # incremento x en uno
¡Obvio!
“Programa siempre como si el tipo que acabe manteniendo
tu código fuera un psicópata violento que sabe dónde vives”
– Martin Golding
º
174
Comentarios
• Por qué y cómo funciona el código
• Explicar los aspectos no evidentes del programa.
• Los comentarios irrelevantes o no actualizados son mucho
peor que no tener comentarios en absoluto.
• Lo más probable es que esos comentarios los estés
escribiendo para ti mismo en un futuro no muy lejano. Lo
que ahora es obvio casi con seguridad no lo sea en meses,
por no decir semanas.
• Y recuerda, en su propia línea siempre que sea posible.
175
Intermezzo
help(objeto)
>>> x = [1, 2, 3]
>>> help(x)
176
>>> a = [1, 2, 3]
>>> b = a
>>> del a[-1]
>>> a
[1, 2]
>>> b
[1, 2]
Todos nos sentimos igual, sí
177
Otros lenguajes tienen
“variables”
En muchos otros lenguajes, al asignar un valor a una
variable se coloca el valor en una especie de caja:
int a = 1;
a = 2;
179
Otros lenguajes tienen
“variables”
Al asignar una variable a otra se realiza una copia del
valor y se coloca en la nueva caja:
int b = a;
a=1
181
Python tiene “nombres”
Si reasignarmos a, lo que hacemos es colocar la
etiqueta a otro objeto:
a=2
182
Python tiene “nombres”
Si asignamos un nombre a otro, lo único que hacemos es
adjuntar otra etiqueta de nombre a un objeto existente:
b=a
183
La mayor parte del tiempo utilizamos
“variables”, aunque sean realmente
“nombres”, pues es el término más popular.
a = b = [1, 2, 3]
Ambas variables apuntan a la misma lista
a = b[:]
a ahora apunta a una copia de la lista b
184
Repaso
Manipulación de listas
185
Repaso
If - else
x = 41
187