Apuntes de programación en python

Tengo la manía, buena o mala, de hacer una serie de apuntes rápidos con algún que otro ejemplo para recordar lo básico de un lenguaje de programación.

En este caso se trata de Python y son unos apuntes que hice hace un par de días para mi clase de programción básica.
Nota: Dado que los apuntes perdieron la tabulación en los códigos, podeis bajar el .odt aquí

Python

Sentencias básicas

#! /usr/bin/env python

Para ejecutar en sistemas unix

# -*- coding: utf-8 -*-

Formata las salidas en utf-8 (supuestamente)

#asignación múltiple:

a, b = 0, 1

Asigna a a el valor 0 y a b el valor 1

#cadena cruda:
hola = r"Esta es una larga cadena con \n\

varias líneas de texto. Como en c :D”

Las cadenas crudas se saltan todos los escapes como \n. Se notifican con la letra ‘r’ antes de las comillas.

#objeto unicode:
hola = u"las palabras esdrújulas llevan ascentos Â"

Igual que la cadena cruda, solo que formata la cadena a unicode

#repetir palabras.

palabra = 'Ayuda '

print palabra*5

Cuando se intenta multiplicar una string produce una salida múltiple de la string. En este caso repite Ayuda 5 veces.

#algo strange con concatenaciones:

print 'cad' 'ena' #funciona

La concatenación de diferentes tipos de datos necesita su operador de concatenación, pero la concatenación de dos cadenas no necesita llevar el operador.

#strip strings

num = '1234'

print num[0:2] #2 primeros carácteres-> 12

print num[2:] #2 ultimos carácteres-> 34

print num[-1] #último carácter-> 4

La forma de operar con strings es bastante sencilla, se tratan como en C (var[<n caracter>]) con la característica de que se puede elegir la longitud de caracteres o si empezar por el final.

<variable>[<inicio>:<cantidad_de_caracteres>]

#listas [parecido al array?]

lista = ['pan', 'huevos', 100, 1234]

print lista[1:3] #['huevos', 100]

En python se pueden crear listas y tratar con ellas como si de cadenas de string o arrays se tratase. Solo se le ha de notificar desde que elemento a que elemento queremos mostrar.

<variable_de_lista>[<primer_elemento>:<ultimo_elemento>]

También podemos anidar listas.

#listas de listas

lista2 = ['uno', 'dos', lista, 'tres']

#Crear listas de numeros:

print range(0, 21, 10)

print range(10,-200, -15)

Si queremos crear listas de números podemos usar la función range.

range(<inicio>,<fin>,<incremento>)

#entrada de datos

x = raw_input("Ingresa un entero: ")

Para que el usuario pueda ingresar datos se usa la función raw_input();

raw_input(<texto a mostrar>)

#Conversión de datos

x = int(raw_input("Ingresa un entero: "))

El ejemplo transforma la entrada a entero, ya que sino sería una string o char. También existe la función float()

Control de flujo

#Sentencia IF

x = int(raw_input("Ingresa un entero: "))

if x < 0:

print 'Numero negativo'

elif x == 0:

print 'Cero'

elif x == 1:

print 'Uno'

else:

print 'Mayor a uno'

Python no opera con los brackets sinó que lo hace por tabulación, todo lo que esté a continuación de un condicional (bucle, funcion) de forma tabulada pertenece a esa condicional.

Los operadores lógicos son los mismos.

Como nota recordar que no es else if sinó elif

#for: para iteraciones con elementos.

a = ['gato', 'perro', 'pajaro', 'delfin']

for x in a:

print x, len(x) #x es como a[x] y len(x) como len(a[x])

El for se usa especialmente para hacer iteraciones con elementos. En este caso guardamos en x los valores de la lista a. En un array normal podria entenderse como a[x]. Si aplicamos la función len() sobre x obtenemos el equivalente a len(a[x]).

#for: interar con elementos, con range()

a = ['Mary', 'tenia', 'un', 'corderito']

for i in range(len(a)):

print i, a[i]

En este caso usamos la función range() para crear una lista según la cantidad de elementos de la lista a que sacamos con len().

NOTA: esto es aburrirse mucho, que ganas…

#break y else para bucles – Numeros primos.

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 #salta el bucle en el step actual.

else:

print n,'es un numero primo'

En este ejemplo se buscan números primos entre 2 y 10 para introducir dos funciones break y else (para bucles).

En el ejemplo se crean dos listas. La segunda (x) tiene como inicio 2 y como límite el valor del contador de la primera lista (x) que tiene como inicio 2 y límite 10.

Suponiendo que x es 3 y n 9:

Hacemos la división mod de 9/2 = 1. Como no entra en el if el break no se ejecuta y sigue el programa.

Suponiendo que n fuese 2, nunca se entraría al if y por lo tanto, al acabar el for de x y no encontrarnos con un break entraríamos en la sentencia else.

