Iniciacion Python Dia1

Post on 09-Jul-2016

65 views 2 download

description

aprende python

Transcript of Iniciacion Python Dia1

Wednesday, March 7, 2012

Objetivo• ¡Aprender a programar en Python!

• No es lo mismo que “aprender a programar” a secas. No aspiramos a escribir “C en Python”.

• Pero 25 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.

Wednesday, March 7, 2012

¿Y estos dos?• Instituto de Astrofísica de Andalucía (Granada)

• César Husillos (ALHAMBRA, minería de datos)

• Víctor Terrón (PANIC, reducción de datos)

• Algunos años ya programando en Pyhton

• Ésta es la segunda edición de este curso

Quizá imaginéis que nuestras fiestas son algo asíEn realidad, se parecen mucho más a esto

Wednesday, March 7, 2012

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 viernes 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.

Wednesday, March 7, 2012

Evaluaciones

Vosotros

Nosotros

A Granada

Nosotros

Y ahora, explicado en el lenguaje del siglo XXI

Wednesday, March 7, 2012

Pythoncomo calculadora

Wednesday, March 7, 2012

Aritmética básica

>>> 2 + 24

Wednesday, March 7, 2012

Aritmética básica

>>> 2.1 + 4.97.0

Wednesday, March 7, 2012

Aritmética básica

>>> 8 - 53

Wednesday, March 7, 2012

Aritmética básica

>>> 3 * 412

Wednesday, March 7, 2012

Aritmética básica

>>> 9 / 33

Wednesday, March 7, 2012

Aritmética básica

>>> 3 / 40

¿Por qué?Wednesday, March 7, 2012

¡Estamos operando con

int / int = int3 / 4 = 0.75int(0.75) = 0

Wednesday, March 7, 2012

Necesitamos números

float / float = floatfloat / int = floatint / 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

• Ú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.2 (febrero 2011)

• 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 2.7 está en modo de mantenimiento: sólo se arreglan bugs.

Wednesday, March 7, 2012

from _ _future_ _ import division

• La división funciona como esperaríamos desde Python 3.0. Pero en realidad estaba implementado desde la versión 2.2 (diciembre de 2001), sólo que su uso era opcional.

• Permite una transición suave, a años vista.

• La máquina del tiempo delos creadores de Python.

Wednesday, March 7, 2012

Aritmética básica

>>> 7 % 21

Wednesday, March 7, 2012

Aritmética básica

>>> 10 ** 21024

Wednesday, March 7, 2012

Aritmética básica

>>> (1 + 3) * 4 + 218

Wednesday, March 7, 2012

Long integers

>> 1024 ** 2 ** 21099511627776L

¿Y esa L?

Wednesday, March 7, 2012

Long integers

• Enteros normales utilizan al menos 32 bits (máximo 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 automáticamente los long ints, limitados únicamente por la memoria disponible. En otras palabras: precisión ilimitada.

Wednesday, March 7, 2012

Variables

>>> x = 8.5>>> x8.5

Wednesday, March 7, 2012

Variables

>>> x = 1>>> y = 2>>> x + y3

Wednesday, March 7, 2012

Variables

int x;

double y;

Wednesday, March 7, 2012

Variables

int x;

x = 5.6;

Wednesday, March 7, 2012

Variables

>>> x = 5>>> x + 27

>>> x = 6.6>>> x + 28.6

Wednesday, March 7, 2012

Asignación múltiple

>>> x, y = 5, 3>>> x + y8

Wednesday, March 7, 2012

Asignación múltiple

>>> x = y = 3>>> x3

Wednesday, March 7, 2012

Variables no declaradas

>>> x = 1>>> x + yNameError: name 'y' is not defined

Wednesday, March 7, 2012

Operadores de comparación

>>> 2 == 3False

Wednesday, March 7, 2012

Operadores de comparación

>>> 2 != 3True

Wednesday, March 7, 2012

Operadores de comparación

>>> 5 < 3False

Wednesday, March 7, 2012

Operadores de comparación

>>> 5 > 5False

Wednesday, March 7, 2012

Operadores de comparación

>>> 5 >= 5True

Wednesday, March 7, 2012

Operadores lógicos

>>> not 2 > 3True

Wednesday, March 7, 2012

Operadores lógicos

>>> x = 1.56>>> x >= 0 and x <= 1False

Wednesday, March 7, 2012

Operadores lógicos

>>> x = 1.56>>> x >= 0 or x <= 1True

Wednesday, March 7, 2012

Operadores lógicos

>>> x = 1.56>>> 0 <= x <= 1False

Wednesday, March 7, 2012

Tipos de datos básicos

• int → entero• float → real• bool → lógico• string → texto

Wednesday, March 7, 2012

Tipos de datos básicos

>>> 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 < 11b) 0 < i ≤ 10c) 1 ≤ i ≤ 10d) 0 < i < 11

