martes, 3 de marzo de 2009

FUNCIONES EN PYTHON

Bueno un funcion es una sencuencia de codigo definido por nosotros y que se ejecuta al hacer referencia a ella por un nombre que definimos, la sintaxis es la siguiente:


def nombre(lista de parametros):
sentencias

bueno aqui no es como en C o java que el contenido de una funcion lo determina { } aqui en python su creador Guido Van Rossum quiso que fuera determinado a traves de la sangria con un estandar de 4 espacios veamos para que me entiendan:

def numeros():
____print ("hola")
____print ("mundo")

def numeros():
____print ("hola")
print ("mundo")


como ven aparentemente este par de funciones hacen lo mismo pero hay una diferencia y es que en la primera al llamar la funcion numeros() imprimira hola y acontinuacion mundo ya que como se dan cuenta las dos estan perfectamente aliniadas con una sangria de 4 espacios apartir del nombre de la funcion, cuando rompoes esta sangria como es en el caso de la segunda funcion al llamar numeros() solo imprime hola, y el fin de esto es que Python quiere que escrbas codigo elegante, entendible que llegue otro programador y al ver el fuente de un compañero sea totalmente claro y no un nido de pajaros como muchos estan acostumbrados a programar.

En Python usted puede llamar las funciones como quiere excepto que utlize alguna palabra reservada algunas mencionadas en VARIABLES DE PYTHON


Nuestras funciones en python aceptan un sin nuemeros de argumentos , tambien podemos asignar valores por defecto a nuestros parametros, y a todas esta que diferencia hay entre argumentos y parametros??? bueno cuando hago llamado a una funcion:

numeros(2,7)

esos valores son los argumentos de la funcion y cuando hablo de parametros se refiere ya al valor recibido, osea es la variable que defini cuando cree la funcion para que reciba los argumentos:

def numeros(x,y): #las variable X y Y son los parametros de la funcion
____return x+y

otra cosa a tener en cuenta es saber que diferencia hay entre procedimiento y funcion ????

bueno un procedimiento es una funcion que no retorna ningun valor, y una funcion si retorna un valor, mencino esto porque en python no existen los procedimientos ya que si usted en una funcion no definen un valor a retonar Python por defecto retorna None asi que esto es de tener siempre en cuenta.

hasta ahora todo lo que hemos visto lo hemos practicado directamente desde consola. ahora en adelante ire colocando el fuente completo para que usted ejecuten su codigo y vayan acostumbrarse a realizar su codigo y sepa reutilizar las funciones de codigos hechos por usted.


este codigo lo guardan en un archivo que lo pueden llamar como quiera en este caso lo llamare suma.py

def suma(x,y):
______"""Esta funcion devuelve la suma de dos enteros"""
______return x+y


def main():

____print suma(5,6)


if __name__ == "__main__":main()


y ahora para ejecutarlo solo hacemos:

python suma.py en nuestra consola Linux o windows, tambien podemos bajar el IDE NetBeans
solo dedicado a python vamos a utilizar este ya que desde la misma pagina lo puedes bajar tanto para windows como para GNU-Linux.

Para los windowseros:

Bueno para los usuarios de windows solo lo descargan y doble-click y dan siguiente a todo :)


para los linuxeros:

Para poder ejecutar el archivo, abre una linea de comandos y en la carpeta donde está el archivo ingresa comando:

chmod +x netbeans-6.5-python-linux.sh

y despues podemos ejecutarlo:

./netbeans-6.5-python-linux.sh

Eso va a lanzar el instalador y desde ahi recordamos viejos tiempos con windows :)

bueno una vez instalado lo abrimos y esta es su ventana principal:



Damos File (archivo) y luego en New project (nuevo projecto) y se nos abra la siguiente ventana:


Negritadejamos la opcion por defecto Python project y damos next (siguiente) y definimos en nombre de projecto y en donde dice Create main file le cambiamos el nombre por el de nuestro programita
suma.py damos finish para volver a nuestra ventana principal:




Aqui damos doble click al nombre del proyecto que este caso lo llame estudio y luego en sources donde va estar nuestro primer programa:


Añadir imagen
Bueno esto no es un tutorial de Netbeans asi que busquen en google un buen tutorial para el manejo completo de esta Herramienta aqui esta el codigo fuente de suma.py en mi compu yo lo llame estudio.py veamos:

suma.py
---------

def suma(x,y):
"""Esta funcion devuelve la suma de dos enteros"""
return x+y


def main():
print suma(5,5)


if __name__ == "__main__":main()


Bueno continuamos viendo las funciones en python:

def hola(veces=1):
____print("hola" * veces)

esta funcion llamada hola contiene un parametro opcional ya que dicho parametro tiene un valor por defecto que es 1, al llamar la funcion podems hacer:

definimos la funcion:
>>>def hola(veces=1):
....____print("hola "* veces)

ahora llamamos la funcion:

>>>hola()
hola

como ven al tener un parametro opcional podemos llamar la funcion sin agumentos pero si queremos que me imprama dos veces el hola solo hay que colocar como argumento el numero de veces que queramos que nos imprima el hola veamos:

>>>hola(3)
hola hola hola


bueno python trae una forma de declar muchos argumentos por defecto a traves de una tupla
veamos:

def test(*tupla):
____for val in tupla:
____print(val)


Ahora si llamamos la funcion test() sin argumentos pues no va imprimir nada, pero si la llamamos con tres argumentos asi:

>>>test(1,2,3)
1
2
3

tambien podemos hacer que de vez de una tupla sea un diccionario, tan solo hay que hacer lo siguiente:

def test(**diccionario):
____for val in diccionario.items():
____print(val)

ahora hacemos el llamado de esta forma:

>>>test(primero = 1)
('primero', 1)

aqui primero va ser de key del diccionario y 1 va hacer de value, :) bueno en Python tambien puedo llamar una funcion dentro de otra funcion veamos:

>>>def uno():
______print("Hola mundo")

>>>def dos():
______uno()

>>>dos()
Hola mundo

Otro concepto de las funciones es cuando deciamos pasamos el argumento por valor o por referencia y algunos estaran diciendo y eso que ??
Bueno cuando nosotros pasavamos un valor por referencia lo que realmente pasamos a la funcion es la direccion de memoria donde esta almacenada en contenido de la variable y esto lo hacemos cuando queremos que todo los cambios que realize nuestra funcio a dicha variable permanescan fuera de la funcion, cuando paso un argumento por valor lo que realmente hacemos es llevarnos una copia del contenido de nuestra variable y todos los cambios que se realizen dentro de la funcion solo permanece alla dentro de la funcion ya que las variables dentro de la funcion son locales, veamos un ejemplo para captar la idea:

Bueno antes que nada hay que recordar que en Python todo es un objeto y que las listas son mutables los enteros y las tuplas inmutables ya que lo inmutable va atrabajar como paramatros por valor y lo mutable va ser paso por referencia:

>>>def f(x, y):
...____x = x + 3
...____y.append(2)
...____print x, y


>>>x=7
>>>y=[1]

llamemos la funcion y miremos que pasa:

>>>f(x,y)
10 [1, 2]

Bueno ese resultado es del print dentro de la funcion la variable x que vale 7 le sume 3 ahi se refleja en el resultado 10, y a la lista le agrague un nuevo valor que es el dos, estos valores son los de la funcion ahora hagmos un print para ver que pasa ???

>>> print (x , y)
7 [1, 2]

Como vemos fuera de la funcion el valor de la variables inmutables como la x se comporto como un paso por valor ya que dentro de la funcion tomo valor de 10 pero fuera de ella sigue valiendo 7, en cambio la lista que es mutable se comporto como un argumento por referencia ya que dentro de la funcion se le modifico añadiendo un nuevo elemento a la lista que fue el 2 y fuera de la funcion aun permanece igual :) que bonito es entender un poquito dale si quedas aun con alguna duda me la haces saber :=)

Como mencione antes en Python solo existen funciones, nada de procedimientos ya que toda funcion Python simpre retorna algo, cuando no definimos el return python retorna none ah no me crees :( pues probemos nada perdemos :) en la funcion anterior donde explique cuando para una funcion en Python en un parametro por valor y cuando es por referencia en dicha funcion no declare la el return el cual es una palabra reservada por python para retornar un valor de una funcion veamos:


esta era nuestra funcion:

>>>def f(x, y):
...____x = x + 3
...____y.append(2)
...____print x, y


ahora hagan esto:

>>>z=f( 2,[5])

ahora imprimamos la variable z haber que tiene:

>>>print(z)
None

hmm si ven veamos como utilizar el return:

>>>def sumar(x, y):
...______return x + y

>>>print sumar(3, 2)

5

asi de facil :) ahora que alguien me explique esto:

>>>def f(x, y):
...____return x * 2, y * 2

>>>a, b = f(1, 2)


Pues debe ser una trampa tuya verda??? como es que una funcion retorne dos valores imposible :( eso debe dar error, ejecutelo y te apuesto que python genera una excepcion, no ves que no ha generado nada verifica las variable a y b a=2 y b=4 , tonces como hace python??? bueno pues muy simple python sigue retornando solo un valor, lo que el hace internamente es crear una tupla con los valores de 2 y 4 y asi la funcion solo retorna una unica variable que es la tupla :)
Muy interesante, Python es una chimba :)

lunes, 2 de marzo de 2009

DICCIONARIOS EN PYTHON

Los Diccionarios tambien llamados matrices asociativas , ya que son colecciones que contiene clave:valor ejemplo:

>>>diccionario = {"enero":1,"febrero":2,"marzo":3}
>>>diccionario
{'enero': 1, 'marzo': 3, 'febero': 2}

En la parte de la clave podemos usar cualquier tipo de valor inmutable: numeros, candenas, booleanos o tuplas menos listas o diccionarios dado que son mutables. La difrencia que existe entre diccionarios con la listas o las tuplas es que los valores almacenados en el diccionario no se le accede a traves de su indice si no atraves de su clave utilizando el operador de [] asi que de esta forma nuestros diccionarios no tienen un orden prestablecido :|

>>>diccionario["enero"]
1

de esta misma manera podemos modificar valores

>>>diccionario["enero"]=2
>>>diccionario["enero"]
2

lo dejamos como estaba

>>>diccionario["enero"]=1
>>>diccionario["enero"]
1

bueno en los diccionarios no se usa el slicing, entre otras cosa ya que los diccionarios no son secuencia, sino Mappings (mapeados, asociaciones)

FUNCIONES BASICAS :

has_key(k) Comprueba si el diccionario tiene la clave k. Es equivalente a la sin-
taxis k in D.

valido en python 2.x veamos:

>>>diccionario.has_key("enero")
True

si la clave enero se encuentra en nuestro diccionario nos devuelve True en caso contrario False, una equivalencia de esto seria:

>>> "enero" in diccionario
True

Debido a esta equivalencia este metodo se convertio en algo redundante producinedo una ambiguedad innecesaria, debido a esto la funcion D.has_key(k) fue eliminada de Python 3.x veamos:

valido solo en python 3.x

>>> "enero" in diccionario
True


ahora probemos la funcion has_key(k) en python 3.x

>>>diccionario.has_key('febrero')

Traceback (most recent call last):
File "", line 1, in
AttributeError: 'dict' object has no attribute 'has_key'

como podemos comprobar la funcion has_key fue eliminada de python 3.x pero de igual forma contamos con >>>"enero" in diccionario para saber si se encuentra una clave de un diccionario :)


get(k[, d])
Busca el valor de la clave k en el diccionario. Es equivalente a utilizar D[k] pero al utilizar este método podemos indicar un valor a devolver por defecto si no se encuentra la clave, mientras que con la sintaxis D[k], de no existir la clave se lanzaría una excepción veamos:

>>>diccionario.get("marzo")
3

esto tambien lo podiamos averiguar de la froma D[k]

>>>diccionario["marzo"]
3

la ventaja de la funcion get(k[, d]) es que podemos indicar un valor a devolver si la clave no esta:

>>>diccionario.get("abril","valor no encontrado de la clave dada")
>>>'valor no encontrado de la clave dada'

bueno ahi defini un mensaje personalizado pero puede ser tambien que devuelva un entero o una lista etc.

items() Devuelve una lista de tuplas con pares clave-valor.

python 2.x

>>> diccionario.items()
[('enero', 2), ('marzo', 3), ('febero', 2)]

python 3.x

>>> list[diccionario.items()]
[('enero', 2), ('marzo', 3), ('febero', 2)]

como ven el resutado devuelto es una lista [(clave:valor),......]

keys() Devuelve una lista de las claves del diccionario.

python 2.x

>>>diccionario.keys()
['enero', 'marzo', 'febero']

python 3.x

>>>list(diccionario.keys())
['enero', 'marzo', 'febero']

values() Devuelve una lista de los valores del diccionario.

python 2.x

>>> diccionario.values()
[2, 3, 2]

python 3.x

>>> list(diccionario.values())
[2, 3, 2]

pop(k[, d]) Borra la clave k del diccionario y devuelve su valor. Si no se encuentra dicha clave se devuelve d si se especificó el parámetro o bien se lanza una excepción.

equivalente tanto para python 2.x como 3.x

>>> diccionario.pop("enero")
2
>>>diccionario
{'marzo': 3, 'febero': 2}


tambien podemos hacer esto y es equivalentes tanto Python 2.x y 3.x:

del diccionario ["marzo"]
>>>diccionario
{'febero': 2}

si queremos eliminar todos los elemntod del dicionario tan solo hacemos:

>>>diccionario.clear()
{ }

si se fijaron bien los metodos keys(), values() y items() de un diccionario devolvían listas en key() devolvia una lista de las claves de un diccionario, de values() devolvia una lista de los valores de un diccionario y items() devolvia una lista con clave:valor del diccionario osea el diccionario completo pero en una lista, cada una de esas funciones tiene una funcion analoga que serian:

keys() analoga iterkeys()
values() analoga itervalues()
items() analoga iteritems()

estas funciones analogas devuelven iteradores sobre la misma secuencia que las anteriores, esto de los iteradores lo explicare con mas detalle mas adelante.

tambien se fijaron que en python 3.x hacemos en algunas funciones el llamados de list
list(diccionario.values()) para imprimir los datos buen es que en python 3 se introduce un concepto llamado vista y vamos a tratar de ver las ventajas que trae esto contra versiones anteriores de python 3.x ya que cuando hacemos diccionario.keys() en python3 obtengo es la vista del diccionario veamos:

python 3.x

>>>d=diccionario.keys() #obtengo la vista del diccionario
>>>type(v)
class 'dict_keys'

como ves es de tipo

class 'dict_keys'

>>> iterador= iter(v) # construyo un iterador a partir de la vista (no del dict!)
>>> keys = list(v) # construyo una lista a partir de la vista

como ves es por eso que en python 3.x construimos la lista a partir de la vista si estamos en una version de python 2.x los iteradores lo conseguiamos de las funciones homologas (iterkeys(),iteritems() y itervalues() ) y en python 3.x solo con la funcion iter iterador= iter(v)


veamos con un ejemplo el concepto de vista para Python 3.x y su funcion iter() que su proposito puede ser mas para compatibilidad hacia atras con versiones previs a python 3.x

diccionario de ejemlo:

>>>dic={"guido":"python","linus":"linux","richard":"gnu"}

python 2.x

>>>iterador=dic.iterkeys()

ahora borremos un elemento del diccionario:

>>>del(dic["linus"])

ahora iteramos:

>>>for key in iterador:
.... print key
....

Traceback (most recent call last):
File "", line 1, in
NameError: name 'iterador' is not defined


bueno nos genera un error ya que nuestro iterador tiene un diccionario definido y al modificarlo
ya no podemos iterarlo osea recorrerlo con el for :( y ahi es donde entra el concepto de vista con python3 porque las vista son iterables :) veamos:

python 3.x

>>>dic={"guido":"python","linus":"linux","richard":"gnu"}

obtenemos la vista:
>>> vista=dic.keys()

ahora borremos un elemento del diccionario

>>>del(dic["linus"])

ahora iteramos con la vista:

>>>for key in vista:
.... print (key)
....

guido
richard


si en python 3.x hubieramos obtenido el iterador atraves de la funcion iter() asi iterador=iter(dic.keys()) si hacemos asi en python 3 tendriamos un comportamiento similar a Python 2.x y es el de que ese iterador no soporta modificacion durante la ejecucion.