Si fuese el caso de n = 4 al entrar al if ejecutaríamos el break y por lo tanto se acabaría el for de x y aumentaríamos el contador de for n.

Si ejecutásemos la sentencia continue en vez de break y después del if tuviésemos más contenido produciríamos un resultado similar al break.

Funciones

Las funciones trabajan de manera muy similar a otro lenguaje.

def fib(n): #serie de Fibonacci hasta n

 """ [Documentación de la función] """

a, b = 0, 1

while b < n:

print b,

a, b = b, a+b

fib(2000)

La función se declara con def.

Como curiosidad se recomienda crear una documentación de la función con “““ ”””.

El ejemplo calcula la serie de Fibonacci hasta el numero que le pasemos, en este caso 2.000.

Asigna 0 a la variable a y 1 a b.

Mientras b sea menor que n (2.000), imprimiremos b (la , es para no producir un \n)

Y asignaremos a la variable a el valor b y a b el valor de a+b.

Las funciones siempre devuelven un valor, cuando no se les asigna un return para hacerlo devuelven un valor none.

El mismo ejemplo imprimiendolos en lista y con return

def fib2(n):

 """ Serie de Fibonacci hasta n con return y en lista """

lista = []

a, b = 0, 1

while b < n:

lista.append(b)

a, b = b, a+b

return lista

print fib2(200)

#Valores por omision

def login(prompt, reintentos = 4, queja = 'si o no, por favor!'):

while True:

ok = raw_input(prompt)

if ok in ('s', 'S', 'si', 'SI'):

return True

if ok in ('n', 'no', 'No', 'NO'):

return False

reintentos = reintentos - 1

if reintentos < 0:

print 'fail'

break;

print queja

#login(‘Introduce s/n:’, 2) #cambiamos el num de intetnos!

#o: login(‘Introduce s/n:’)

Los valores por omisión funcionan de forma similar a C, si se proporciona un valor por omisión el parámetro se convierte en optativo y toma dicho valor si no se introduce.

En python podemos declarar directamente un valor optativo sin declarar los previos:

#login(‘introduce s/n’, queja=’venga ya…’)

En este caso no hemos declarado el valor reintentos que en C sí sería necesario.

“””Los valores por omision que son variables se evaluan una única vez”””

i = 5

def f(arg=i):

print arg #salida: 5

i= 6

f()

Eso quiere decir que cuando se declaran variables como valores por omisión el script asignará el valor que la variable tenía en el momento que se leyó el valor y no cada vez que se le llame.

Sin embargo, cuando el valor por omisión es un objeto mutable, lista, se reevalua cada vez que se llama la función

#desempaquetar una lista

args = [3, 6]

print range(*args) #[3, 4, 5]

En este caso tenemos una lista empaquetada del 3 al 5 para desempaquetarla usamos range() y *.

#desempaquetar argumentos de diccionario:

def loro(tension, estado, accion):

print '-- Este loro no va a', accion, 'si le aplicas', tension, 'voltios.'

print 'Esta', estado, '!'

d = {"tension": "cuatro millones", "estado": "demacrado", "accion": "VOLAR"}

loro(**d)

Cuando tenemos un diccionario:

{ <clave> : <valor>, <clave> : <valor> }

Y queremos pasarlo como argumentos a una función podemos desempaquetarlo de la misma forma que las listas (**)

Convirtiéndolo en <variable> = <valor>

#Formas con lambda: Pequeñas estructuras.

def hacer_incrementador(n):

return lambda x: x + n

f = hacer_incrementador(10)

print '\n',f(0) #10

print f(1) #11

print f(10), '\n' #21

También se pueden hacer cálculos con lambda.

De esta forma, cuando damos valor a f la función suma x+n (nada + 10) dejando x=10.

En el primer printf se mantiene igual, en el segundo se le suma uno x+n(10+1) dejando x=11

y en el tercer printf se le suma 10 más, x=21.

La documentación que creamos de las funciones podemos verla de la siguiente forma:

def mi_funcion():

"""Funcion que no hace nada.

Esta función no hace nada...

"""

pass

print '\n', mi_funcion.__doc__

Nota: pass es una función que no hace nada, no se salta, no se entran datos.


Así nos han encontrado!

  • apuntes python

2 Responses to Apuntes de programación en python

  1. admin dice:

    Ya esta con python, muy bónito, pero que programas en linux con python ??

    #! /usr/bin/env python

    Eso de que perdio la tabulación ummm, instalare un mod de esos que le ponen códigos de colores según el lenguaje, que creo que en este blog hara falta.

    Tendrá que suscribirme al feed, por que hasta ahora me di cuenta del post xd

  2. admin dice:

    Bueno edite tu código un poco… para probar el nuevo plugin.. si no te gusta así te lo dejo como estaba..

    Aunque me falta mas de la mitad y ponerle la tabulaciones a ver si van :P

    Pero se ve mejor así ¬¬

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">