Tanto a) como b) tienen la ventaja de que la diferencia entre los límites del intervalo (11-1 y 10-0) es igual al

número de elementos de éste

b) nos obliga a utilizar un número no natural (cero) para determinar un intervalo de números naturales. Poco

elegante.

Wednesday, March 7, 2012

Para representar una secuencia de N elementos, utilizando la nomenclatura a), tenemos dos opciones:

a) 1 ≤ i < N+1b) 0 ≤ i < N

La opción b) es más simple e intuitiva: el límite superior nos indica directamente el número 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' objectdoes not support item assignment

Wednesday, March 7, 2012

Inmutables

>>> nombre = “Sara”

>>> nombre = “Mara”

>>> nombre

‘Mara’

Wednesday, March 7, 2012

Concatenación

>> 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

Tamaño

>>> len(“victoria aut mors”)

17

Wednesday, March 7, 2012

Tamaño

>>> comic = “V de Vendetta”

>>> len(comic)

13

Wednesday, March 7, 2012

Mayúsculas

>>> “hoygan”.upper()

“HOYGAN”

Wednesday, March 7, 2012

Minúsculas

>>> 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

EjerciciosManipulación de cadenas utilizando el

cadena = “Cabeza grande, ojos hermosos”

1. ¿El tamaño de la cadena?2. Los primeros cinco caracteres de la cadena3. Los siete últimos caracteres.4. De los cinco primeros caracteres, los que ocupan posiciones pares.5. De los últimos trece caracteres, los de posiciones impares6. En mayúscula, los caracteres en posiciones múltiplo de tres7. De dos en dos, del caracter en la posición 4 al de la 178. ¿Está el caracter “x” en la cadena?9. ¿Y “o”, en mayúscula o minúscula?

Wednesday, March 7, 2012

Módulos

Instrucciones almacenadas en un fichero y ejecutadas por el

intérprete de Python

Wednesday, March 7, 2012

Módulos

x = 4

y = 5

x ** (y + 1)

Wednesday, March 7, 2012

Módulos

python fichero.py

El nombre del módulo es fichero(sin la extensión .py)

Wednesday, March 7, 2012

Módulos

chmod +x fichero.py

Hacemos el fichero ejecutable

Wednesday, March 7, 2012

Módulos

#! /usr/bin/env python

Primera línea del módulo: especifica que debe utilizarse Python para ejecutar el código

contenido en el fichero

Wednesday, March 7, 2012

Módulos

udit-d41:~ vterron$ python ejemplo.py

udit-d41:~ vterron$

Wednesday, March 7, 2012

Módulos

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’

Añade salto de línea 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 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 hombre.

• 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.

Wednesday, March 7, 2012

Formateo de cadenas

>>> print “Numero: %d” % 42

Número: 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

• Dinámicas: número 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

Asignación

>>> v = [4, 7, 3, 8]

>>> v[-1] = 0

>>> v

[4, 7, 3, 0]

Wednesday, March 7, 2012

Tamaño

>>> v = [1, 2.0, “tres”]

>>> len(v)

3

Wednesday, March 7, 2012

Inserción

>>> v = [1, 3, 4]

>>> v.append(5)

>>> v

[1, 2, 3, 5]

Wednesday, March 7, 2012

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

Wednesday, March 7, 2012

Eliminación

>>> v = [1, 3, 4]

>>> v.remove(3)

>>> v

[1, 4]

Borrado por valor

Wednesday, March 7, 2012

Eliminación

>>> v = [9, 5, 8, 5, 9]

>>> del v[3]

>>> v

[9, 5, 8, 9]

Borrado por posición

Wednesday, March 7, 2012

Búsqueda

>>> v = [7, 0, 7]

>>> 7 in v

True

Wednesday, March 7, 2012

Búsqueda

>>> v = [7, 0, 7]

>>> v.index(7)

0

Wednesday, March 7, 2012

Búsqueda

>>> v = [7, 0, 7]>>> 3 in vFalse

Wednesday, March 7, 2012

Búsqueda

>>> v = [7, 0, 7]>>> 8 not in vTrue

Wednesday, March 7, 2012

Búsqueda

>>> v = [7, 0, 7]

>>> v.index(3)

ValueError: list.index(x): x not in list

Wednesday, March 7, 2012

Concatenación

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

[1, 2, 3, 9, 8]

Wednesday, March 7, 2012

Concatenación

>>> 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

Máximo

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

Wednesday, March 7, 2012

Mínimo

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

Wednesday, March 7, 2012

Sumatorio

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

Wednesday, March 7, 2012

Listas vacías

>>> x = []>>> len(x)0

Wednesday, March 7, 2012

Listas vacías

>>> x = []>>> bool(x)False

Las listas vacías evalúan a False

Wednesday, March 7, 2012

EjerciciosManipulación de listas utilizando el

lista = [“primero”, 2, “3.5”, 4.0, “ultimo”]

