Vous êtes sur la page 1sur 187

1

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 sabis programar tendris que olvidar algunas de
las cosas que sabis mientras estis aqu.

Pero 20 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.
2
Volvernos renacentistas!
3
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 jueves para decir algo podris mejorar


la experiencia de los que vengan detrs, pero no la
vuestra. Hablad ahora o callad hasta la siguiente
convocatoria.
4
Evaluaciones
5
Vosotros
Nosotros
A la UDIT
Nosotros
Y ahora, explicado en el lenguaje del siglo XXI
http://www.iaa.es/python
Aqu tenis todo el material: transparencias en PDF,
ejercicios, soluciones y varios enlaces de inters.
6
7

Existe una lista de correo de Python en el IAA.

http://smtp.iaa.es/mailman/listinfo/pyiaa

Os animamos a que os apuntis : somos ya varias decenas


de participantes y es un sitio inmejorable en el que
preguntar cualquier duda que os pueda surgir una vez
que este curso termine.

Python Kung Fu: retos peridicos que enviamos a la lista,


analizando las respuestas recibidas y perfectos para
aprender nuevos conceptos que de otra forma podran
pasarnos desapercibidos.
pyIAA
8
Python Kung Fu
IDL Python
Python
como calculadora
9
Aritmtica bsica
>>> 2 + 2
4
10
Aritmtica bsica
>>> 2.1 + 4.9
7.0
11
Aritmtica bsica
>>> 8 - 5
3
12
Aritmtica bsica
>>> 3 * 4
12
13
Aritmtica bsica
>>> 9 / 3
3
14
Aritmtica bsica
>>> 3 / 4
0
Por qu?
15
Estamos operando con enteros!
int / int = int
3 / 4 = 0.75
int(0.75) = 0
16
Necesitamos nmeros reales
float / float = float
float / int = float
int / float = float
17
Pero esto no funcionara...
>> 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 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.4 (03/2014)

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 3000 es objetivamente mejor que 2.x. Ver


presentacin Python 3.3: Trust Me, It's Better Than
Python 2.7, de Brett Cannon (PyCon US 2013)
22
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 es
opcional.

Permite una transicin suave, a aos vista.

La mquina del tiempo de


los creadores de Python.
23
Aritmtica bsica
>>> 7 % 2
1
24
Aritmtica bsica
>>> 10 ** 2
1024
25
Aritmtica bsica
>>> (1 + 3) * 4 + 2
18
26
Long integers
>> 1024 ** 2 ** 2
1099511627776L
27
Y esa L?
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.

En la prctica: Python se encarga de todo. Tan slo


necesitamos saber que para valores muy grandes
aparecer esa L al final del nmero.
28
Variables
>>> x = 8.5
>>> x
8.5
29
Variables
>>> x = 1
>>> y = 2
>>> x + y
3
30
Variables
int x;
31
double y;
Variables
32
int x;
x = 5.6;
Variables
>>> x = 5
>>> x + 2
7
33
>>> x = 6.6
>>> x + 2
8.6
Asignacin mltiple
>>> x, y = 5, 3
>>> x + y
8
34
Asignacin mltiple
>>> x = y = 3
>>> x
3
35
Variables no declaradas
>>> x = 1
>>> x + y
NameError: name 'y' is
not defined
36
Operadores de comparacin
>>> 2 == 3
False
37
Operadores de comparacin
>>> 2 != 3
True
38
Operadores de comparacin
>>> 5 < 3
False
39
Operadores de comparacin
>>> 5 > 5
False
40
Operadores de comparacin
>>> 5 >= 5
True
41
Operadores lgicos
>>> not 2 > 3
True
42
Operadores lgicos
>>> x = 1.56
>>> x >= 0 and x <= 1
False
43
Operadores lgicos
>>> x = 1.56
>>> x >= 0 or x <= 1
True
44
Operadores lgicos
>>> x = 1.56
>>> 0 <= x <= 1
False
45
Tipos de datos bsicos
int ! entero
float ! real
bool ! lgico
string ! texto
46
Tipos de datos bsicos
>>> x = 4.5
>>> type(x)
<type 'float'>
47
Strings

Cadenas de texto:
Hola mundo!

