viernes, 6 de marzo de 2009

EVALUANDO PRIMEROS TEMAS:

Bueno aqui ire colocando ejercicios de toda indole claro algo muy basico para poner en practica todos los temas basicos vistos hasta ahora:

lista
tuplas
diccionarios
expresiones y sentencias
sentecias condicionales como:

if:
aqui tenemos el if y mostramos como simular el switch el python a traves de un diccionario ya que en python no existe propiamente.

while:
en la parte de los bucles tenemos el while y a traves de un while infinito simulamos un do while en Python.

for:
nuestro famoso for que en python se utliliza para recorrer secuencias ;)

La entradas de datos con input() asi que tenemos varios tenemas para poder hacer ejercicios basicos asi que yo ire proponiendo algunos para ver las mejores soluciones posibles y espero que ustedes tambien propongas ejercicios:

EJERCICIO 1:

Traduce las siguientes expresiones matematicas a Python y evalualas. Trata de utilizar el menor numero de parentesis posible.

a) 2+(3.(6/2))

b) 4+6/2+3

c) (4/2)^5

d)(4/2)^(5+1)

e)(-3)^2

f)-(3^2)

EJERCICIO 2:

Son validos los siguientes identificadores:

1)Identificador
2)indice/dos
3)dos palabras
4)__
5)12horas
6)hora12
7)var!
8)from
9)uno.dos
10)'var'

EJERCICIO 3:

Diseña un programa que, a partir del valor de la base y de la altura de un triangulo (3 y 5 metros, respectivamente), muestre el valor de su area (en metros cuadrados).Recuerda que el area A de un triangulo se puede calcular a partir de la base b y la altura h como A = bh/2.

EJERCICIO 4:

Escribe un programa en Python para pasar un número de binario a decimal y de decimal a binario.


EJERCICIO 5:

Escribe un programa en Python que reciba dos listas y devuelva los elementos comunes a ambas, sin repetir ninguno (intersección de conjuntos).

EJERCICIO 6:

Escribe un programa en Python que reciba dos listas y devuelva los elementos que pertenecen a una o a otra, pero sin repetir ninguno (unión de conjuntos).

EJERCICIO 7:

Escribe un programa en Python que reciba dos listas y devuelva los elementos que pertenecen a la primera pero no a la segunda, sin repetir ninguno (diferencia de conjuntos).


EJERCICIO 8:

Escribe un programa en Python que, dada una lista de números,devuelva otra lista que sólo incluya los números impares.


EJERCICIO 9:

Escribe un programa en Python que, dada una lista de nombres y unaletra, devuelva una lista con todos los nombres que empiezan por dicha letra.

EJERCICIO 10:

Escribe un programa en Python que, dada una lista de números,devuelva otra lista con sólo aquellos números que son primos.

EJERCICIO 11:

Escribe un programa en Python que, dadas dos listas de números,devuelva una lista con todos los pares de números que podemos formar con uno de la primera lista y otro de la segunda.

EJERCICIO 12:

Escribe un programa en Python que, dada una lista de cadenas, devuelva la cadena más larga. Si dos o más cadenas miden lo mismo y son las más largas, la función devolverá una cualquiera de ellas.

EJERCICIO 13:

Escribe un programa en Python que, dada una lista de cadenas, devuelva una lista con todas las cadenas más largas, es decir, si dos o más cadenas miden lo mismo y son las más largas, la lista las contendrá a todas.

EJERCICIO 14:

Escribe un programa en Python que reciba una lista de cadenas y devuelva el prefijo común más largo. Define una función que, dado un número de DNI, devuelva la letra


EJERCICIO 15:

que le corresponde: dividir el número por 23 y utilizar el resto como índice de la cadena "TRWAGMYFPDXBNJZSQVHLCKE".


EJERCICIO 16:

Diseña un programa que lea una cadena y un entero k y muestre todas las subcadenas de longitud k.

EJERCICIO 17:

reescriba el codigo para que sea funcional en Python 3.x

print Dime tu nombre, nombre

nombre = int(raw_imput())

print Hola nombre


EJERCICIO 18:

La idea es hacer un algoritmo que el ordenador elije un numero y nosotros tenemos que adivinarlo en menos de los intentos que le digamos.El ordenador nos dará pistas de si nuestro numero es mayor o menor que el secreto.

Ayuda:

import random



EJERCICIO 19:

Realiza el juego del ahorcado:

a)con listas
b)sin listas

por ahora la palabra adivinar sera una variable ejem: palabra="adiviname", el maximo de oportunidades el que mejor les parezca.

se gana:

cuando se obtenga la palabra oculta por completo antes de agotar nuestro numero de oportunidades.

se pierde:

finaliza nuestro maximo de oprtunidades sin descubrir la palabra oculta

A Programar!!!!

ENTRADA DE DATOS EN PYTHON

Que seria de un progama sin la interaccion con los usuarios :) pues no servirian de a mucho, bueno sin tanto rodeos veamos:

def main():

____n = int(input("Digite:"))
____print (n*2)

if __name__=="__main__":main()

En Python 2.x tenemos input() para capturar enteros y float y raw_input() para cadenas pero desde python3.x solo existe input() y el valor que capture es siempre una cadena asi que si queremos que sea entero lo covertimos con la funcion int() y si queremos un float con la funcion float() convertimos el dato capturado a float asi:

def main():
____n = float(input("Digite:"))
____print (n*2)

if __name__=="__main__":main()

para capturar una simple cadena de texto seria:

def main():
____n = input("Digite:")
____print (n*2)

if __name__=="__main__":main()

Bueno si queremos validar datos para eso tenemos las excepciones en python pero ese tema lo veremos mas adelante por ahora miren un ejemplo que hize para capturar solo un entero:

def main():
____while True:
______try:
______n = int(input("Digite:"))
______break

____except:
______print ("Solo digite enteros")


if __name__=="__main__":main()

Bueno lo que hize es hacer un ciclo infinito de esta forma simulamos una do-while de otros lenguaje con python capturo un valor por teclado y si es entero break rompe el ciclo y termina, pero sino se produce una excepcion en python pero como definimos nuestro propio except nos muestra el mensaje de Solo digite enteros y vuelve a pedir que digite hasta que sea un entero :)

jueves, 5 de marzo de 2009

SENTENCIAS CONDICIONALES

Para escribir programas utiles, casi siempre necesitamos la capacidad de comprobar ciertas condiciones y cambiar el comportamiento del programa segun la condicion presente. Las sentencias condicionales nos dan esta capacidad. La forma mas asencilla es la sentencia if:

SENTENCIA IF:

def main():
numero=-8
if numero > 0:
____print"positivo"
else:
____print"negativo"


if __name__ == "__main__":main()

como vemos manejo un if con un else si numero es mayor que cero imprima positivo else (sino)
pues imprima negativo asi de sencillo :)

ok aqui tenemos otra:

if numero < style="color: rgb(0, 0, 0);">____print “Negativo”
elif numero > 0:
____print “Positivo”
else:
____print “Cero”

el primer lugar verifica que numero sea menor que cero si se evalua con verdadera imprime negativo y elif y else se ignoran, pero si numero no es negativo pregunto si es mayor que 0, si se evalua como verdadera imprimo positivo y else se ignora, si el numero no es negativo ni mayor a cero pues blanco es y gallina lo pone :) pues el ultimo else imprime cero ya que evaluaron como false el if y el elif.

Bueno ahora biene el switch pero momento en python no existe :( pero se podria emular con un simple diccionario :) veamos como:

def hola():
____print "hola"
def adios():
____print "Bye"

def defecto():
_____print "soy el default"


def main():
____switch = {
____0:hola,
____1:adios

____}
____switch.get(5,defecto)()



if __name__ == "__main__":main()

Bueno defini tres funciones hola() que solo imprime hola, adios() que solo se despide y la funcion default o por defecto si se acuerda para lo que han trabajado en otros lenguajes esta se ejecuta cuando si dentro de las opciones switch no coinciden con ninguna pues pasa a ejecutar dicha funcion, lo que llame switch ={0:hola,1:adios} este es nuestro diccionario y con la funcion get que esta explicada en el post de diccionario la funcion busca la key que le paso como argumento si la encuentra en el diccionario me ejecuta la funcion segun la key si no pues me ejecuta la funcion que le paso como parametro opcional en ese caso de no encontrar una key en especifico en el diccionario, como ven yo le paso 5 al buscar el el diccionario solo existe el 0 y el 1 asi que no existe dicho key y al pasar eso pues me imprime mi funcion por defecto () :) si le pasan el 1 pues va imprimir adios, bueno solo practiquen y si les da algun error me lo hacen saber ;)


BUCLES:

Mientras que los condicionales nos permiten ejecutar distintos fragmentos de código dependiendo de ciertas condiciones, los bucles nos permiten ejecutar un mismo fragmento de código un cierto número de veces, mientras se cumpla una determinada condición.


WHILE():
Veamos un ejemplo pra ver como funciona el while imprimiendo los numeros del 1 al 10:

def main():
i=1
while i <= 10: ____print i
____i+=1
if __name__ == "__main__":main()

Bueno esto es muy facil tambien aqui i inicia valiendo 1 el cual while lo evalua preguntando si i en menor o igual a 10 en caso de ser verdadero ejecuta el print y aumenta en uno el i la expresion i+=1 es igual que decir i=i+1 o i++ ahora i vale 2 y pregunta de nuevo 2 es menor o igual a 10 verda!!! pues imprime i y aumenta la i y ahora vale 3 bueno en ese ciclo va dura hasta que llegue a 10 y pregunta 10 es menor o igual a 10 verda!! son igual imprime 10 y aumenta i y ahora vale 11 vuelve y pregunta 11 es menor o igual 10 ni menor ni gual asi que falso!!!! y termina el ciclo :)
una explicacion muy prekinder pero vale si sos totalmende principiante :)

tambien lo podemos hacer en un ciclo infinito y preguntar que si llego a 10 para romper nosotros mismos el ciclo:


def main():
___i=1
___while True:
_____print i
_____if i==10:
________break
i+=1


if __name__ == "__main__":main()

Aqui lo que hago es un ciclo infinito no saben que es infinito ?? pues eliminen del algoritmo el break y lo corren asi y me dicen si algun dia termina de ejecutarse :) aqui el simpre va imprimir i
que incia en 1 bueno la imprime y de inmediato preguntamos que si la i vale 10 sino aumenta en 1
asi sigue imprimiendo 1 2 3 4 5 6 7 8 9 10 cuando llega a 10 se jecuta el break que rompe el ciclo infinito en caso de eliminar el break siguira imprimiendo sin terminar nunca 11 12 13 14 15 ...........................................................................................................................................................................


ahora miren este:

def main():
__i=1
__print i
__while True:
____if i==10:
______break
____i+=1
____if i % 2 == 0:
______continue
print i

if __name__ == "__main__":main()


cual sera el resultado de este codigo ?????? bueno se los dejo de tarea :) pero les voy a explicar que hace continue pues simplemente salta a la proxima iteracion :D bueno por esta vez lo voy a explicar el print que esta fuera del while me imprime 1 ya que i la inicie en 1 :) bueno entramos al ciclo infinito i==10 falso ya que 1 no es igual a 10 pues no ejecuta el break asi que seguimos i+=1
ahora desde aqui i vale 2 ;) ahora pregunta if % 2 == 0 pues aqui solo digo si el modulo de la division es igual a 0 si es verdadero pues nuestro numero es par ahora como nuestra i vale 2 es par asi que ejecuta continue y esto hace que salte a la siguiente iteracion asi que ignora el print y pasa a la siguiente iteracion, asi que esto al final me va imprimir solo numeros impares :)

FOR ...IN

secuencia = [“uno”, “dos”, “tres”]
for elemento in secuencia:
____print elemento


Los for en python se utilizan para recorrer secuencias en el caso anterior utlize una lista, el algoritmo es sencillo para cada elemento en la secuencia imprima elemento asi se lee de una forma natural bueno la primera vez elemento contiene uno imprime uno, la segunda contiene dos e imprime dos, la tercera elemento contiene tres e imprime tres asi va elemento por elemento hasta el final de la secuencia, los que han programado en C/C++ saben que el for lo han utilizado para iterar sobre las posiciones y no sobre los elementos

int mi_array[] = {1, 2, 3, 4, 5};
int i;
for(i = 0; i <>
printf(“%d\n”, mi_array[i]);
}

El enfoque e Python es mucho mas natural :)

Bueno si muy bonito pero en C/C++ para imprimir numero del 50 al 100 con for es muy facil pero como le hago con python ??? no me digas que tengo que contruir una lista del 50 al 100 para
luego recorrerla con for :( pues si pero para eso existe range() una funcion para generar secuencias de numeros veamos:

def main():
___i=range(50,101) #si estan con Python3 hacen i=list(range(50,101))
___for numero in i:
_____print numero
if __name__ == "__main__":main()


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