1. ¿El tamaño de la lista?2. El tamaño de la lista multiplicado por su segundo elemento3. El producto del segundo elemento de la lista por el tercero4. ¿Está 2 en la lista? ¿Y 2.0?5. Eliminar el primer elemento de la lista6. Eliminar ahora los dos últimos elementos simultaneamente7. ¿Está la lista vacía?8. Añadir 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:

>>> print “Bienvenido,”, persona

Bienvenido, Mr. Marshall

Mr. Marshall

Wednesday, March 7, 2012

Entrada de datos

>>> x = raw_input(“x: ”)

x:

>>> print 2*x

5757

57

Wednesday, March 7, 2012

Entrada de datos

• raw_input() siempre devuelve una cadena de texto

• Necesitamos hacer una conversión al tipo de dato que necesitamos

Wednesday, March 7, 2012

Entrada de datos

>>> 3 * “adios”

“adiosadiosadios”

int * string concatena string int veces

De vuelta al ejemplo anterior...

Wednesday, March 7, 2012

Entrada de datos

>>> x = int(raw_input(“x: ”))

x:

>>> print 2*x

114

57

Wednesday, March 7, 2012

Entrada de datos

input(mensaje)

• También imprime mensaje por pantalla

• Pero la entrada es interpretada como una expresión de código Python

Wednesday, March 7, 2012

Entrada de datos

>>> numeros = input(“Lista: ”)

Nombre:

>>> del numeros[-1]

>>> numeros

[7, 8]

[7, 8, 9]

Wednesday, March 7, 2012

Entrada de datos

>>> x = [1, 2]

>>> x.append(input())

>>> x

[1, 2, 18]

18

Wednesday, March 7, 2012

Entrada de datos

>>> x = [7, 8]

>>> x.append(input(“elemento: ”))

elemento:

NameError: name 'y' is not defined

y

La mayor parte del tiempo necesitamos raw_input

Wednesday, March 7, 2012

Estructuras de control

if

for

while

Necesitamos modificar el flujo de ejecución del programa en función de los datos

Wednesday, March 7, 2012

if

>>> if 2 > 1:

... print “obviamente”

...

obviamente

Evalúa una condición y ejecuta un bloque de instrucciones si es verdadera

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 condición es verdadera

• Python utiliza el indentado para reconocer las líneas que forman un bloque de instrucciones

Wednesday, March 7, 2012

if - else

>>> if 7 % 2 == 0:

... print “es par”

... else:

... print “no par”

...

“no par”

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)

Wednesday, March 7, 2012

if - elif - else

• Para elegir entre más de dos opciones

• Python ignora las demás 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

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

... print i

...

1

2

3

Itera sobre los elementos de una secuencia

Wednesday, March 7, 2012

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.

• ¿Cómo ejecutamos un bloque n veces?

Wednesday, March 7, 2012

range(n)

>> range(7)

[0, 1, 2, 3, 4, 5, 6]

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

Wednesday, March 7, 2012

range(start, n)

>> range(3, 7)

[3, 4, 5, 6]

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

Wednesday, March 7, 2012

range(start, n, step)

>>> range(1, 11, 2)

[1, 3, 5, 7, 9]

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

Wednesday, March 7, 2012

for

>>> for i in range(3):

... print “hola”

...

hola

hola

hola

Wednesday, March 7, 2012

for (en C++)

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

cout << i << endl;

Wednesday, March 7, 2012

for

for i in range(10):

print iNo utilizamos condiciones de inicio, parada e incremento, sino que

especificamos claramente qué elementos se utilizan

Más expresivo y seguro

Wednesday, March 7, 2012

for

>>> for letra in “Sara”:

... print letra

...

S

a

r

a

Wednesday, March 7, 2012

¿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

Wednesday, March 7, 2012

for

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

>>> for i in range(len(numeros)):

... print i, “->”, numeros[i]

Wednesday, March 7, 2012

enumerate(sec)

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

... print i, “->”, num

Permite iterar simultáneamente sobre el índice y sobre el elemento de una secuencia

Wednesday, March 7, 2012

while

>>> x = 1

>>> while x < 10:

... x = x + 1

... print x

...

10

Ejecuta el bucle mientras la condición sea cierta

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:

... x = x + 1

...

Wednesday, March 7, 2012

¿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

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

... if i % 2 == 0:

... break

... print i

...

2

Abandona el bucle inmediatamente

Wednesday, March 7, 2012

break

>>> x = 15

>>> while True:

... if x % 9 == 0:

... print x

... break

... x = x + 1

...

18

Wednesday, March 7, 2012

continue

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

... if i % 2 == 0:

... continue

... print i

...

1

3

Salta inmediatamente a la siguiente iteración

Wednesday, March 7, 2012

continue

>>> while True:

... x = int(raw_input())

... if not x % 2 == 0:

... continue

... print “es par!”

Wednesday, March 7, 2012

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

Ejerciciosif, for, while y range()

Wednesday, March 7, 2012