Pequeña intro…
Bueno gente, nos volvemos a leer, como ya es tradición en underc0de, estos talleres que
vienen con la mejor onda, cualquier duda y/o crítica me escriben por MP en el foro, a
gh0st.c@[Link], y en Twitter pueden encontrarme como @Gh0st_C.
Bueno primero les dejo algunos consejos para mejorar su ánimo a la hora de programar,
después viene el contenido teórico, intento meterle la buena onda para que no sea aburrido.
Espero lo logre.
Consejos para la comodidad del
programador
Bien esto es algo muy personal, quiero decir, cada uno está cómodo de diferentes formas, pero acá
les dejo algunos consejos que por ahí les serán útiles.
# La comodidad de su asiento.
Fundamentalmente para que no tengan dolores.
# El espacio y orden en su escritorio.
Cuando digo escritorio me refiero al espacio físico (el mueble), en mi caso, soy muy desordenado, pero
intento mantener el orden, Sino cuando necesito algo me pongo histérico porque no lo encuentro. El
espacio para poder poner nuestras cosas del momento, como café, mate :D, chervecha (a lo
Amigacho :P) o lo que necesiten para mantenerse despiertos :P
# 0% Distracción
Este es un punto importante que lo estoy empezando a poner en práctica. Cerrar las redes sociales,
Ausentarse en el msn, etc.
Remarco este consejo porque cuando estamos programando lo que menos necesitamos es pensar en
otra cosa (como si estas estudiando), o sea, no podemos programar y Twittear boludeces.
En la distracción también esta el tema del lugar de trabajo (o hobbie), es preferible que su PC este
en una parte donde circule poca gente (Ej = El cuarto), en mi caso, no corro con esa suerte.
# Buenas referencias
Con esto quiero decir tener buenos manuales de referencia, para no andar con dudas ni jodiendo a
otros programadores con dudas pedorras.
En lo personal me gusta mucho "Python in a Nutshell", lo único está en ingles.
Lo pueden descargar desde Aquí…
[Link]
Revisión Del Paper Nº2
Antes de arrancar con nuevos conceptos voy a dejarles algunas aclaraciones que no hice en el paper
anterior.
# str(), int(), type () - Conversiones y llamadas.
Python posee funciones interesantes, estas, toman como argumento un valor o variable, que va entre
paréntesis, y retornan un resultado, llamado valor de retorno. Algunas de estas utilidades
interesantes son:
# type(), que retorna el tipo de dato de un objeto (int, list, str, etc.)
# Ejemplo
>>>type(['Hola', 'aguja'])
<type 'list'> #Retorno
>>> type(4)
<type 'int'>
>>> type(('Horoscopo','Horangel','Puras Giladas'))
<type 'tuple'>
# str(), que convierte cualquier tipo de dato en cadena.
# Ejemplo
Edad = 48
EdadStr = str(Edad)
print EdadStr
# int(), que toma un valor y lo convierte en entero, si es posible, o si no, se queja
# Ejemplo
>>>int('52')
52
>>>int('Twitter')
ValueError: invalid literal for int() with base 10: 'Twitter' #Acá esta el error
>>>int(45.23)
45
>>>int('45.23')
ValueError: invalid literal for int() with base 10: '45.23' #Da error porque para esto
#esta la función float()
# float() , que convierte números enteros y cadenas en números decimales
# Ejemplo
>>>float(52)
52.0
>>> float('52.56')
52.56
# Entrada de datos
Ya he mencionado el raw_input, pero no hable del input.
La diferencia está en que raw_input almacena los datos a modo de string, e input, aunque guarda todo
tipo de datos, hay que especificar que tipo de dato es.
# Ejemplo
Gh0st = raw_input('Edad ----> ')
#Aunque acá pongan un número (como es lógico) se va a guardar como cadena de texto.
# Ejemplo
>>> input ('Cantidad de talleres que lee ---->
')
Cantidad de talleres que lee ----> 5
5
Esto no da error porque es un número y esta especificado, pero sí metemos otro tipo de dato, como
string, ¿Que pasará?
>>> input ('Nick ----> ')
Nick ----> Gh0st
File "<string>", line 1, in <module>
NameError: name 'Gh0st' is not defined
Acá vemos el error, Gh0st es un string, no un número, para solucionarlo hay que indicarle a Python
que dato es.
>>> input ('Nick ----> ')
Nick ----> 'Gh0st'
'Gh0st'
En la segunda línea pueden ver que Gh0st esta entre comillas (simples o dobles), o sea , estamos
diciendo que el valor que ingresamos es un string.
En fin, para ahorrarnos líneas, si necesitamos que se ingrese un número a modo de int o float usamos
el input, para no tener que andar convirtiendo luego, pero si queremos a modo de string, usamos
raw_input.
# Variables 'Especiales'
Realmente les puse ese nombre porque se usan en pocos y especiales casos.
Variable Long (enteros): Mientras que en el tipo int, la variable puede almacenar números
31 31
desde -2 a 2 . Las variables tipo long guardan cualquier cantidad de cifras, solo lo limita la
cantidad de memoria que tenga la maquina.
Cuando asignamos un número a una variable (Ej: Varint = 4) esta se vuelve tipo int automáticamente, a
menos de que el número sea demasiado grande, entonces se convierte en long. Pero si queremos que
se almacena como long, siendo tan chico, hay que hacerlo de esta forma: Varint = 4L (esto no es
aconsejable, a menos que sea necesario, porque te come la memoria). También podemos expresar
estos valor en forma hexadecimal o como octal.
Variable Double (reales): Aunque existe la variable float(), cuando necesitamos más precisión
utilizamos double() (o sea, doble exactitud), con este tipo de variables podemos representar números
desde ±2,2250738585072020 x 10-308 hasta ±1,7976931348623157×10308.
También están las variables tipo decimal (que se usan en programación científica) y las de tipo
complex (es la variable de los números complejos, se almacena usando coma flotante y en una
estructura de C , y esta compuesta por dos variables del tipo double())
Teoría Paper Nº3
A partir de ahora arrancan los contenidos teóricos del paper N°3.
# Función range()
Como sucede con funciones como str(), type(), etc. ya vienen importadas cuando ejecutamos Python
y no hay que importarlas (import blabla) en este grupo también esta la función range(), que devuelve
una lista de números enteros, puede tener uno, dos o tres parámetros, estos van entre paréntesis.
# Ejemplo
Ranum = range(15,50)
print Ranum
Esto imprimira desde el número 15 hasta el numero 49 (se muestra hasta el número anterior a el
segundo parámetro)
Ranum = range(15,)
Sí no incluimos segundo argumento es como si ponemos Ranum = range(15), o sea que retorna una
lista de números desde el 0 hasta el catorce.
Con tres parámetros la cosa es diferente, los dos primeros indican el rango, y el 3 el salto entre
número y número, si el 3 número es negativo la lista es decreciente, si es positivo, creciente, pero el
primer parámetro tiene que ser más grande que el segundo para que la lista no este vacía.
Para que quede más claro, Ejemplo
# Ejemplo Creciente
Ranum = range(15,50,2)
print Ranum
Esto da una lista desde el 15 hasta el 50, saltando de 2 en dos, o sea:
[15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49]
# Ejemplo Decreciente
Ranum = range(50,15,-2)
print Ranum
Esto da:
[50, 48, 46, 44, 42, 40, 38, 36, 34, 32, 30, 28, 26, 24, 22, 20, 18, 16]
#Lista vacía
Ranum = range(14,50,-2)
print Ranum
Esto da :
[] #Lista vacía :S
# For
El Bucle For lo que hace es repetir un número predeterminado de veces una o varias instrucciones.
El bloque de instrucciones se llama cuerpo del bucle, y cada repetición, iteración.
# Ejemplo
For i in range(3):
print ‘Numero’
print i
Ese in que está ahí, lo verán más adelante
Esto imprime…
Numero
0
Numero
1
Numero
2
# Acumuladores
En muchos programas van a necesitar variables que acumulen valores, eso, lo aprenderemos ahora.
# Ejemplo
Operacion = 0
for op in range(15):
suma = suma + i
print 'la suma de los numeros es ', suma
# Contadores
También vas a precisar de variables que cuenten cuantas veces a ocurrido algo.
# Ejemplo
Masmasmas = 0
for b in range(150):
if i%5 == 0:
cuenta = cuenta + 1
print ‘Entre 0 y 150 hay’, cuenta, ‘múltiplos de 5’
Colecciones
# Listas
Las listas son colecciones ordenadas, no necesariamente del mismo tipo, que pueden ser modificadas
en el transcurso del script.
Hay muchas formas de crear una lista, pero la más fácil es indicar entre corchetes los elementos y
luego separarlos por comas
# Ejemplo
Talleres = ['Python', 'Php', 4, 'C ', True]
Para acceder a un Elemento X de la lista escribimos el nombre de la lista y luego la posición de
nuestro elemento entre corchetes. Recuerden que el primer elemento ('Python') tiene el número [0] y
no el [1]
# Ejemplo
print Talleres[3] #Les va a dar 'C '
Ahora si ponemos
print Talleres[5] #Dará un error, obviamente, es porque estamos pidiendo que imprima un rango de
#Talleres que no ha sido definido
#Modificamos un valor de la lista
Underc0de = ['Moderador', 'Moderador Global', 'Tutor', 'Lammers']
print Underc0de[3]#Imprime Lammers
Underc0de[3] = 'Co-Admin' #Modificamos su valor
print Underc0de[3] #Da Co-Admin
# Declarar y acceder a un elemento de una lista que esta dentro de otra
Argentina = ['Pipita', 'Romero', ['Marandona', 'Kempes'], 'Messi']
OldSchool = Argentina[2][1] # O sea que OldSchool vale 'Kempes'
Ok es simple, para acceder solo hay que declarar en que lugar se encuentra la lista exterior y luego el
dato de la lista interior.
# Indices negativos en las listas
Un índice negativo permite acceder a las listas del ultimo valor hacía el primero.
# Ejemplo
Murgas = ['Agarrate Catalina', 'La Margarita', 'Araca la Cana']
print Murgas[-1]#'Da Araca la cana' que es lo mismo que print Murgas [2]
# Para comprobar si un valor se encuentra de X lista, se utiliza un if más el operador in
(en/adentro en español).
# Ejemplo
Numerosalfin = [99, 35, 67, 85, 789, 456, 132, 369]
if 99 in Numerosalfin:
print '99 se encuentra dentro de Numerosalfin'
else:
print '99 No esta en Numerosalfin'
# Como recorrer una lista con For in
Aquí la variable Integrantes toma el valor de un elemento de Zeppelin en cada pasada (ciclo) del for,
o sea que se repetirá tantas veces como elementos tenga la lista y la variable irá tomando los valores
de uno en uno
Zeppelin = ['Bonzo Bonham', 'Plant', 'Page', 'Jones', 'Groupies']
for Integrantes in Zeppelin:
print Integrantes
# Añadir elementos a una lista
Para agregar elementos a una lista ya existente nos valdremos de 3 métodos, append, insert, y
extend. Veamos.
# Ejemplo append
Provincias = ['Jujuy', 'Santa Cruz', 'San Juan']
[Link]('Tierra del Fuego')
print Provincias
Esto nos da ['Jujuy', 'Santa Cruz', 'San Juan', 'Tierra del Fuego'], entonces, append sirve para
agregar un elemento al final de la lista. Para hacer uso de este hay que poner el nombre de la lista,
seguido de un punto, append, y luego entre corchetes y con comillas el nombre del nuevo elemento. Si
agregan más de un valor, se creará una lista dentro de otra.
# Ejemplo
Provincias = ['Jujuy', 'Santa Cruz', 'San Juan']
[Link](['Tierra del Fuego','Cordoba','Buenos Aires'])
print Provincias
El resultado
['Jujuy', 'Santa Cruz', 'San Juan', ['Tierra del Fuego', 'Cordoba', 'Buenos Aires']]
# Ejemplo insert
Provincias = ['Jujuy', 'Santa Cruz', 'San Juan']
[Link](1,'Tierra del Fuego')
print Provincias
Retorna :
['Jujuy', 'Tierra del Fuego', 'Santa Cruz', 'San Juan']
Bueno, acá la cosa es un poco más específica, porque podes aclarar la posición de tu nuevo elemento,
en este caso la 2 para 'Tierra del Fuego'.
# Ejemplo extend
Provincias = ['Jujuy', 'Santa Cruz', 'San Juan']
[Link](['San luis', 'La Pampa'])
print Provincias
Esto deriva en:
['Jujuy', 'Santa Cruz', 'San Juan', 'San luis', 'La Pampa']
# Operadores + Listas = Buena combinación
Ahora veremos como multiplicar y sumar las listas
# Ejemplo Suma
Cual = ['JJlopez','Tano pasman','Aguilar']
Dimebag = ['River', 'Youtube']
Cualbag = Cual Dimebag
print Cualbag #Devuelve una nueva lista con los 5 valores.
# O así
Cual = ['JJlopez','Tano pasman','Aguilar'] ['River',
'Youtube']
print Cual #Devuelven lo mismo pero este ocupa menos líneas
# Multiplicación
Dimebag = ['River', 'Youtube'] *3
print Dimebag
# O también
Dimebag = ['River', 'Youtube']
Dime = Dimebag * 3
print Dime
Retorna:
['River', 'Youtube', 'River', 'Youtube', 'River', 'Youtube']
# Buscando valores dentro de una lista
Esto si es bastante interesante, y no es complicado, para buscar usamos el método index seguido de
unos paréntesis y entre comillas el valor a buscar. El índex es más amplio, pero me pareció que hasta
acá está bien, si quieren saber más, googlen :D
# Ejemplo
Aborigenes = ['Calfulcura','Tupac Amaru','Tupac Amaru II','Araucanos']
print [Link]('Calfulcura')
#Esto devuelve 0 porque es la posición donde esta 'Calfulcura'
print [Link]('Sarmiento')
#Esto tira error porque Sarmiento (gracias a dios :P) no está dentro de la lista
# Borrando elementos de una lista
Esto se puede lograr mediante del pop o remove. A ver...
# Ejemplo (del)
Bebidas = ['Cafe','Mate','Mate Cocido','Fernet']
del Bebidas[1] # Se elimina 'Mate'
También podemos eliminar más de un valor.
del Bebidas[0:2]
Esto deja solo 'Mate Cocido' y 'Fernet'
Inclusive podemos borrar una lista completa
del Bebidas
# ¿Que es esto de pop?
Más que simple, pop() elimina el ultimo elemento de la lista y devuelve el valor que elimino.
# Ejemplo
Bebidas = ['Cafe','Mate','Mate Cocido','Fernet']
[Link]()
Fernet
# Ahora aprendamos a usar remove
Bebidas = ['Cafe','Mate','Mate Cocido','Fernet']
[Link]('Fernet') #Elimina fernet de la lista
# Slicing
El particionado o slicing permite seleccionar partes de una lista.
Se define con el nombre de la lista (Superheroes) y luego los índices, que serían principio(la posición
1) y el fin (la posición 5), con esto, Python entiende que queremos una nueva lista que vaya desde el
valor 1 (en este caso) hasta el valor 5, sin incluir este último (Por eso no se imprime 'Iron man').
# Ejemplo
Superheroes = ['Superman', 'Spiderman', 'Tino', 'Capitan America', 'Capitan Crunch', 'Iron Man']
Slice = Superheroes[1:5]
print Slice #Esto devolvería desde 'Spiderman' hasta 'Capitan Crunch'
Ahora, esto pasará si incluimos solo dos posiciones (1:5), pero que pasa con 3?
# Ejemplo
Superheroes = ['Superman', 'Spiderman', 'Tino', 'Capitan America', 'Capitan Crunch', 'Iron Man']
Slice = Superheroes[0:5:2]
print Slice # Devuelve 'Superman', 'Tino', 'Capitan Crunch'
Esto sucede porque ahora, cuando incluimos el tercer valor (2), Python lo interpreta como
[Inicio:Fin:Salto], en castellano sería, arranca en la posición 0 ('Superman') y va hasta la 5 ('Iron
Man') saltando de 2 en 2.
# Como ahorrar caracteres cuando hacemos slicing.
Azar = ['Truco', 'Sapo', 'Mosca', 'Casita Robada', 'Blackjack', 'Rifa']
Slice = Azar[:2]#Esto es como poner Azar[0:2]
Slice = Azar[2:]#Devuelve los 4 ultimos datos
Slice = Azar[:]#Devuelve todos los elementos de Azar, pero ahora, en una lista nueva
Slice = Azar[0:7:]#Si no hay un último valor, se torna cero (0)
Estas son algunas de las cosas que se pueden hacer con las listas, las más básicas e importantes.
# Tuplas
Una tupla es también una colección ordenada de datos no necesariamente del mismo tipo, no puede
cambiar de ninguna manera una vez creada, se accede a ellos (los datos) por medio de subíndices. En
resumen una tupla es una lista que no puede cambiar sus valores.
Para definirla se encierran los valores entre paréntesis (no entre corchetes como en las listas) y se
separan con coma.
A continuación algunas comparaciones (obvio, con ejemplos :P) de las tuplas con las listas
# Ejemplo
Tupla = ('Uno', 'Dos', 'Yoko Ono')
Los elementos de la tupla comienzan a numerarse a partir de cero y utilizamos los corchetes para
hacer referencia al subíndice
# Ejemplo
Tupla = ('Uno', 'Dos', 'Yoko Ono')
print Tupla[1]
# Da 'Dos'
En la tupla también existe el slicing
# Ejemplo
Canales = ('Telefe', 'Canal 13', 'America', 'Utilisima', 'Tele sur')
Slice = Canales[:3]
print Slice #Esto devuelve ('Telefe', 'Canal 13', 'America')
En la tupla, los índices negativos cuentan desde el final, como la lista
# Ejemplo
Canales[-4]
'Canal 13'
En la tupla también podemos usar el for in :D
Canales = ('Telefe', 'Canal 13', 'America', 'Utilisima', 'Tele sur')
for loqueseteantoje in Canales:
print loqueseteantoje
Esto da…
Telefe
Canal 13
America
Utilisima
Tele sur
La tupla no tiene métodos, no hay append, insert, remove, index, nada.
Pero.... ¿Tienen alguna ventaja?
MÁS VALE :P
* Las tuplas son más rápidas ya que como no hay métodos, los valores son constantes.
* Pueden formar parte de un diccionario
* Mantienen el código seguro ya que no permiten que se modifiquen
# Diccionarios (o matrices asociativas)
Colecciones que vinculan una clave(puede ser una cadena, un entero, tuplas) y un valor (puede ser
cualquier tipo de dato, incluyendo otros diccionarios), les dejo algunas comparaciones con otros
lenguajes (si es que programan en otra cosa)
* Un diccionario en Python es como un hash en Perl. En Perl, las variables que almacenan
hashes siempre empiezan con un carácter %. En Python las variables se pueden llamar de
cualquier manera, y Python sabe su tipo internamente.
* Un diccionario en Python es como una instancia de la clase Hashtable de Java.
* Un diccionario en Python es como una instancia del objeto [Link] de Visual
Basic.
# Para crear un diccionario procedemos así...
Datosazar = {'Perros':'Celular','Sprite':48}
print ['Perros'] #Esto da como resultado 'Celular' que es el valor de la clave 'Perro'
print Datosazar # Retorna {'Perros': 'Celular', 'Sprite': 48}, que es todo el diccionario
print ['Fifa'] #Da error porque la clave 'Fifa' no existe
Es importante remarcar además que se pueden obtener los valores por sus claves pero no las claves
por sus valores
# Ejemplo
Datosazar = {'Perros':'Celular','Sprite':48}
print ['Sprite'] # Da 48
print [48] # No da Sprite sino error
Hay que aclarar que en los diccionarios se diferencian las mayúsculas de las minúsculas, entonces
'Perro':'Animal'
No es lo mismo que 'perro':'animal'
# Para modificar un diccionario solo usamos simples asignaciones.
# Ejemplo
Datosazar = {'Perros':'Celular','Sprite':48}
Datosazar['Sprite'] = 'Bebida'
print Datosazar
Resultado:
{'Perros': 'Celular', 'Sprite': 'Bebida'}
ahí cambió
IMPORTANTE un diccionario no puede tener claves duplicadas, asignar un valor nuevo a una clave
existente elimina el valor antiguo.
# Para borrar elementos de un diccionario usamos del
# Ejemplo
Datos = {'Perros': 'Celular', 'Sprite': 'Bebida'}
del(Datos['Perros'])
print Datos #Da {'Sprite': 'Bebida'}
Se puede borrar todo un diccionario.
Datos = {'Perros': 'Celular', 'Sprite': 'Bebida'}
del Datos
# Con clear() limpiamos el diccionario, o sea queda en blanco, pero no se elimina
Datos = {'Perros': 'Celular', 'Sprite': 'Bebida'}
[Link]()
# Para comprobar si una clave ya existe usamos el método has_key().
# Ejemplo
Datos = {'Perros': 'Celular', 'Sprite': 'Bebida'}
Datos.has_key('Perros')
True # Da True, porque es verdad que perros es una clave que esta en Datos
Datos.has_key('Doberman')
False #False, ya que no es verdad que doberman esta en Datos
# Usando dict()
Lo que hace dict() es construir diccionarios directamente a partir de listas de parejas clave-valor
guardadas como tuplas.
# Ejemplo
Tupdicc = dict([('Hola', 44), ('Carlos', 'Fulgencio' )])
print Tupdicc
Retorna…
{'Carlos': 'Fulgencio', 'Hola': 44}
# Funciones
Acá les dejo una introducción a las funciones, que ya profundizaré en el paper siguiente
La estructura de los lenguajes estructurados son las funciones. Una Función es básicamente código
que cumple alguna tarea, devuelve un valor y tienen un nombre asignado, si el programador no
específico un valor (Valga la redundancia) de retorno, la función devolverá None.
Nos ayudan a mantener el código organizado, a depurar, y nos da la libertad de utilizar ese código en
otro lado cuando se nos de la gana :P
En Python las funciones se declaran con la palabra def y seguido del nombre de la función y a
continuación los parámetros entre paréntesis, luego los dos puntos y abajo las instrucciones
(identadas).
# Ejemplo
def Wachiturro (Primero, Segundo): #Declaramos la funcion con los parámetros y otras yerbas
print Primero #Incluimos dentro de la funcion las instrucciones
print Segundo #En este caso imprimir la variable 'Primero' y la variable 'Segundo'
Para que este código funcione hay que declarar las variables que se pasan como argumentos y
ejecutar la función.
Primero = 'Este sábado Argentina - Uruguay' #Declaramos las variables
Segundo = 'Ando escaso de ejemplos - Gh0st.C'
Wachiturro(Primero, Segundo) #Ejecutamos la función
Fíjense que cuando ejecutamos la función ponemos su nombre y los parámetros (Wachiturro(Primero,
Segundo)) pero no ponemos los dos puntos.
Cuando hacemos que la función corra (última línea) el orden de los parámetros los podemos cambiar.
# Ejemplo
Wachiturro(Segundo, Primero)
Esto da
Ando escaso de ejemplos - Gh0st.C
Este sábado Argentina - Uruguay
Y en el caso imprimía
Este sábado Argentina - Uruguay
Ando escaso de ejemplos - Gh0st.C
Veamos otro ejemplo.
# Ejemplo
def operacion (A,B,C):
print A*B/C
A = 29
B = 4
C = 7
operacion(A,B,C)
Esto devuelve 16.
Si cambiamos el orden de los valores, cambiara el resultado.
operacion(A,C,B)
#Da 50
También se pueden dar los valores directamente, en vez de andar declarando A, B y C, pero el orden
de la operación se mantiene
#Ejemplo
operacion = (50,78,94)
Bueno muchachas/os, hasta acá llego este tutorial, el paper próximo ya estaremos viendo
programación funcional, ente otras.
Thanks.
Gh0st.C