Comillas simples o dobles:


Hola mundo!

Inmutables
48
Strings
>>> nombre = Sara
>>> nombre
Sara
49
Strings
>>> frase = Sara dijo hola!
>>> frase
Sara dijo hola!
50
Strings
Secuencia de escape:
Sara dijo \hola!\
51
Strings
Triple entrecomillado:
Sara dijo hola!
52
Slices
a[index]
Devuelve el index-1 elemento
a = Abstulit qui dedit
a[0] = A
a[6] = i
a[-1] = t
53
El primer elemento
tiene ndice = 0
54
Edsger W. Dijkstra
Why numbering should start at zero (1982)
55
Para representar la secuencia 1, 2, ..., 10
tenemos cuatro posibilidades:
56
a) 1 " i < 11
b) 0 < i " 10
c) 1 " i " 10
d) 0 < i < 11
Tanto a) como b) tienen la ventaja de que la
diferencia entre los lmites del intervalo (11-1 y
10-0) es igual al nmero de elementos de ste
b) nos obliga a utilizar un nmero no natural
(cero) para determinar un intervalo de nmeros
naturales. Poco elegante.
57
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
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] =
58
Slices
a[start:]
Elementos desde start hasta el final
a = Fabricando fit faber
a[12:] = fit faber
a[-5:] = faber
59
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
60
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
61
Inmutables
>>> nombre = Sara
>>> nombre[0] = M
TypeError: 'str' object
does not support item
assignment
62
Inmutables
>>> nombre = Sara
>>> nombre = Mara
>>> nombre
Mara
63
Concatenacin
>> nombre = Sara
>> nombre = M + nombre[1:]
>> nombre
Mara
64
Subcadenas
>>> ere in sapere aude
True
65
Subcadenas
>>> sapere aude.find(ere)
3
La subcadena existe y empieza en el
elemento 3 (es decir, el cuarto)
66
Subcadenas
>>> flux in et veritas
False
67
Subcadenas
>>> et veritas.find(flux)
-1
La subcadena no existe
68
Tamao
>>> len(victoria aut mors)
17
69
Tamao
>>> comic = V de Vendetta
>>> len(comic)
13
70
Maysculas
>>> hoygan.upper()
HOYGAN
71
Minsculas
>>> vocales = AEIOU
>>> vocales.lower()
aeiou
72
Eliminando espacios
>>> planeta = Saturno
>>> planeta.lstrip()
Saturno
73
Eliminando espacios
>>> lugar = En el Sol
>>> print lugar.rstrip(), hace calor
En el Sol hace calor
74
Eliminando espacios
>>> apellido = Lee
>>> print Bruce, apellido.strip(), Jr.
Bruce Lee Jr.
75
Ejercicios
Manipulacin de cadenas utilizando el intrprete
76
cadena = Cabeza grande, ojos hermosos
1. El tamao de la cadena?
2. Los primeros cinco caracteres de la cadena
3. Los siete ltimos caracteres.
4. De los cinco primeros caracteres, los que ocupan posiciones pares.
5. De los ltimos trece caracteres, los de posiciones impares
6. En mayscula, los caracteres en posiciones mltiplo de tres
7. De dos en dos, del caracter en la posicin 4 al de la 17
8. Est el caracter x en la cadena?
9. Y o, en mayscula o minscula?
Mdulos
(un primer vistazo)
Instrucciones almacenadas
en un fichero y ejecutadas
por el intrprete de Python
77
Mdulos
(un primer vistazo)
x = 4
y = 5
x ** (y + 1)
78
Mdulos
(un primer vistazo)
python fichero.py
El nombre del mdulo es fichero
(sin la extensin .py)
79
Mdulos
(un primer vistazo)
chmod +x fichero.py
Hacemos el fichero ejecutable
80
Mdulos
(un primer vistazo)
#! /usr/bin/env python
Primera lnea del mdulo: especifica que debe utilizarse
Python para ejecutar el cdigo contenido en el fichero
81
Mdulos
(un primer vistazo)
udit-d41:~ vterron$ python ejemplo.py
udit-d41:~ vterron$
82
Mdulos
(un primer vistazo)
udit-d41:~ vterron$ ./ejemplo.py
udit-d41:~ vterron$
83
print
>>> print Abre las puertas, HAL
Abre las puertas, HAL
84
print
>>> print Lo siento,
>>> print Dave
Lo siento,
Dave
85
Aade salto de lnea al final
print
>>> print Me temo que, no puedo
Me temo que no puedo
86
Inserta espacio entre las cadenas mostradas por pantalla
print
>>> x = 2
>>> y = 3
>>> print x, ^, y, =, 2**3
2 ^ 3 = 8
87
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 nombre.

