Diferencia entre revisiones de «Usuario:Lmorillas/intropyaytozgz/inmersionpython»

De WikiEducator
Saltar a: navegación, buscar
 
(18 revisiones intermedias por el mismo usuario no mostrado)
Línea 1: Línea 1:
 +
{{MiTitulo| Inmersión en Python }}
 
{{#widget:Slides}}  
 
{{#widget:Slides}}  
  
Línea 50: Línea 51:
 
* dir(<objeto>)
 
* dir(<objeto>)
 
* help(<objeto>.<metodo>)
 
* help(<objeto>.<metodo>)
 +
</div>
 +
<div class="slide">
 +
== Tipos: enteros, reales, cadenas, booleanos ==
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
Línea 81: Línea 85:
 
<source lang="python" enclose="div">
 
<source lang="python" enclose="div">
 
>>> nombre = 'Luis'
 
>>> nombre = 'Luis'
>>> nombre.upper()
+
>>> apellido = "GARCÍA"
'LUIS'
+
>>> ficha = """Nombre: Luis
>>> nombre
+
Apellido: GARCÍA"""
'Luis'
+
>>> print ficha
>>> nombre[0] = 'l'
+
Nombre: Luis
 
+
Apellido: GARCÍA
Traceback (most recent call last):
+
  File "<pyshell#13>", line 1, in <module>
+
    nombre[0] = 'l'
+
TypeError: 'str' object does not support item assignment
+
 
</source>
 
</source>
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
=== Formato de cadenas ===
+
 
 +
=== FORMATO DE CADENAS ===
 
<source lang="python">
 
<source lang="python">
 
# viejo estilo  
 
# viejo estilo  
 
>>> "%s %s" %('hello', 'world')
 
>>> "%s %s" %('hello', 'world')
 
'hello world'
 
'hello world'
 +
 +
>>> values = {'vegetable': 'chard', 'fruit': 'nectarine'}
 +
>>> 'I love %(vegetable)s and I love %(fruit)s.' % values
 +
'I love chard and I love nectarine.'
  
 
# Nuevo estilo. PEP 3101
 
# Nuevo estilo. PEP 3101
Línea 105: Línea 110:
 
</source>
 
</source>
 
</div>
 
</div>
 +
<div class="slide">
 +
=== OPERACIONES CON CADENAS ===
 +
* http://docs.python.org/2/library/stdtypes.html#string-methods
 +
<source lang="python">
 +
>>> usuario = "Nombre, Apellido"
 +
>>> usuario.find('Apellido')
 +
8
 +
>>> usuario.find('Apellidos')
 +
-1
 +
>>> usuario.replace('Apellido', 'Apellidos')
 +
'Nombre, Apellidos'
 +
>>> usuario.upper()
 +
'NOMBRE, APELLIDO'
 +
>>> "    Nombre, Apellido      ".strip()
 +
'Nombre, Apellido'
 +
>>> usuario.split(',')
 +
['Nombre', ' Apellido']
 +
</source>
  
 +
</div>
 +
<div class="slide">
 +
 +
== Entrada / salida ==
 +
</div>
 +
<div class="slide">
 +
=== PRINT ===
 +
<br />
 +
<source lang="python">
 +
>>> print "Ayto"
 +
Ayto
 +
>>> print "Ayto", "Zaragoza"
 +
Ayto Zaragoza
 +
>>> print "Ayto" + " de " + "Zaragoza"
 +
Ayto de Zaragoza
 +
>>> print "%s %s - %d" % ("Ayto", "Zaragoza", 2012)
 +
Ayto Zaragoza - 2012
 +
</source>
 +
</div>
 
<div class="slide">
 
<div class="slide">
 
=== LECTURA INTERACTIVA ===
 
=== LECTURA INTERACTIVA ===
Línea 116: Línea 158:
  
 
<div class="slide">
 
<div class="slide">
=== Control de flujo ===
+
== Control de flujo ==
=== if ===
+
</div>
<source lang="python" line="GESHI_FANCY_LINE_NUMBERS" enclose="div">
+
<div class="slide">
 +
=== CONDICIONALES: IF - ELSE ===
 +
<br />
 +
<source lang="python" enclose="div">
 
edad = int(raw_input('Introduce tu edad: '))
 
edad = int(raw_input('Introduce tu edad: '))
 
if edad < 18:
 
if edad < 18:
Línea 128: Línea 173:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
=== for ===
+
=== FOR ===
<source lang="python" enclose="div">
+
<br />
>>> for letra in 'Me llamo Luis':
+
<source lang="python">
print letra,
+
>>> for num in (1, 2, 3):
 
+
print num**2,
M e  l l a m o  L u i s
+
1 4 9
 
</source>
 
</source>
 
+
</div>
{{Tip|Evitad estilo '''java'''}}
+
<div class="slide">
 +
=== RECORRER SIN INDICES ===
 
<source lang="python">
 
<source lang="python">
 
animals = ["cat", "dog", "bird"]
 
animals = ["cat", "dog", "bird"]
Línea 146: Línea 192:
 
for animal in animals:
 
for animal in animals:
 
     print animal
 
     print animal
 +
</source>
 +
</div>
 +
<div class="slide">
 +
=== FOR - ENUMERATE ===
 +
 +
<source lang="python">
 
# o si hace falta enumerar
 
# o si hace falta enumerar
 
for n, animal in enumerate(animals):
 
for n, animal in enumerate(animals):
Línea 152: Línea 204:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
=== range ===
+
=== RANGE ===
 +
<br />
 
<source lang="python" enclose="div">
 
<source lang="python" enclose="div">
 
>>> range(5, 10)
 
>>> range(5, 10)
Línea 163: Línea 216:
  
 
Para repetir 10 veces algo:
 
Para repetir 10 veces algo:
<source lang="python" line="GESHI_FANCY_LINE_NUMBERS" enclose="div">
+
<source lang="python" >
 
for x in range(10):
 
for x in range(10):
 
     print 'Hola'
 
     print 'Hola'
Línea 169: Línea 222:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
=== while ===
+
=== WHILE ===
<source lang="python" line="GESHI_FANCY_LINE_NUMBERS" enclose="div">
+
 
 +
<source lang="python" enclose="div">
 
while temperatura > 24:
 
while temperatura > 24:
 
     ventilador_encendido
 
     ventilador_encendido
Línea 176: Línea 230:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
=== break, continue, else ===
+
=== BREAK, CONTINUE, ELSE ===
 +
<br />
 
<source lang="python" enclose="div">
 
<source lang="python" enclose="div">
 
>>> for n in range(2, 10):
 
>>> for n in range(2, 10):
Línea 189: Línea 244:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
=== Funciones ===
+
== Funciones ==
=== Definición ===
+
</div>
* Nueva tabla de nombres
+
<div class="slide">
<source lang="python" line="GESHI_FANCY_LINE_NUMBERS" enclose="div">
+
=== DEFINICIÓN ===
 +
 
 +
<source lang="python">
 
def al_cubo(num):
 
def al_cubo(num):
 
     return num ** 3
 
     return num ** 3
Línea 198: Línea 255:
 
</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):
 
     return num ** exp
 
     return num ** exp
 
</source>
 
</source>
 +
</div>
 +
<div class="slide">
 +
===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 215: Línea 275:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
=== Estructuras de datos ===
+
== Estructuras de datos ==
=== Listas ===
+
</div>
Secuencias ordenadas. Dinámicas. Acceso por índice. Heterogéneas. Corchetes.
+
<div class="slide">
<source lang="python" line="GESHI_FANCY_LINE_NUMBERS" enclose="div">
+
=== LISTAS ===
 +
* Secuencias ordenadas.  
 +
* Dinámicas.  
 +
* Acceso por índice.  
 +
* Heterogéneas.  
 +
* Corchetes.
 +
<source lang="python" >
 +
>>> [11, 22, 33]
 +
>>> ['aa', 'bb', 'cc', ]
 +
>>> [100, 'manzana', 200, 'banana', ] # Última coma opcional
 +
</source>
 +
 
 +
</div>
 +
<div class="slide">
 +
===OPERACIONES CON LISTAS===
 +
<source lang="python" >
 
notas = [8, 7, 4.5, 6]
 
notas = [8, 7, 4.5, 6]
 
notas.append(9)
 
notas.append(9)
Línea 226: Línea 301:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
=== Tuplas ===
+
 
 +
=== TUPLAS ===
 
Estáticas. Paréntesis.
 
Estáticas. Paréntesis.
 +
<source lang="python">
 +
months = ('January','February','March','April','May','June',\
 +
    'July','August','September','October','November','  December')
 +
usuario = ('Luis Martínez', 24, True)
 +
</source>
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
=== Diccionarios ===
+
=== DICCIONARIOS ===
 
<source lang="python">
 
<source lang="python">
 
>>> letras = {}
 
>>> letras = {}
Línea 244: Línea 325:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
=== Ficheros ===
 
<source lang="python">
 
  
 +
== Ficheros ==
 +
</div>
 +
 +
<div class="slide">
 +
=== OPEN ===
 +
<source lang="python">
 
# viejo estilo
 
# viejo estilo
 
fin = open("foo.txt")
 
fin = open("foo.txt")
Línea 260: Línea 345:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
=== Excepciones===
+
== Excepciones==
 +
</div>
 +
<div class="slide">
 +
=== TRY/EXCEPT===
 
<source lang="python">
 
<source lang="python">
 
try:
 
try:
Línea 267: Línea 355:
 
     # tratar excepción
 
     # tratar excepción
 
</source>
 
</source>
Más complejo:
+
</div>
 +
<div class="slide">
 +
=== FINALLY===
 
<source lang="python">
 
<source lang="python">
 
try:
 
try:
Línea 280: Línea 370:
 
</div>
 
</div>
 
<div class="slide">
 
<div class="slide">
=== Importar módulos ===
+
== Módulos ==
 +
</div>
 +
<div class="slide">
 +
=== IMPORT ===
 
<source lang="python">
 
<source lang="python">
 
import math
 
import math

Última revisión de 00:20 5 feb 2013

¿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.
  • Baterías incluidas

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

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

Tipos: enteros, reales, cadenas, booleanos

OPERACIONES CON NÚMEROS

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

>>> 5/2
2
>>> 5/2.
2.5
>>> 10 ** 10
10000000000L

CONVERSIÓN

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

CADENAS

Inmutables. iterables.

>>> nombre = 'Luis'
>>> apellido = "GARCÍA"
>>> ficha = """Nombre: Luis
Apellido: GARCÍA"""

>>> print ficha
Nombre: Luis
Apellido: GARCÍA

FORMATO DE CADENAS

# viejo estilo 
>>> "%s %s" %('hello', 'world')
'hello world'
 
>>> values = {'vegetable': 'chard', 'fruit': 'nectarine'}
>>> 'I love %(vegetable)s and I love %(fruit)s.' % values
'I love chard and I love nectarine.'
 
# Nuevo estilo. PEP 3101
>>> "{0} {1}".format('hello', 'world')
'hello world'

OPERACIONES CON CADENAS

>>> usuario = "Nombre, Apellido"
>>> usuario.find('Apellido')
8
>>> usuario.find('Apellidos')
-1
>>> usuario.replace('Apellido', 'Apellidos')
'Nombre, Apellidos'
>>> usuario.upper()
'NOMBRE, APELLIDO'
>>> "    Nombre, Apellido      ".strip()
'Nombre, Apellido'
>>> usuario.split(',')
['Nombre', ' Apellido']

Entrada / salida

PRINT


>>> print "Ayto"
Ayto
>>> print "Ayto", "Zaragoza"
Ayto Zaragoza
>>> print "Ayto" + " de " + "Zaragoza"
Ayto de Zaragoza
>>> print "%s %s - %d" % ("Ayto", "Zaragoza", 2012)
Ayto Zaragoza - 2012

LECTURA INTERACTIVA

nombre = raw_input('Introduzca su nombre: ')
edad = raw_input('Introduzca la edad: ')
edad = int(edad)

Control de flujo

CONDICIONALES: IF - ELSE


edad = int(raw_input('Introduce tu edad: '))
if edad < 18:
    print 'Menor de edad'
else:
    print 'Mayor de edad'

No hay instrucción switch

FOR


>>> for num in (1, 2, 3):
	print num**2,
1 4 9

RECORRER SIN INDICES

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

Mejor:

for animal in animals:
    print animal

FOR - ENUMERATE

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

for x in range(10):
    print 'Hola'

WHILE

while temperatura > 24:
    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

def al_cubo(num):
    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.
>>> [11, 22, 33]
>>> ['aa', 'bb', 'cc', ]
>>> [100, 'manzana', 200, 'banana', ] # Última coma opcional

OPERACIONES CON LISTAS

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

TUPLAS

Estáticas. Paréntesis.

months = ('January','February','March','April','May','June',\
    'July','August','September','October','November','  December')
usuario = ('Luis Martínez', 24, True)

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

OPEN

# 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/EXCEPT

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

FINALLY

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

Módulos

IMPORT

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