Diferencia entre revisiones de «Curso Python DGA 2011/inmersion python/contenidos/slides1»

De WikiEducator
Saltar a: navegación, buscar
 
(4 revisiones intermedias por el mismo usuario no mostrado)
Línea 9: Línea 9:
 
</div>  
 
</div>  
 
<div class="slide">
 
<div class="slide">
==¿Python?==
+
===¿Python?===
{{Puntos clave|Title=Peculiaridades|
+
 
* Interpretado, pero compilado a bytecode.
 
* Interpretado, pero compilado a bytecode.
 
* Tipado dinámico, pero fuertemente tipado
 
* Tipado dinámico, pero fuertemente tipado
Línea 20: Línea 19:
 
* Más ... para abrir el apetito: http://docs.python.org.ar/tutorial/appetite.html
 
* Más ... para abrir el apetito: http://docs.python.org.ar/tutorial/appetite.html
 
* Importancia creciente de python en la educación.
 
* Importancia creciente de python en la educación.
}}
 
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
 
 
{{Recursos de la Web|Title=Ampliación|
 
{{Recursos de la Web|Title=Ampliación|
 
Charla Python@Google: http://www.google.com/events/io/2011/sessions/python-google.html
 
Charla Python@Google: http://www.google.com/events/io/2011/sessions/python-google.html
Línea 29: Línea 26:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
== Instalación ==
+
=== Instalación ===
 +
<br />
 
{{Recursos de la Web|Title=Echa un vistazo|
 
{{Recursos de la Web|Title=Echa un vistazo|
 
Guía de instalación y uso: http://docs.python.org/using/index.html (en inglés)
 
Guía de instalación y uso: http://docs.python.org/using/index.html (en inglés)
Línea 41: Línea 39:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
== Mi primer programa ==
+
=== Mi primer programa ===
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
==  Ejecutables linux ==
+
===  Ejecutables linux ===
 
<source lang="python">
 
<source lang="python">
 
#!/usr/bin/env python
 
#!/usr/bin/env python
Línea 55: Línea 53:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
== Herramientas para programar ==
+
=== Herramientas para programar ===
 
<br />
 
<br />
 
{{Recursos de la Web|
 
{{Recursos de la Web|
Línea 63: Línea 61:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
== El intérprete ==
+
=== El intérprete ===
 
<source lang="python" enclose="div">
 
<source lang="python" enclose="div">
 
>>> print "Hola, mundo"
 
>>> print "Hola, mundo"
Línea 78: Línea 76:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
== Un programa que hace algo ==
+
=== Un programa que hace algo ===
  
 
<source lang="python" line="GESHI_FANCY_LINE_NUMBERS" enclose="div">
 
<source lang="python" line="GESHI_FANCY_LINE_NUMBERS" enclose="div">
Línea 100: Línea 98:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
== Sobre el estilo ==
+
=== Sobre el estilo ===
 
http://docs.python.org.ar/tutorial/controlflow.html#intermezzo-estilo-de-codificacion
 
http://docs.python.org.ar/tutorial/controlflow.html#intermezzo-estilo-de-codificacion
 
* minúsculas
 
* minúsculas
Línea 110: Línea 108:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
== Introspección ==
+
=== Introspección ===
 
* dir(<objeto>)
 
* dir(<objeto>)
 
* help(<objeto>.<metodo>)
 
* help(<objeto>.<metodo>)
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
== Operaciones con números ==
+
=== Operaciones con números ===
 
Las básicas como en otros lenguajes. Operaciones matemáticas '''import math'''.
 
Las básicas como en otros lenguajes. Operaciones matemáticas '''import math'''.
 
Observa:
 
Observa:
Línea 130: Línea 128:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
== Casting ==
+
=== Casting ===
 
<source lang="python">
 
<source lang="python">
 
>>> num = '2.3'
 
>>> num = '2.3'
Línea 142: Línea 140:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
== Cadenas ==
+
=== Cadenas ===
 
Inmutables. iterables. Cadenas de bytes y unicode.
 
Inmutables. iterables. Cadenas de bytes y unicode.
 
<source lang="python" enclose="div">
 
<source lang="python" enclose="div">
Línea 159: Línea 157:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
== Formato de cadenas ==
+
=== Formato de cadenas ===
 
<source lang="python">
 
<source lang="python">
 
# viejo estilo  
 
# viejo estilo  
Línea 171: Línea 169:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
== Lectura interactiva ==
+
=== Lectura interactiva ===
 
<source lang="python" enclose="div" line="GESHI_FANCY_LINE_NUMBERS" highlight="3">
 
<source lang="python" enclose="div" line="GESHI_FANCY_LINE_NUMBERS" highlight="3">
 
nombre = raw_input('Introduzca su nombre: ')
 
nombre = raw_input('Introduzca su nombre: ')
Línea 179: Línea 177:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
== Control de flujo ==
+
=== Control de flujo ===
== if ==
+
=== if ===
 
<source lang="python" line="GESHI_FANCY_LINE_NUMBERS" enclose="div">
 
<source lang="python" line="GESHI_FANCY_LINE_NUMBERS" enclose="div">
 
edad = int(raw_input('Introduce tu edad: '))
 
edad = int(raw_input('Introduce tu edad: '))
Línea 191: Línea 189:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
== for ==
+
=== for ===
 
<source lang="python" enclose="div">
 
<source lang="python" enclose="div">
 
>>> for letra in 'Me llamo Luis':
 
>>> for letra in 'Me llamo Luis':
Línea 215: Línea 213:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
== range ==
+
=== range ===
 
<source lang="python" enclose="div">
 
<source lang="python" enclose="div">
 
>>> range(5, 10)
 
>>> range(5, 10)
Línea 232: Línea 230:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
== while ==
+
=== while ===
 
<source lang="python" line="GESHI_FANCY_LINE_NUMBERS" enclose="div">
 
<source lang="python" line="GESHI_FANCY_LINE_NUMBERS" enclose="div">
 
while temperatura > 24:
 
while temperatura > 24:
Línea 239: Línea 237:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
== break, continue, else ==
+
=== break, continue, else ===
 
<source lang="python" enclose="div">
 
<source lang="python" enclose="div">
 
>>> for n in range(2, 10):
 
>>> for n in range(2, 10):
 
...    for x in range(2, n):
 
...    for x in range(2, n):
...        if n % x == 0:
+
...        if n % x === 0:
 
...            print n, 'es igual a', x, '*', n/x
 
...            print n, 'es igual a', x, '*', n/x
 
...            break
 
...            break
Línea 252: Línea 250:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
== Funciones ==
+
=== Funciones ===
== Definición ==
+
=== Definición ===
 
* Nueva tabla de nombres
 
* Nueva tabla de nombres
 
<source lang="python" line="GESHI_FANCY_LINE_NUMBERS" enclose="div">
 
<source lang="python" line="GESHI_FANCY_LINE_NUMBERS" enclose="div">
Línea 261: Línea 259:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
== Argumentos por defecto ==
+
=== Argumentos por defecto ===
 
<source lang="python">
 
<source lang="python">
 
def eleva(num, exp=2):
 
def eleva(num, exp=2):
Línea 267: Línea 265:
 
</source>
 
</source>
  
==Argumentos clave:valor ==
+
===Argumentos clave:valor ===
 
<source lang="python">
 
<source lang="python">
 
def ficha_empleado(nombre, nif, edad):
 
def ficha_empleado(nombre, nif, edad):
Línea 278: Línea 276:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
== Estructuras de datos ==
+
=== Estructuras de datos ===
== Listas ==
+
=== Listas ===
 
Secuencias ordenadas. Dinámicas. Acceso por índice. Heterogéneas. Corchetes.
 
Secuencias ordenadas. Dinámicas. Acceso por índice. Heterogéneas. Corchetes.
 
<source lang="python" line="GESHI_FANCY_LINE_NUMBERS" enclose="div">
 
<source lang="python" line="GESHI_FANCY_LINE_NUMBERS" enclose="div">
Línea 289: Línea 287:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
== Tuplas ==
+
=== Tuplas ===
 
Estáticas. Paréntesis.
 
Estáticas. Paréntesis.
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
== Diccionarios ==
+
=== Diccionarios ===
 
<source lang="python">
 
<source lang="python">
 
>>> letras = {}
 
>>> letras = {}
Línea 307: Línea 305:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
== Ficheros ==
+
=== Ficheros ===
 
<source lang="python">
 
<source lang="python">
  
Línea 323: Línea 321:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
== Excepciones==
+
=== Excepciones===
 
<source lang="python">
 
<source lang="python">
 
try:
 
try:
Línea 343: Línea 341:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
== Importar módulos ==
+
=== Importar módulos ===
 
<source lang="python">
 
<source lang="python">
 
import math
 
import math
Línea 360: Línea 358:
  
 
<div id="weSlideLogo" class="nav">
 
<div id="weSlideLogo" class="nav">
http://python.org/images/python-logo.gif
+
'''Inmersión en Python''' [[image:Python-logo.png|200px]]
 
+
 
</div>
 
</div>

Última revisión de 18:29 1 sep 2011

¿Python?

  • Interpretado, pero compilado a bytecode.
  • Tipado dinámico, pero fuertemente tipado
  • Multiplataforma
  • Orientado a objetos
  • Sintáxis sencilla pero muy robusta.
  • Fácil de escribir, de leer y de mantener.
  • Muy potente (baterías incluidas) y gran soporte.
  • Más ... para abrir el apetito: http://docs.python.org.ar/tutorial/appetite.html
  • Importancia creciente de python en la educación.

Instalación



Icon inter.gif

Echa un vistazo

Guía de instalación y uso: http://docs.python.org/using/index.html (en inglés)



Icon activity.jpg

Actividad

  • Comprueba que está instalado python en el sistema (¿qué versión?)
  • Si no está instalado, descarga e instala la última versión estable de la rama 2.x




Mi primer programa

Ejecutables linux

#!/usr/bin/env python
$ chmod +x hello.py
$ ./hello.py

Herramientas para programar



Icon inter.gif

Recursos de la Web

Listado completo de recursos disponibles: http://wiki.python.org/moin/IntegratedDevelopmentEnvironments


Nosotros vamos a ir utilizando diferentes entornos de desarrollo a lo largo del curso.

El intérprete

>>> print "Hola, mundo"
Hola, mundo
>>> impuesto = 12.5 / 100
>>> precio = 100.50
>>> precio * impuesto
12.5625
>>> precio + _
113.0625
>>> round(_, 2)
113.06

Un programa que hace algo

  1. # No declaramos variables, ponemos nombres a objetos
  2. coches = 100
  3. capacidad_coche = 4.0
  4. conductores = 30
  5. pasajeros = 90
  6. coches_no_conducidos = coches - conductores
  7. coches_conducidos = conductores
  8. capacidad_real = coches_conducidos * capacidad_coche
  9. media_pasajeros_coche = pasajeros / coches_conducidos
  10.  
  11. print "Hay", coches, "coches disponibles."
  12. print "Tenemos sólo ", conductores, "conductores disponibles."
  13. print "Habrá", coches_no_conducidos, "coches vacíos hoy."
  14. print "Podemos transportar", capacidad_real, "personas hoy."
  15. print "Tenemos", pasajeros, "pasajeros para transportar."
  16. print "Tenemos que poner una media de", media_pasajeros_coche, "por coche hoy."

Sobre el estilo

http://docs.python.org.ar/tutorial/controlflow.html#intermezzo-estilo-de-codificacion

  • minúsculas
  • guiones bajo_entre_palabras
  • no pueden comenzar con números
  • ni se pueden usar palabras reservadas (file, assert, class, def
Icon present.gif
Tip: Mirad PEP8


Introspección

  • dir(<objeto>)
  • help(<objeto>.<metodo>)

Operaciones con números

Las básicas como en otros lenguajes. Operaciones matemáticas import math. Observa:

# Cuidado!
>>> 5/2
2
>>> 5/2.
2.5
# Conversión automática
>>> 10 ** 10
10000000000L

Casting

>>> num = '2.3'
>>> float(num)
2.3
>>> int('2')
2
>>> long('2')
2L

Cadenas

Inmutables. iterables. Cadenas de bytes y unicode.

>>> nombre = 'Luis'
>>> nombre.upper()
'LUIS'
>>> nombre
'Luis'
>>> nombre[0] = 'l'

Traceback (most recent call last):
  File "<pyshell#13>", line 1, in <module>
    nombre[0] = 'l'
TypeError: 'str' object does not support item assignment

Formato de cadenas

# viejo estilo 
>>> "%s %s" %('hello', 'world')
'hello world'
 
# Nuevo estilo. PEP 3101
>>> "{0} {1}".format('hello', 'world')
'hello world'

Lectura interactiva

  1. nombre = raw_input('Introduzca su nombre: ')
  2. edad = raw_input('Introduzca la edad: ')
  3. edad = int(edad)

Control de flujo

if

  1. edad = int(raw_input('Introduce tu edad: '))
  2. if edad < 18:
  3.     print 'Menor de edad'
  4. else:
  5.     print 'Mayor de edad'

No hay instrucción switch

for

>>> for letra in 'Me llamo Luis':
        print letra,

M e   l l a m o   L u i s
Icon present.gif
Tip: Evitad estilo java


animals = ["cat", "dog", "bird"]
for index in range(len(animals)):
    print index, animals[index]

Mejor:

for animal in animals:
    print animal
# o si hace falta enumerar
for n, animal in enumerate(animals):
    print n, animal

range

>>> range(5, 10)
[5, 6, 7, 8, 9]
>>> range(0, 10, 3)
[0, 3, 6, 9]
>>> range(-10, -100, -30)
[-10, -40, -70]

Para repetir 10 veces algo:

  1. for x in range(10):
  2.     print 'Hola'

while

  1. while temperatura > 24:
  2.     ventilador_encendido

break, continue, else

>>> for n in range(2, 10):
...     for x in range(2, n):
...         if n % x === 0:
...             print n, 'es igual a', x, '*', n/x
...             break
...     else:
...         # sigue el bucle sin encontrar un factor
...         print n, 'es un numero primo'

Funciones

Definición

  • Nueva tabla de nombres
  1. def al_cubo(num):
  2.     return num ** 3

Argumentos por defecto

def eleva(num, exp=2):
    return num ** exp

Argumentos clave:valor

def ficha_empleado(nombre, nif, edad):
    ...
ficha_empleado(nombre='Manuel', nif='123454P', edad=35)
 
def ficha_empleado(nombre, *args, **kargs):
    ...

Estructuras de datos

Listas

Secuencias ordenadas. Dinámicas. Acceso por índice. Heterogéneas. Corchetes.

  1. notas = [8, 7, 4.5, 6]
  2. notas.append(9)
  3. media = sum(notas)/len(notas)
  4. print media # 6.9

Tuplas

Estáticas. Paréntesis.

Diccionarios

>>> letras = {}
>>> for l in 'supercalifragilisticoespialidoso':
...     letras[l] = letras.get('l', 0) + 1
... 
>>> letras
{'a': 3, 'c': 3, 'e': 3, 'd': 4, 'g': 2, 'f': 2, 'i': 4, 'l': 3, 'o': 4, 'p': 3, 's': 4, 'r': 2, 'u': 1, 't': 3}
>>> letras.keys()
>>> letras.values()
>>> letras.items()

Ficheros

# viejo estilo
fin = open("foo.txt")
for linea in fin:
    # manipular linea
fin.close()
 
# mejor
with open('foo.txt') as fin:
    for linea in fin:
        # manipular linea

Excepciones

try:
    f = open("file.txt")
except IOError, e:
    # tratar excepción

Más complejo:

try:
    # código con riesgo
except Exception, e:
    # captura excepción
else:
    # si no ha saltado ninguna excepción
finally:
    # ejecuta al final

Importar módulos

import math
from math import sin
import longname as ln
 
math.sqrt(9)
sin(30)
ln(2)