Nos da control absoluto de la representacin por


pantalla de la informacin. Entre otro, podemos
especificar tipo, precisin, signo, alineamiento,
entre otros.
88
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
89
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
90
Comentarios
#
A partir del primer # y hasta el final de la lnea
91
Comentarios
92
>>> x = 2
>>> x = x + 1 # incrementa x en uno
>>> x
3
Listas

Serie de elementos separados por comas,


encerrados entre corchetes.

Los elementos pueden ser de distinto tipo

Dinmicas: nmero variable de elementos

Mutables
93
Listas
>>> v = [1, 2, 3]
>>> v
[1, 2, 3]
94
Listas
>>> v = [1, 2.0, tres]
>>> print v[1]
2.0
95
Listas
>>> v = []
>>> v
[]
96
Asignacin
>>> v = [4, 7, 3, 8]
>>> v[-1] = 0
>>> v
[4, 7, 3, 0]
97
Tamao
>>> v = [1, 2.0, tres]
>>> len(v)
3
98
Insercin
>>> v = [1, 3, 4]
>>> v.append(5)
>>> v
[1, 2, 3, 5]
99
Insercin
>>> v = [1, 3, 4]
>>> v.insert(9, 2)
>>> v
[1, 3, 9, 4]
100
Aade el elemento 9 en la posicin de index = 2
Eliminacin
>>> v = [1, 3, 4]
>>> v.remove(3)
>>> v
[1, 4]
101
Borrado por valor
Eliminacin
>>> v = [9, 5, 8, 5, 9]
>>> del v[3]
>>> v
[9, 5, 8, 9]
102
Borrado por posicin
Bsqueda
>>> v = [7, 0, 7]
>>> 7 in v
True
103
Bsqueda
>>> v = [7, 0, 7]
>>> v.index(7)
0
104
Bsqueda
105
>>> v = [7, 0, 7]
>>> 3 in v
False
Bsqueda
106
>>> v = [7, 0, 7]
>>> 8 not in v
True
Bsqueda
>>> v = [7, 0, 7]
>>> v.index(3)
ValueError: list.index(x): x
not in list
107
Concatenacin
>>> [1, 2, 3] + [9, 8]
[1, 2, 3, 9, 8]
108
Concatenacin
>>> x = [1, 2, 3]
>>> x.append([9, 8])
>>> x
[1, 2, 3, [9, 8]]
109
El cuarto elemento es ahora una lista
Mximo
>>> max([7, 2, 5])
7
110
Mnimo
>>> x = [7, 2, 5]
>>> min(x)
2
111
Sumatorio
>>> sum([7, 2, 5])
14
112
Listas vacas
>>> x = []
>>> len(x)
0
113
Listas vacas
>>> x = []
>>> bool(x)
False
114
Las listas vacas evalan a False
Ejercicios
Manipulacin de listas utilizando el intrprete
115
lista = [primero, 2, 3.5, 4.0, ultimo]
1. El tamao de la lista?
2. El tamao de la lista multiplicado por su segundo elemento
3. El producto del segundo elemento de la lista por el tercero
4. Est 2 en la lista? Y 2.0?
5. Eliminar el primer elemento de la lista
6. Eliminar ahora los dos ltimos elementos simultaneamente
7. Est la lista vaca?
8. Aadir el elemento nuevo ultimo a la lista.
Entrada de datos
raw_input(mensaje)

Imprime mensaje por pantalla

Devuelve entrada en un string


116
Entrada de datos
>>> persona = raw_input(Nombre: )
Nombre:
>>> print Bienvenido,, persona
Bienvenido, Mr. Marshall
117
Mr. Marshall
Entrada de datos
>>> x = raw_input(x: )
x:
>>> print 2*x
5757
118
57
Entrada de datos