Bueno creo que con lo que llevamos hasta aqui de python que son los tipos de datos operadores, listas, tuplas y diccionarios que era algo fundamental antes de iniciar con funciones, sentencias condicionales y bucles, que lo veremos ya en el proximo post. vamos despacios porque con el lanzamiento de python3 en cada tema vamos mostrando como se hace en python 2.x y ahora como se hace en python 3.x bueno no es todo pero donde hallan cambios lo ire indicando para que los que andan practicando vean el porque de las excepciones que nos arroja, bueno cualquier duda me la hacen saber bye.

Write By Hackchan

viernes, 27 de febrero de 2009

TUPLAS EN PYTHON

Todo lo que vimos en la seccion de LISTAS EN PYTHON se aplica a las tuplas la unica diferencia que en vez de usa [ ] usamos ( ) bueno en realidad el operador que define la tupla solo es la , (coma)
pero por claridad utilizamos el parentisis veamos:

>>>t= (1,2,"hola",True)
>>>print(t)
(1, 2, 'hola', True)

igual seria tupla si la definimos sin el parentisis:


>>>t= 1,2,"hola",True
>>>print(t)
(1, 2, 'hola', True)

podemos verificar que es una tupla

>>>type(t)
class 'tuple'

listo creo que entendi voy a definir una tupla de un solo elemento para demostar que esto es refacil veamos:

>>> tupla = 1

mi tupla de un elemento ;) veamos a ver si es verdad:

>>>type(tupla)
class 'int'

Como ven tupla=1 es simplemente una asignacion de 1 a la variable tupla si hubieramos querido que fuera una tupla tan solo habia que hacer:

>>> tupla = 1 ,
>>>type(tupla)
class 'tuple'
>>>print(tupla)
(1,)

Bueno aqui tambien podemos usar el operador [ ] para referirnos a un elemento de la tupla digamos que aun tenemos esta tupla definida (1, 2, 'hola', True):

>>>tupla[0]
1

ahora tratemos de modificar el primer elemento de la tupla por cualquier otro valor a ver que pasa:

>>>tupla[0]=12

Traceback (most recent call last):
File "", line 1, in
TypeError: 'tuple' object does not support item assignment


genero un error, bueno esto se debe a que las tuplas son inmutables( esto quiere decir que una vez creada una tupla no se puede modificar) en cambio como vimos en el tema de las lista si se pueden modificar cuando sea, y ademas las lista cuenta con una serie de funciones utiles para su tratamiento, pero las tuplas tampoco posee esa serie de funciones :( tonoces para que carajo utilizo las tuplas para eso solo trabajo con lista, buena pregunta, solo te digo que la unica ventaja de las tuplas es que son mas ligeras que si vas a crear una lista que no va ser modificada osea de tamaño fijo mejor optas por una tuplas y asi ahorras memoria.


jueves, 26 de febrero de 2009

LISTAS EN PYTHON

La lista es una colección de datos ordenada, alguna equivalencia con otros lenguajes seria los arrays o vectores. La lista puede contener cualquier tipo de dato (enteros, cadenas y otras listas ) veamos como se puede crear una lista:


>>>lista = [''hola'',2,''hacker'',[1,2,3,4,5]]


si se dan cuenta nuestra lista principal tiene un string ''hola'', un entero 2 y otra lista, una lista dentro de otra lista :) esta definicion estan valida como para python 2.x y 3.x


>>>print (lista)

['hola', 2, 'hacker', [1, 2, 3, 4, 5]]

bueno si queremos acceder a uno de los elementos de la lista lo hacemos utilizando el nombre que hacemos referencia a la lista en este caso lo llame lista puede ser cualquiera y entre corchete indicamos un indice, dicho indice va de 0 a n-1 veamos:

>>>print(lista[0])

hola

>>>print(lista[3])

[1, 2, 3, 4, 5]


pero yo quiero es acceder al 2 pero, no se que hago ya que es una lista dentro de otra veamos:


>>>print(lista[3][1])

2


wow que bien esto de las tuplas esta muy bien, tenga en cuenta que este operador [] se puede utilizar para modificar los elementos de la lista de esta forma:


>>>lista[0]=''Python''

>>>print(lista)

['Phython', 2, 'hacker', [1, 2, 3, 4, 5]]


como vimos con el operador [ ] podemos hacer referencia a cualquier elemento de la lista de 0 a n-1 pero Python trae consigo algo que es recorrer la lista de ultimo al primero utilizando numeros negativos veamos:


>>> nombres = [''angelica'',''paola'',''hackchan'',''python'']

>>>print (nombres[-1])

python

>>>print (nombres[-4])

angelica


Para los curiosos que no tienen sentido comun ;) eso es bueno cuando se es ultra novatillo es que si haces referecia por ejemplo print(nombres[-5]) o print (nombres[4]) va generar un error que dice, lista fuera de rango asi:


Traceback (most recent call last):

File "", line 1, in

IndexError: list index out of range


SLICING O PARTICIONANDO:


Este mecanismo nos permite seleccionar porciones de listas veamos:

sigamos con esta lista

>>> nombres = [''angelica'',''paola'',''hackchan'',''python'']

>>>print(nombres[1:3])

['paola', 'hackchan']

Como vemos para indicar porciones de lista damos un numero inicial en donde quiero que inicie mi porcion seguido de (:) dos puntos y un numero final que me dice el limite de la lista OJO: ese numero final actua o me imprime el elemento de la lista contenida en (numerofinal-1) por eso imprime hackchan y no Python, si queremos que vaya hasta python solo es:


>>>print(nombres[1:4])

['paola', 'hackchan','python']


definamos otra lista pero de solo enteros:


>>> n=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]


ahora vamos ver que si agregamos un tercer elemento inicio:fin:salto defino un salto para extraer los elementos de la lista:


solo con (inicio:fin)

>>>print(n[2:8])

[ 3, 4, 5, 6, 7, 8 ]


ahora con (inicio:fin:salto)

>>>print(n[2:8:2])

[3, 5, 7 ]


Como se dan cuenta con (inicio:fin:salto) lo primero que hace es obtener la lista definida en inicio:fin que en este caso al ser de 2:8 nos da [ 3, 4, 5, 6, 7, 8 ] ahora el salto nos dice que sea de dos en dos por lo tanto solo va quedar [ 3, 5, 7 ] espero que me entiendan :) pues esta muy facil el concepto de como funciona, de todas maneras todos los temas los estoy explicando sin tecnisismo alguno salvo alguna definicion de un libro pero que luego ire explicando con mis palabras :) cualquier duda no se olviden comentar ya sea para aclarar algo o cerregirme vale sigamos.


Extra:

definimos una lista cualquiera o esta :)

>>> l=[''hackchan'',2,''python'',7]

print(l[0:]) # imprime desde elemento 0 hasta ?? pues al no indicar nada python lo toma hasta el

# ultimo

['hackchan', 2, 'python', 7]

print(l[2:])

[''python'', 7 ]

print(l[:3]) #aqui al no indicar inicio pues Python lo toma desde 0

['hackchan', 2, 'python']

Imprimo toda la lista una manera corta de hacerlo con el oerador [] :

print(l[:])

['hackchan', 2, 'python', 7]


Indico que utlize toda la lista :: y luego a dicha lista muestre los elementos con un salto de dos en dos:

print(l[::2])

['hackchan', 'python']


tambien podemos modificar los elementos o la fraccion de lista que indicamos asi:

>>>l[0:2]=[3,4]

ahora impriman la lista y veran lo que paso:

>>>print(l)

[3, 4, 'python', 7]

Si ven cambiamos los dos primeros elementos de la lista y eso fue porque l[0:2]=[''hackchan'',2] pues eso son los dos elementos que vamos ha cambiar por [3, 4 ] :D bueno espero que me hayan entendido ;) bueno esto que hicimos es un manejo a pedal de manejar listas pues python tiene una serie de funciones para su tratamiento y que veremos a continuacion para no crear un enredo de temas luego :)

veamos las sigiente funciones basicas para el manejo de listas:


append(object) Añade un objeto al final de la lista

digamos que tenemos:

>>>lista=[1,2,3,4,5,6,7]

>>>lista.append(7)

>>>print(lista)

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


count(value) devuelve el numero de veces que se encontro value

>>>lista.count(7)

2


extend([iterable]) añada los elementos del iterable a la lista , hay que tener en cuenta que con el lo que hacemos es concatenar dos listas, haber veamos como funciona:


>>>lista.extend([8])

[1, 2, 3, 4, 5, 6, 7, 7,8]

>>>lista.extend([9,10,11,12,13])

[1, 2, 3, 4, 5, 6, 7, 7,8, 9, 10, 11, 12, 13 ]


insert (index, object ) inserta el objeto a la lista en la posiscion index veamos:

>>>lista.insert(0,10)

>>>print(lista)

[10, 1, 2, 3, 4, 5, 6, 7, 7,8, 9, 10, 11, 12, 13 ]


index( value[, start [, stop ]] ) Devuelve la posicion que encontro la primera ocurrencia de value(ya que un valor de una lista puede estar repetido eje: [1,2,2,3] tonces si mando a pedir la posicion de 2 index me va a devolver el indice del primer 2 que encuentre en este caso el indice es 1, si se especifica start y stop que son opcionales indicamos el inicio y el fin de la sublista.


>>>lista.index(10)

0

como ves aun que tenemos dos 10 en la lista uno en la posicion 0 y el otro en la posicion 11 index me devuelve el indice de la primera coincidencia encontrada en la lista.


pop(index) Devuelve el valor de la posicion index y lo elimina de la lista, si no se especifica la posicion, se utiliza el ultimo elemento de la lista


>>>lista.pop(10)

9

lo que hace pop es que elimina el elemento según el indice que le indique, como le pase el 10 ese indeice contiene el 9 lo muestra y queda eliminado


>>>print(lista)

[10, 1, 2, 3, 4, 5, 6, 7, 7,8, 10, 11, 12, 13 ]


si no indicamos indice a eliminar pues elimina el ultimo de la lista:


>>>lista.pop()

13

>>>print(lista)

[10, 1, 2, 3, 4, 5, 6, 7, 7,8, 10, 11, 12 ]



remove(value) eliminar la primera ocurrencia de value


>>>lista.remove(7)

>>>print(lista)

[10, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12]


>>>lista.remove(10)

>>>print(lista)

[1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12]


>>>lista.remove(12)

>>>print(lista)

[10, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11 ]



reverse() invierte la lista. Esta funcion trabaja sobre la propia lista dede la que se invoca el metodo, no sobre una copia.

>>>lista.reverse()

>>>print(lista)

[11, 10, 8, 7, 6, 5, 4, 3, 2, 1]


para dejarla como estaba aplicamos otra ves reverse()


>>>lista.reverse()

>>>print(lista)

[1, 2, 3, 4, 5, 6, 7, 8, 10, 11]


martes, 24 de febrero de 2009

EXPRESIONES Y SENTENCIAS EN PYTHON

Una expresion ??? bueno, es forma correcta de decirle o digitar mas bien algo a nuestro interprete de manera que el interprete de Python me entienda y me conteste, aunque hay expresiones como en la vida real que el interprete al igual que las personas se quedan sin palabras ;)