raw_input() siempre devuelve una


cadena de texto

Necesitamos hacer una conversin


al tipo de dato que necesitamos
119
Entrada de datos
>>> 3 * adios
adiosadiosadios
120
int * string concatena string int veces
De vuelta al ejemplo anterior...
Entrada de datos
>>> x = int(raw_input(x: ))
x:
>>> print 2*x
114
121
57
Entrada de datos
input(mensaje)

Tambin imprime mensaje por pantalla

Pero la entrada es interpretada como una


expresin de cdigo Python
122
Entrada de datos
>>> numeros = input(Lista: )
Nombre:
>>> del numeros[-1]
>>> numeros
[7, 8]
123
[7, 8, 9]
Entrada de datos
>>> x = [1, 2]
>>> x.append(input())
>>> x
[1, 2, 18]
124
18
Entrada de datos
>>> x = [7, 8]
>>> x.append(input(elemento: ))
elemento:
NameError: name 'y' is not defined
125
y
La mayor parte del tiempo necesitamos raw_input
Estructuras de control
if
for
while
126
Necesitamos modificar el flujo de ejecucin del
programa en funcin de los datos
if
>>> if 2 > 1:
... print obviamente
...
obviamente
127
Evala una condicin y ejecuta un bloque de
instrucciones si es verdadera
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
128
if - else
>>> if 7 % 2 == 0:
... print es par
... else:
... print no par
...
no par
129
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 - 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++


130
if - elif - else
>>> if 2 < 0:
... print negativo!
... elif 2 == 0:
... print nada!
... else:
... print positivo!
...
positivo!
131
for
>>> for i in [1, 2, 3]:
... print i
...
1
2
3
132
Itera sobre los elementos de una secuencia
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?


133
range(n)
>> range(7)
[0, 1, 2, 3, 4, 5, 6]
134
Genera una lista de n valores [0, 1, 2 ... n-1]
range(start, n)
>> range(3, 7)
[3, 4, 5, 6]
135
Genera la lista [start, start+1, ... n-1]
range(start, n, step)
>>> range(1, 11, 2)
[1, 3, 5, 7, 9]
136
Genera la lista [start, start+step, ... n-1]
for
>>> for i in range(3):
... print hola
...
hola
hola
hola
137
for (en C++)
for (int i = 0 ; i < 10 ; i++)
cout << i << endl;
138
for
for i in range(10):
print i
139
No utilizamos condiciones de inicio, parada e incremento, sino
que especificamos claramente qu elementos se utilizan
Ms expresivo y seguro
for
>>> for letra in Sara:
... print letra
...
S
a
r
a
140
141
Y si dentro del bucle necesitamos conocer el ndice del elemento?
for
>>> numeros = [2, 4, 5]
index 0 -> 2
index 1 -> 4
index 2 -> 5
142
for
>>> numeros = [2, 4, 5]
>>> for i in range(len(numeros)):
... print i, ->, numeros[i]
enumerate(sec)
>>> for i, num in enumerate([1, 2, 3]):
... print i, ->, num
143
Permite iterar simultneamente sobre el
ndice y sobre el elemento de una secuencia
while
>>> x = 1
>>> while x < 10:
... x = x + 1
... print x
...
10
144
Ejecuta el bucle mientras la condicin sea cierta
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
>>> for i in [1, 2, 3]:
... if i % 2 == 0:
... break
... print i
...
2
150
Abandona el bucle inmediatamente
break
>>> x = 15
>>> while True:
... if x % 9 == 0:
... print x
... break
... x = x + 1
...
18
151
continue
>>> for i in [1, 2, 3]:
... if i % 2 == 0:
... continue
... print i
...
1
3
152
Salta inmediatamente a la siguiente iteracin
continue
>>> while True:
... x = int(raw_input())
... if not x % 2 == 0:
... continue
... print es par!
153
154
http://www.iaa.es/python/ejercicios
Ejercicios
if, for, while y range()
155
156
Python

Monthy Python

1991, Pases Bajos

Guido van Rossum

CPython

nfasis en legibilidad y sencillez


Guido van Rossum

Benevolent Dictator For Life (BDFL)