>>> 1+1
2
bueno aqui hay que saber que una variable y un valor se consideran expresiones
>>>150
150
>>>x=2
>>>x
2
miren esto:

>>>mensaje="shalom"
>>>mensaje
'shalom'
>>>print(mensaje) #en python 2.x es print mensaje
shalom

ven la diferencia? Cuando Python muestra el valor de una expresion, muestra exactamente lo mismo que se digito al introducir el valor en el caso de dicha cadena 'shalom' la muestra tal y como fue asignada a la variable. Pero la sentencia print imprime el valor de la expresion en este caso el contenido de la cadena shalom. bueno esto se nota aqui con la cadenas :) si lo intentas con un entero pues no se va notar tanto esta diferencia :).

OPERADORES Y EXPRESIONES:


Los operadores son pues unos simbolos especiales que varios de ellos lo vemos desde que tavamos bbs :) si esos que reprentas operaciones de calculo simples ya saben a cuales me refiero?? no son mas que las suma (+) la resta (-) la division(/) y la multiplicacion(*)

veamos:

>>>20+32
52
>>>hora=10
>>>hora-1
9
>>>hora*60+2
602
>>>
5**2
25
>>>(7-2)+(5*2-5)
10

python 3.x
>>>5/2
2.5

python 2.x
>>>5/2
2


como ya sabran el simbolo (*) es el de la multiplicacion y el del (**) es el simbolo de la exponeciacion que falta de respeto hackchan :) pero los novatillos daran gracias al cielo por eso ;)
bueno deben saber que la expresion hora-1 donde, hora sera reemplazado por el valor que le asigne que en este caso fue 10 antes de hacer la operacion.

como ven la suma,division,resta y la multiplicacion hacen lo que ya esperavamos que hicieran asi que no debe ser muy dificil para los totalmente novatos el captar estos conceptos, pero si le recuerdo que la division en python en su version 2.x no hace lo que uno quisiera qu haga ya que una division tan facil donde el resultado es 2.5 me arroja un 2 bueno en VARIABLEN CON PYTHON ahi explique el porque de esa aparente anormalida con el resultado.

El ORDEN DE LAS OPERACIONES:

Bueno los Ingleses (hello everybody) :D alguien quiere traducir este blog ??? jeje no que va ya hay bastantes en ingles :D bueno amigos portemonos serios ;) lo que venia diciendo es que hay un acronimo de los igleses que es PEMDAS algunos diran que rayos quiere decir bueno le voy a decir y no tienen que ir por el diccionario, bueno se los digo a los que no saben que es un acronimo :)
P arentisis (parentisis)
E xponentiation (Exponenciacion)
M ultiplication (Multiplicacion)
D ivision (Division)
A ddition (Adicion)
S ubtraction (Sustraccion)

Bueno el porque de esa clase de kindergarden, bueno solo es para recordarle las reglas de precedencia de estos simbolos y la campeona de todas osea la de mayor precedencia es el ()

veamos

>>> 2*3+2
8
pero si queremos que la suma se realize primero que la multiplicacion pues recurrimos a los () que es el simbolo de mayor precedencia y por ende sera lo primero a realizar antes que nada veamos aver si es verda:
>>>2*(3+2)
10

bueno el siguiente es la exponenciacion es la que sigue despues de () en tener la presedencia mas alta veamos:

>>>5**2+1
26

si ves, si te das cuenta ??? la exponenciacion al tener mayor precedencia que la suma se realiza primero 5 elevado ala dos y luego le sumo 1, oye pero quiero que la suma se haga primero que hago??? no mentiras es una broma :) ya me dijistes que el parentisis es el de mayor precedencia pues solo hay que hacer esto:

>>>5**(2+1)
125


bueno los siguientes digo siguientes porque la multiplicacion y la division tienen el mismo nivel de precedencia claro esta que ambos estan por debajo de los parentesis y la exponenciacion veamos:

>>>8*2/2
8

pero si hago lo invertido dara igual??? veamos:

>>>2/8*2
0.5 #los que usan pytho 2.x recuerden que el resultado va ser 0

si se dan cuenta?? esto es porque la division y la multiplicacion tienen el mismo nivel de presedencia entonces la expresion se evalua de izquierda a derecha.

Bueno solo queda la adicion y la Sustraccion que son los de mas bajo nivel de precedencia y al igual que la multiplicacion y la division tambien comparten un mismo nivel de precedencia:


>>>1+2-8
-5


bueno vemos una serie de combinaciones:

>>>(25+3)/(1+3*2)*2

bueno muchachos traten de hacer ese a mano y luego lo digitan en su interprete Python no se hagan trampa que aqui venimos a equivocarnos y corregirnos para aprender :) vamos cuanto nos dara esa expresion pues muy facil es 2 este cree que no me lei bien este post baboso, ole te pasastes :) dejame decirte que si te dio 2 estas remal, pero a los que le dio 2.3 esta muy mal tambien :( bueno quien da mas o menos :DDD bueno lo que dijeron menos le daria algo asi como 1.75 pero no, no es la respuesta que busco, si ven y esta expresion es pequeñita y los que se equivocaron tienen que repasar y dejar esos conceptos claros ya que mas adelante veremos cuando tengamos que resolver algun ejercicio matematico tendremos expresiones realmente complejas:DD la respuesta era:


>>>(25+3)/(1+3*2)*2
>>>8

A los que antes de probarlo en su interprete Python los felicito van en busca del conocimiento y si les dio 8 es por que no son tan novatillos :DD bueno y los que hicieron trampa pues vamos esforcemonos mas la idea es aprender y a los hacker no me insulten no soy pedagogo y hay que enteder que ustedes en sus dias pasados fueron unos novatillos :) .

LAS OPERACIONES CON CADENA

Bueno en Python toda operacion matematica con una cadena es ilegal veamos:

>>>hola +2
Traceback (most recent call last):
File "", line 1, in
TypeError: Can't convert 'int' object to str implicitly

asi que cualquier operacion basica (+ - * /) con cadenas (String) va generar el mismo error, creo que esto esta muy facil :) , pero que pasa si a dos String los tratamos de sumar veamos:

>>>"hola " + "Hackchan"
hola hackchan

el operador (+) entre cadenas se utiliza para la concatenacion facil no??? sera que si nos ponemos de curioso haber que pasa si restamos (-) y dividimos (/) vale:

>>>"hola " - "Hackchan"

Traceback (most recent call last):
File "", line 1, in
TypeError: unsupported operand type(s) for -: 'str' and 'str'

>>>"hola" / "Hackchan"

Traceback (most recent call last):
File "", line 1, in
TypeError: unsupported operand type(s) for /: 'str' and 'str'

Bueno no sigamos siendo mas boludos probando lo inebitable ;) como ven el operador (+) se utliza
como en otros lenguages la concatenacion con este pequeño amigo, bueno el operador (*) tambien tiene un comportamiento algo muy interesante en cadenas para los que estan pensando en que "x"*"x" nos va dar "
x²" pues creo que tienen una sobre dosis de numeros :) pues no esa no es la funcion del (*) vemos cual es:

>>> "hola "*2+"hackchan"
'hola hola hackchan'

>>> "g"+"o"*15+"l"
'goooooooooooooool'


COMPOSICION:

Que hemos visto hasta aqui: las variables, las expresiones y las sentencias todo por separado bueno esperaba que ya lo fueran ustedes por su cuenta ir combinando todo lo que hemos visto vemos:

>>> print (7 + 23)
30


Bueno en realida lo que hace el interprete Python es realizar primero la suma y luego llama la funcion print


>>>hora = 2
>>>minuto=
4

>>> print ("numero de minutos:",hora*60+minuto) #si tienes python 2.x elimina los ( )
124

>>>porcentaje= (minuto * 100 ) / 60
>>>print(porcentaje)
>>> 6.66666666667


Por ahora esta capacidad no es la gran cosa pero ya mas adelante veremos cosas mucho mas complejas con algo mas de breveda ;) para los novatillos y los no tan novatillos acuerdensen que la parte izquierda de una asignacion debe ser una variable:

variable = minuto *100

ya que lo contrario seria totalmente ilegal:

minuto*100 = variable

espero que esto sea de mas decirlo ya que me imagino que un ultranovatillo almenos sepa manejar el operador de asignacion ya que como vemos es ilogico decir 8= t a 8 asignarle t asi lo lee Python ya todo tiene un orden y una forma correcta recuerda que python es un lenguaje formal y las ambiguedades son solo para los lenguajes naturales ;).

COMENTARIOS:

Muchos ya sabemos esto y muchos no lo utilizamos creemos que nuestros programas sera leidos sin problemas por otro programador tal vez eso sea asi pero te imaginas ponerser a entender y decifrar que hizo un programador a un programa realmente grande es mucho mas facil empezar de 0 que realizar el proceso de ingenieria inversa asi que una buena practica de programacion es que documente absolutamente todo mas adelante veremos un comentario especial que tiene Python para fines de la documentacion por ahora debemos saber que # todo lo que este despues de este simbolo python lo va ignorar ya que se trata de un comentario.

>>> print 2 + 2 # suma de dos enteros
4

bueno todo lo que llevamos es algo muy basico que no esta de mas como es interpretado todo esto en Python tranquilos que ya llegaremos a explicar funciones y veremos el paradigma de la Programacion orientada a Objetos en python pero antes tendremos que ver que son listas tuplas y diccionarios hasta la proxima bye.

write by Hackchan

lunes, 23 de febrero de 2009

VARIABLES EN PYTHON

Las variables en Python tienen una longitud arbitraria. Pueden estar formadas por letras y numeros,pero deben comenzar con una letra o guion bajo. Debe tener mucho cuidado con la sensibilidad es decir no es lo mismo variable a Variable asi que por convencion es mejor evitar variables en mayusculas.


Los tipos de variables que Python maneja son:


Numerica (entera,flotante,compleja)(12)(12.5)(6+3i)

cadenas (''hello world'')

booleano (True,False)(verdadero,Falso)



De las siguientes variables cuales no son correctas??


>>>77police=12

>>>_km=77

>>>$hack=”Hola Mundo”

>>>cma$=66

>>>clase=12

>>>is=3

>>>class=”Curso de python”


las que estan mal son las rojas ;) , en la primera la variable inicia con un numero esto no esta permitido en python. Cualquier variable que contenga simbolos especiales como $ o cualquier otro como ()=?¿%$·”! no son permitidos en una variable y Python se va a quejar.