Computer Programming for Everybody (1989)

Trabaj en Google hasta finales de 2012, dedicando la


mitad de su tiempo a continuar con el desarrollo de
Python. Desde enero de 2013 est en Dropbox.
157
158
Python
!
Lenguaje de alto nivel
!
Interpretado
!
Dinmico
S, esto influye en el rendimiento
Python

Axioma 1: el tiempo de un programador es


(bastante) ms valioso que el de CPU

Podr tardar algo ms en ejecutarse, pero a


cambio el tiempo se desarrollo es 5-10x menor

En cualquier caso, los bloques de clculo ms


intensivo pueden pueden implementarse en
Fortran/C/C++ y ejecutarse desde Python

La optimizacin prematura es la raz de todo mal


(Donald Knuth)
159
Python

Axioma 2: el cdigo se escribe una nica vez pero


es ledo muchas ms. De ah el nfasis en la
legibilidad y sencillez.

Hay ms de una forma de hacerlo, de Perl

Debe haber una y preferiblemente slo una


manera obvia de hacerlo, de Python

Pythnico como halago.


160

PSF Board of Directors

Autor de numerosas funciones (izip(), reversed(),


enumerate()...) y estructuras de datos (deque, set.) de la
librera estndar de Python.

Pequeas lecciones de Python en @raymondh

Ponente excepcional:
-
What Makes Python Awesome
-
Transforming Code into Beautiful, Idiomatic Python
-
Python's Class Development Toolkit
Raymond Hettinger
161
Jesse Noller

PSF Board of Directors

Presidente de la PyCon US 2013

Autor del mdulo multiprocessing

nfasis en educacin y divulgacin de Python


162
El Zen de Python
163
>>> import this
Ejemplos: http://stackoverflow.com/q/228181/
if a == 2 && b == 0 || b == 3:
print 'yes'
vs
if a == 2 and b == 0 or c == 3:
print 'yes'
164
Bonito es mejor que feo
(Beautiful is better than ugly)
Filosofa No me hagas pensar
165
Explcito es mejor que implcito
(Explicit is better than implicit)
int x = 1;
x++;
++x;
vs
x = 1
x = x +1
166
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
167
Complejo es mejor que complicado
(Complex is better than complicated)
Es inevitable que muchos de nuestros programas terminen siendo
complejos (ya que realizan operaciones complejas), pero ninguna lnea de
nuestro cdigo debera ser jams difcil o complicada de entender.
Debemos construir nuestros programas paso a paso y con sencillez
if x >= 3:
if x < 10:
if x % 2 == 0:
print "aha!"
vs
if 3 <= x < 10 and x % 2 == 0:
print "aha!"
168
Plano es mejor que anidado
(Flat is better than nested)
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
Disperso es mejor que denso
(Sparse is better than dense)
Dicho no pongas mucho cdigo en una lnea
170
La legibilidad cuenta
(Readibility counts)
Los programas deben escribirse para que los lean las personas, y
slo de forma circunstancial para que los ejecuten las mquinas.
Hal Abelson y Gerals Sussman (1984)
Intenta que tus programas sean
fciles de leer y obvios.
171
Los casos especiales no son lo
suficientemente especiales como para
romper las reglas
(Special cases arent special enough to break the rules)
Una cadena de texto de longitud
uno no es lo suficientemente
especial como para merecer
tener un tipo de dato propio
char c = 'a';
vs
c = "a"
172
Aunque lo pragmtico gana a la pureza
(Although practicality beats purity)
Por eso tenemos las funciones ord()
(conversin de carcter, es decir,
cadena de longitud uno, a entero ) y
chr() (entero a carcter)
>>> ord("e")
101
>>> chr(101)
'e'
Una consistencia necia es lo que aflige a las
mentes pequeas (Ralph Waldo Emerson)
Estilo de Programacin

PEP 8 -- Style Guide for Python Code

Tamao mximo de lnea de 79 lneas

4 espacios por nivel de indentacin

No usar los caracteres de tabulacin

Pero, si se usan (nooo!), no mezclarlos con espacios

Espacios alrededor de asignaciones y comparaciones

Un espacio despus de las comas ! x, y = 1, 2

Ningn espacio justo despus de abrir un parntesis 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 cdigo fuera un psicpata violento que sabe dnde vives
Martin Golding

174
Comentarios

Por qu y cmo funciona el cdigo

Explicar los aspectos no evidentes del programa.

Los comentarios irrelevantes o no actualizados son mucho


peor que no tener comentarios en absoluto.

Lo ms probable es que esos comentarios los ests


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 lnea 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]
177
Todos nos sentimos igual, s
Otros lenguajes tienen
variables
178
En muchos otros lenguajes, al asignar un valor a una
variable se coloca el valor en una especie de caja:
int a = 1;
La caja a contiene ahora el entero 1
Extrado de Code Like a Pythonista: Idiomatic Python, de David Goodger
Otros lenguajes tienen
variables
179
Al asignar otro valor a la misma variable lo que ocurre es
que el valor que contiene la caja se sustituye por el nuevo:
a = 2;
Ahora a contiene el entero 2
Otros lenguajes tienen
variables
180
Al asignar una variable a otra se realiza una copia del
valor y se coloca en la nueva caja:
int b = a;
b es una segunda caja, con una copia del entero 2.
La caja a tiene una copia totalmente independiente.
Python tiene nombres
181
En Python, un "nombre" o "identificador" es algo
parecido a una etiqueta pegada a un objeto:
a = 1
El entero 1 tiene una etiqueta con el texto a
Python tiene nombres
182
Si reasignarmos a, lo que hacemos es colocar la
etiqueta a otro objeto:
a = 2
Ahora el nombre a est asignado al entero 2
Python tiene nombres
183
Si asignamos un nombre a otro, lo nico que hacemos es
adjuntar otra etiqueta de nombre a un objeto existente:
b = a
El nombre b es slo una segunda etiqueta aadida al mismo entero que a
La mayor parte del tiempo utilizamos
variables, aunque sean realmente
nombres, pues es el trmino ms 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
Manipulacin de listas
185
numeros = range(2, 101, 2)
1. Qu tenemos en la lista? (en lenguaje natural)
2. Los ltimos diez elementos de la lista
3. Todos los elementos excepto los tres primeros
4. Aadimos los valores [13, 12, 11... 2, 1] al final de la lista.
5. El mnimo de los primeros quince elementos.
6. Insertamos el mnimo de la lista al final.
7. Invertimos el orden de la lista.
8. La suma de los elementos que tienen ndices pares.
9. La media aritmtica de los elementos de la lista.
10.A partir de [1, 2, 3, 4, 5], generar [1, 2, 3, 4, 5, 4, 3, 2, 1]
Repaso
If - else
186
x = 41
1. Imprimir sentido de la vida encontrado si x es igual a 42 (if)
2. Si no, imprimir sigue buscando (else)
3. Si x es menor que cien, imprimir su valor e incrementarlo en uno
4. Si no, actualizar su valor a su cuadrado (x ^ 2)
5. Si es mayor que cero y par, imprimir exacto
6. Si no, actualizar su valor a su mitad exacta (x / 2)
7. Si es mayor que cero, impar y menor o igual que 365, imprimir por
pantalla el mensaje podra ser un da
8. Si no, imprimir no lo es
9. Si el nmero es diferente de cero, imprimir algo es algo
10.Si el nmero es cero, asignarle el valor cien.
Repaso
For
187
exponentes = range(1, 11)
1. Qu tenemos en la lista? (en lenguaje natural)
2. Aadir a la lista de exponentes [18, 19]
3. Para cada elemento de la lista, imprimir por pantalla 2 ** x
4. Para cada elemento de la lista, imprimir por pantalla su cuadrado.
5. Hacer que el ejercicio anterior muestre los resultados en orden inverso (es
decir, hay que iterar sobre los exponentes hacia atrs)
6. Para cada elemento de la lista, comprobar si 2 ** x es un nmero par.
7. Imprimir cada elemento de la lista junto a su posicin (ndice)
8. Usando una variable en la que vamos almacenando el resultado, obtener la
suma de calcular 7 ** x para cada elemento de la lista.
9. Hacer que el ejercicio anterior de detenga si en el momento en el que el
valor de x sea mayor que 200

Vous aimerez peut-être aussi