Ahora miremos is y class porque estan mal??? si cumple con la regla de variables de Python, estan mal porque son palabras reservadas de Python, pero que eso?? pues es una palabara que realizan algo especifico con un tratamiento especial otras palabras reservadas por Python son:
(and,continue,else,elif,for,assert,break,def,except,exec,finally,from,global,if,import,in,lambda,not,or, pass,raice,return,try,while), ningunas de estas palabras pueden ser usadas como nombre de variables.

Como vemos el tipo de dato no lo definimos ya que Python es dinamico el internamente realiza esa operación por nosotros no es como en Java y C++ que son estaticos y a las variables hay que indicarle manualmente el tipo de dato:


int v=12 # variable entera

long n=1500000 # variable entera grande

float z=12,3 #variable punto flotante


como vemos esta asigacion es totalmente estatica y Python realiza eso por nosotros, si queremos saber el tipo de dato de nuestra variable hacemos lo siguiente:


tenemos

>>>a=12

>>>b=”hola mundo”

>>>c=12.5


verificamos el tipo de las variables anteriores:


>>>type(a)
type 'int'
>>>type(b)
type 'str'
>>>type(c)
type 'float'


ENTEROS:

el rango de un entero en python -2.147.483.648 a 2.147.483.647 superando esto la variable automaticamente pasara hacer long

>>>n=2147483647
>>>type(n)
type 'int'

aumentamos en 1 la variable para sobrepasar el rango de enteros en 1


>>>entero=2147483648
>>>type(n)
type 'long'

y vemos que nuestra variable paso hacer de tipo long podemos definir cualquier cantidad posible a una variable el unico limite es nuestra memoria ram :) entre mas ram, numeros extremadamente grandes podra almacenar una variable en Python.


Podemos indicar que una variable entera Python la tome como long:


>>>n=21L #Puede ser l o L mayuscula
type(n)
type 'long'


podemos asinarle el valor a la variable de forma octal:


>>>n=027 #anteponiendo el 0 (cero) indicamos que esta en modo octal que este caso es 23 en decimal

>>>print n

23


podemos asignarle en forma Hexadecimal:


>>>n=0x17 #anteponiendo el 0x: en este caso 0x17 equivale a 23 en decimal


ahora mira algo curioso en Python digamos que tengo una variable de esta forma

>>>x=5

que pasa si hago:

>>>x=x/2

2

???? por que carajo da 2 no deberia dar 2.5 a Python se le olvido dividir :) lo que pasa aquí es que si utilizamos dos operandos enteros Python determina que la variable resultado sea tambien un entero y por eso el resultado solo me devuelve la parte entera si queremos que nos devuelva el resultado como es debemos indicar un operando como real asi:

>>>x=5.0

>>>x=x/2

2.5

o bien tambien podemos indicar el otro operando como real

>>>x=5

>>>x=x/2.0

2.5

otra solucion sera:

>>>x = float(5) / 2

2.5


REALES:


Bueno muchos ya conocen este tipo de dato que utilizamos en C++ o en Java en C++ tenieos el float y el Double que es igual al float pero con mayor precision en python siempre va ser de doble precision 1 bit para el signo, 11 para el exponente y 52 para la mantisa osea si mi matematicas a un no me falla para ir por la calculadora :D claro que mi Python es como una calculadora, miremos y vera que si :):
>>>1+11+52
64

es un total de 64bits esto significa que los valores que podemos representar van desde ±2,2250738585072020 x 10-308 hasta
±1,7976931348623157×10308.



>>>r=0.77

>>>n=0.00001

si les parece aburrido escribir 5 veces el 0 (cero) podemos hacer:

>>>n=0.1e4


Hasta aquí todo bonito y facil pero esto es totalmente valido para las versiones de python inferior a su ultima version 3 que trae pequeños cambios en muchas cosas que para algunos programadores pusieron el grito en el cielo pero para otros lo ven como la evolucion del mismo lenguaje asi que miremos dichos cambios para este tema de las variables:

uno de los cambios es que el tipo entero y float se unificaron, solo va existir tipo entero, pero no te alarmes que a dicho entero le podas asignar la cifra que quieras bueno hasta donde aguante tu memoria Ram

veamos:


Python 3.x


>>> n=10000000000000000000000000000

si estuvieramos en Python 2.x este tipo de variable seria un float pero vemos que tipo arroja

>>>type(n)
type 'int'

vemos que si es verda :) unificaron el tipo de dato ahora solo existe int

se acuerdan de esto:

>>>x=5/2
2

y que teniamos que hacer unos de los dos operadores reales o utilizar la funcion float para que nos arrojara el resultado de 2.5 pues en Python 3.x esto fue corregido veamos:


>>>5/2

2.5


“excelente” :)


otro ejemplo:

>>>x= 6/5

>>>print x

File "", line 1
print x
^
SyntaxError: invalid syntax


error pero que joda ahora que hice mal :( no lo que pasa es que hay que recordar que el tradicional print antes de python 3 era una palabra reservada y ahora se convirtio en una funcion asi que desde python 3.x debes hacer ahora:


>>>print(x)

1.2


Ahora si bueno espero que no se desanimen porque el mundo necesita mas programadores en Python :) el tipo real permanece como lo vimos anteriormente.

bueno hasta aqui lo que tiene que ver con lo que son variables en python, cualquier error o aporte que nos ayuden para mejorar es bienvenido y no se le olviden que sus consejos y cualquier aporte que tenga que ver con Python es bienvenido y les recuerdo que al igual que ustedes estoy en el proceso de aprendisaje de Python :) bueno Animo que en unos dias estaremos haciendo aplicaciones y quien quita jueguitos 2d y en opengl :O asi que a estudiar y Programar bye.

write by Hackchan