Programacion en Phyton

download Programacion en Phyton

of 18

Transcript of Programacion en Phyton

  • 8/4/2019 Programacion en Phyton

    1/18

  • 8/4/2019 Programacion en Phyton

    2/18

    0, = ac::J 00hack" , - = crack-. --.,www-hock)(c~oc k- esDeOa Python

    EIobjetivo de este cuaderno es presentar los conceptos baslcosrelacionados con la programacion de software tales como bucles,

    variables, funciones e incluso hilos de ejecucion , de forma compacta(para los que ven un manual de 300 paginas y les da un bajon =0),todo

    utilizando ellenguaje de programacion Python como base.1. Introduccion1.1 lQue es Python?Python es un lenguaje de proqrarnaclonmultiplataforma e interpretado, esto quieredecir:- Que funciona en casi cualquier sistema operativosin necesidad de modificar absolutamente nada.- Que el c6digo del program a se ejecutadirectamente a traves de un programa "interprete"(IIamado asf porque "interpreta" el c6digo), en vezde pasar por una fase de compilaci6n paraconvertirlo en un archivo ejecutable ( como losfamosos .exe ), permitiendo inc/uso escribir elc6digo a medida que se ejecuta, de formainteractiva.Este lenguaje se programa con un "editor detexto plano", es decir, algo tan simple como elBloc de notas 0 Notepad++ en Windows 0 gEdito kWrite en GNU/Linux, el propio interpreteincluye un editor alternativo para esta tarea (sf,el Word Pad 0el MS Word no funcionan aqul),Es importante saber que Notepad++, gEdit,kWrite y el editor que incluye el interpretefacilitan el trabajo coloreando el codlqo para

    distinguir mejor las cosas.2.lnstalacion, uso del interprete yHolamundoNota: por compatibilidad se utlllzara la versionpor defecto en debian al momento de escribiresto (2.6)

    2.1 Instalaci6nEnWindows:EIarchivo para instalarlo se puede encontrar enhttp://www.python.org/download/releases/2.6.6mas concretamente,http://www.python.org/fip/python/2.6.6/python-2.6.6.msi (se asume que el lector es capaz deinstalar un programa sencillo ;)

    En otros sistemas (Gnu/Linux, *BSD, ):Lo mas probable es que ya este instalado, de 1 0contra rio se puede hacer a traves del sistema depaquetes de la distribucion 0 a traves de lasfuentes enhttp://www.python.org/fip/python/2.6.6/Python-2.6.6.tgzCon la lnstalaclon de Windows se incluye uninterfaz qraflca para el lnterprete, en otrossistemas hay que buscar el paquete "idle" (enSynaptic esta en la secclon "Lenguaje de

    www.ha(K.X(raeK.es

    http://www.python.org/download/releases/2.6.6http://www.python.org/fip/python/2.6.6/pythonhttp://www.python.org/fip/python/2.6.6/Pythonhttp://www.python.org/fip/python/2.6.6/Pythonhttp://www.python.org/fip/python/2.6.6/pythonhttp://www.python.org/download/releases/2.6.6
  • 8/4/2019 Programacion en Phyton

    3/18

    hack0, = ac::J 00t~.crack.-.,ck)(c~ock-esww_ho

    proqrarnacion Python")

    2.2 Usodel interpreteUnavez abierto el lnterprete aparecera algo aSI:II Python Shell ~

    Esto nos perrnitira usario de dos formas,introduciendo el codlqo manualmente ( como sifuera una consola de comandos ) 0 ejecutararchivos que contengan el codlqo.Para la primera forma (introducir el codlqomanualmente), solo hay que escribirlo despuesdel ">".Si se utliliza la segunda forma, se puede abrir unarchivo a traves de "Archivo"( 0 "File" ) y "Abrir"(0 "Open") para crear un nuevo archivoutilizaremos "Nueva ventana" (0 "New window") en vez de "Abrir", con 1 0 que obtendremos unaventana en la que podremos editar el archivo, yfinalmente ejecutarlo con "FS".Nota: si el codigo incluye caracteres que noexisten en el estandar ASCII (como la "';") seproducira un error, esto se puede solucionarcon este comentario al principio del codiqo:# -*- encoding: utf-8 -*-Lo que hara que se utilice UTF-8, mucho masamplio.2.3 Hola mundoA modo de ejemplo y para comprobar que todo

    funciona bien, escribiremos en un archivo ( 0 enel interprete )print 'Hola Mundo!'y 1 0 ejecutamos, esto mostrara el mensaje:Hola mundo!2.4ComentariosEsposible introducir comentarios en archivos depython, usando el caracter "#" al principio delcomentario, de esta forma el lnterpretesimplemente se saltara el resto de la linea (si hayque comentar varias llneas, se repetira esto encada linea), por ejemplo:#Esto es un ejemplo de hola mundoprint 'Hola mundo!'# Facil, verdad?Sequlra mostrando:Hola mundo!3.Variablesy entrada/salida de datosPara utilizar una variable en pythonsimplemente hay que asignarle un valor, porejemplo:nombre='Joe'Esto creara una variable lIamada nombre, a laque se Ie asignara el valor "Joe", las variablesque contienen cadenas de caracteres (a partir deahora "strings" ) deben estar entre "," 0 ',' , nopasa 1 0 mismo con las variables que almacenannurneros, por ejemplo:i=10Esecomando creara una variable lIamada iconel valor 10.

    www.ha(K.X(raeK.es

  • 8/4/2019 Programacion en Phyton

    4/18

    hack0, = ac::J 00. ' - = crack-. --.,ck)(c~ock-esww_ho

    Nota: Hay que tener en cuenta que introducirespacios en cualquier parte del c6digo (amenos que sea dentro de un string) no afectaa como seejecutara, por ejemplo.i=10es igual a:i = 10

    seusa en python.

    Pero, si no se puede interactuar con el usuariono hay diversi6n, lverdad?Para mostrar algo por pantalla usaremos elcomando print y despues 1 0 que queramosimprimir ( variables, numeros 0 strings ),separados por comas, por ejemplo los comandosnombre=IJoe'Esto se puede usar para hacer el c6digo menos print 1 Hola 1 , nombre

    compacto y mas legible.Se pueden reutilizar nombres de variables, porejemploi=200Harfaque el valor de i fuese 200, yi='xyz'Cambiaria el valor i por el string "xyz"Adernas se pueden hacer variables con el valorde otras, por ejemplo si hacemosvar=iA la variable var se Ie asigna el valor de lavariable i.Se puede crear una variable con cualquiersecuencia de letras , numeros y ciertoscaracteres ( como _ ), siempre que ni empiecepor un numero ni que coincida con el nombrede una palabra clave, como un comando 0 unaexpresi6n del lenguaje (16gicamente no sepuede crear una variable lIamada = :P).Nota: Es importante destacar que loscomandos se acaban con un saito de linea, adiferencia de otros lenguajes deprogramacion, que acaban con un ";", que no

    MostraranHola Joe(Yel cursor quedarfa aqul)Como se puede ver, el comando print imprime1 0 que hayamos introducido en una linea ydespues pasaa la siguiente, esto a veces no es 1 0que queremos, en esos momentos acabaremosel comando con una coma ( sin nada despues ).Para permitir al usuario introducir datos existendos comandos: input y raw_inputPara utilizarlos se usa input(string} siendo elstring 1 0 que quieras que se muestre al usuariojusto antes de que introduzca el dato, porejemplo:nombre=raw_input('Hola, como tellamas? ')Esto Ie dlra al usuario "Hola, como te llamas?" y1 0 que escriba el usuario 1 0 almacenara en lavariable nombre.La diferencia entre input y raw_input es que elprimero pasa el valor directamente (asfque si enel ejemplo anterior usamos input en vez deraw_input el usuario tendria que introducir elnombre entre comillas), y raw_input conviertetodo en un string antes de meterlo en la

    www.ha(K.X(raeK.es

  • 8/4/2019 Programacion en Phyton

    5/18

  • 8/4/2019 Programacion en Phyton

    6/18

    hack0, = ac::J 00. ' - = crack-. --.,ck)(c~ock-esww_ho

    #Mostramos las variablesprin t 'Num l:',numlprin t 'Num 2:',num2prin t 'Num 3:',num3prin t 'Num 4:',num4Estomostrara 1 0 siguiente:Numl: 10Num2: 16Num3: OxaNum4: 16Esto muestra que el valor de una variablehexadecimal es convertida automaticamente aentero despues de ser creada, por eso lavariablenum2 (el valor original) y num4 (el valorconvertido a entero) son iguales, y por eso lavariable num3 se muestra como un string (parano ser convertida a decimal de nuevo).

    4.2 StringsLos strings son cadenas de caracteres, parapasar una variable cualquiera a string seutilizastr(variable)Esto es utll para crear cadenas de texto, paraconcatenar varias cadenas de texto sehace:# Creamos una cadenacadenal='abcdef'# Creamos otra cadenacadena2='ghijklm'# Juntamos las dos en otracadena3=cadenal + cadena2print cadena3

    Los nurneros se operan como se harlannaturalmente, enteros y flotantes pueden Mostraraoperar entre ellos sin nlnqun problema, perodado que operar dos enteros da como resultado abcdefghijklmun entero, (si al menos uno de los dos esflotante el resultado tarnblen 1 0 sera), esto se Parasaber si el string contiene a otro se hace asf:nota especialmente en lasdivisiones:> 10/33> 10/3. # Un 3 de punto flotante3.3333333333333335> 1+12> 1+1.2.0> 2/21> 1/20> 1/2.0.5> 2*510> 1-2-1

    c ad en al = ' qw er ty ui op ,cadena2='er'contenida=cadenal in cadena2print contenidaMostraraTrueEs decir, "verdad", en caso de que la segundacadena no este en la primera mostrarfa FalseOtra cosa importante sobre los strings esconocer su longitud, esto se hace conlen{cadena)cadena='123456789'longitud=len(cadena)

    www.ha(K.X(raeK.es

  • 8/4/2019 Programacion en Phyton

    7/18

    hack0, = ac::J 00. ' - = crack-. --.,ck)(c~ock-esww_ho

    print longitudTamblen se puede repetir una cadena variasveces haciendo cadena * veces ,por ejemplo:cadena = 'bla'print cadena * 3MostrarablablablaAdernas se puede extraer una subcadena concadena[inicio : fin] {hay que considerar que laprimera posicion es la 0 } por ejemplo:cadena = 'abcde'subcadena = cadena [1:3]prin t subcadenaMostrarabc4.3 CaracteresLos caracteres strings de longitud 1, para extraeruno se utiliza cadenalposlclonl :cadena='abcdeg'caracter=cadena[O]print caracter ,caracter=cadena[1]print caracter ,caracter=cadena[-1]print caracter ,Esto mostrarfa:a b 9Por que las cadenas se leen desde la posicionnumero 0, que es la primera, y se leen al reves{del final al principio} si se hace con nurnerosnegativos

    Para obtener el codlqo asignado a un caracter seutiliza ord{caracter}, por ejemplocadena=raw_input('Introd uce unaletra: ')caracter=cadena[O]numero=ord(caracter)print 'El caracter',caracter,'es elnumero' ,numeroPara hacer la operacion al reves {obtener uncaracter a partir de su numero}, se utilizachrtnumero), por ejemplo:cadena=raw_input('Introd uce unnumero: ')numero=int(cadena)caracter=chr(numero)print 'Elnumero',numero,'corresponde alcaracter',caracter4.4 Booleanos

    Este tipo de variables solo tiene dos valoresposibles: Verdadero {True} 0 falso {False} y seutilizan ampliamente con los condicionales {asique se explicara su uso con ellos, mas tarde}.4.5 ListasLas listas son {como su nombre indica} listasdonde se pueden almacenar valores decualquier tipo {incluso otras listas}, se accede alos valores que hay dentro de elias de la mismaforma que los caracteres 1 0 hacen con los stringslista[inicio : fin] , lista[posicion], de hecho lafunclon lenO tiene el mismo efecto en los dos.Nota: La primera posicion sigue siendo laruimero 0, no la 1, como se podrfa esperarPara crear un nuevo elemento al final de la listase hace listal.append{valor}, para quitar un valorse hace listal.pop{posicion} {listal serfa el

    www.ha(K.X(raeK.es

  • 8/4/2019 Programacion en Phyton

    8/18

    hack0, = ac::J 00t~.crack.-.,ck)(c~ock-esww_ho

    nombre de lavariable lista}

    Una forma sencilla de construir listas denumeros es con range(numl,num2}, queconstruirfa una con todos los valores de numlhasta num2 (excluyendo al ultimo).Porejemplo:lista = range(O, 10)print listaMostrara:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]4.6 DiccionariosLos diccionarios son estructuras que relacionanun objeto (string, numero ...) con otrocualquiera, para visualizarlo mejor:# Crea un diccionario vaciod_ejemplo {}# Afiade una entrada para 1d_ejemplo[1] = 'Blah!'# Afiade una entrada para 'nombre'd_ejemplo['nombre'] = 'Joe'# Afiade otra entrada masd_ejemplo['numero'] = 42# Ahora muestra 10 que hay# Muestra 'Blah!'print d_ejemplo[1]# Muestra 'Joe'print d_ejemplo['nombre']# Muestra 42print d_ejemplo['numero']# Se crea un diccionario con dos# entradasd_ej2 {1: 'Blah**2!', 'numero':32}print d_ej2[1] # Muestra 'Blah**2!'

    # Ahora veamos que pasa si no existeprint d_ej2['no_existe']# Produce un error5. Condicionales, bucles y funcionesPara modificar el orden de ejecucion de unprograma se utilizan condicionales (quepermiten hacer cosas distintas segun se de unacondici6n 0 no) y los bucles (en los que se repitevariasveces una parte del c6digo)En python el c6digo que pertenece a uncondicional, bucle, etc... debe seguir estaestructuracondicional

    c6digoc6digocondicional

    c6digoc6digo

    c6digo

    Es decir, que los espacios antes de alquncomando sirven para determinar a dondecorresponde (las Ifneas en blanco se usan parahacer el c6digo mas legible)5.1 CondicionalesPara decidir si una parte del programa seejecuta 0 no seutiliza lasfunciones if (si),elif (0-si) y else (sino)Ejemplo:numero=raw_input('Cuanto es 1+1? ')# posibilidad 1: El usuario ha# pulsado directamente Enterif (len(numero)==O):

    print 'No has introducido nada'

    www.ha(K.X(raeK.es

  • 8/4/2019 Programacion en Phyton

    9/18

    hack0, = ac::J 00. ' - = crack-. --.,ck)(c~ock-esww_ho

    # posibilidad 2: El usuario se ha# equivocadoelif(numero!='2'):

    print 'No, te has equivocado'# posibilidad 3: El usuario ha# acertadoelse:

    print 'Si, has acertado'Este c6digo hace 1 0 siguiente: pregunta alusuario cuanto es 1+1, si el usuario no dicenada, el programa sigue por print "No hasintroducido nada", si no se da la condici6n, seprueba con 1 0 sigiente, si la condici6n se cumpley el usuario se ha equivocado, el programaejecuta print "No, te has equivocado", sino soloqueda una posibilidad y el programa muestra"Si,hasacertado"Nota: cualquier operador en python se puedeagrupar en parentesls para cambiar el ordende prioridades, de la misma forma que se hacecon las matematlcas convencionales.EIfuncionamiento esasi:if (condie ion):elif (condicion):elif (condicion):

    else:

    EIif (si en inqles) ejecuta el c6digo que contienesi la condici6n resulta verdadera, sino, si acontinuaci6n hay algun elif ( o-si en lnqles) secomprueba si se da condici6n (si es asi seejecuta el c6digo), sino se vuelve a comprobar sihay otro elif, asl hasta que se encuentre algunoverdadero 0 hasta que no quede ninguno,despues, si no se ha cumplido ninguno, se ve sihay alqun else (sino en inqles), y si 1 0 hay se

    ejecuta su c6digo.

    Para comprobar las condiciones existen lassiguientes operaciones:

    Las condiciones son en realidad variables detipo booleano, asi que las operaciones seaplican a los booleanos tambien.5.2 BuclesHaydos tipos de bucles: bucles while y bucles forLos bucles while (mientras en lnqles) ejecutanun c6digo mientras se de la condici6n, porejemplo:i=10while i>=O:

    print ii=i-1

    print 'Despegue!'Mostrara numeros mientras i seamayor 0 igual ao10987654

    www.ha(K.X(raeK.es

  • 8/4/2019 Programacion en Phyton

    10/18

    hack0, c : : : : : J ac::J 00t~.crack.-.,ck)(c~ock-esww_ho

    321espegue!Asf que para hacer que algo se ejecutecontinua mente hariamos algo asf:while True:print 'Falta rnucho?'Que rnostrara continuamente:Falta rnucho?Falta rnucho?Falta rnucho?Falta rnucho?Falta rnucho?

    Esto pasa por que la condici6n es siempre True(0Verdad)

    Los bucles for, ejecutan el c6digo por cadaelemento en una lista (0string), por ejemplo:for elernento in lista:print elernento

    Que ejecutara el c6digo con cada posicion de lalista (0 del string), poniendo 10 que haya en esaposicion en la variable, por ejemplo:

    # Mostrar todas las letras de una# palabrapalabra=raw_input('Introduce unapalabra: ')for letra in palabra:print 'L etra',le traMostrara una letra de la palabra que seintroduzca en cada Ifnea, de la primera a laultima.

    # Mostrar todos los nurneros del 10# al 0for nurnero in[10,9,8,7,6,5,4,3,2,1,0]:

    print nurneroMostrara:10987654321Como se puede ver sigue el orden presente enla lista 0en la cadena.Hay dos expresiones que permiten modificar elcomportamiento dentro de los bucles (siemprecon respecto al mas interno), break, que sale delbucle y continue que salta al final.Por ejemplo:

    i = while i < 10:print ii = i + 1

    Podrfa ser substituido por

    i = while True:if (i >= 10):

    breakprint ii = i + 1

    www.ha(K.X(raeK.es

  • 8/4/2019 Programacion en Phyton

    11/18

    hack0, = ac::J 00. ' - = crack-. --.,ck)(c~ock-esww_ho

    5.3 Funciones

    Se puede extender el lenguaje Pythondefiniendo funciones propias funciones propias,esto sehaceasf:def nornbre de la funci6n_ _(pararnetrol,pararnetro2, . ):c6digoLos parametres son variables que puede utilizarla funcion, se puede hacer que algunos seanopcionales dandoles una valor por defecto, porejemplo:def funci6n_de_ejernplo(pararnetrol,parametro2=24):c6digoc6digo

    # Un ejernplo de su uso serianurnerol=2nurnero2=7nurnero3=surna(nurnerol,nurnero2)print 'La surna es',nurnero3Mostrarfa la suma de 2 y 7:La surna es 96. Uso de libreriasLas librerias son archivos que contienenconjuntos de funciones, por ejemplo hayalgunas que permiten hacer interfaces graficas,otras que permiten manejar conexiones de red yotras que permiten usar funciones matematicasmascomplejas.Para usar una librerfa hay que "importarla", estosehacede esta forma:La estructura del c6digo de una funci6n es igual

    a lade los condicionales: import mathdef funci6n():c6digoc6digoc6digo

    condicional:c6digo_del_condicionalc6digo_del_condicionalc6digo_del_condicionalc6digo_del_condicionalc6digoc6digo

    Las funciones pueden devolver algun valor,usando return, seguido por el valor a devolver ,por ejemplo la siguiente funci6n hace la sumade dos numeros:def surna (nurnl,nurn2):resultado=nurnl+nurn2

    return resultado

    Esto importa la libreria "math", que contienefunciones matematicas, pero para lIamar a unafunci6n hayque hacerlo de esta forma:libreria.funci6n()Esto puede resultar inc6modo si la funci6n seutiliza muchas veces, para esto se utiliza elsiguiente c6digo:from libreria import funci6nAsi se puede lIamar a funci6n directamente, otraopci6n es importar de una vez todas lasfunciones de la librerfa:from libreria import *Un@ puede hacer su propia librerfa guardandoel c6digo {funciones y dernas) en un archivo ydelandolo en el directorio en el que esta el que

    www.ha(K.X(raeK.es

  • 8/4/2019 Programacion en Phyton

    12/18

    hack0, = ac::J 00. ' - = crack-. --.,ck)(c~ock-esww_ho

    1 0 importa, si el archivo es Iib1.py, se importariacon import lib1Aprovecho para comentar algunas funciones ylibrerfas basicas:6.1 Librerra osPara lanzar un comando de systema (uno de lashell) se hace de esta forma:import osos.system('comando')Por ejemplo:import osos.system('echo Hola')Lanzara el comando de shell "echo Hola"Para saber el directorio actual se utilizaos.getcwdO,por ejemplo:import osprint os. getcwd( )

    Y para cambiaroS.chdir("directorio")

    de directorio

    import osos.chdir('directorio')6.2 La libreria sysLa caracterfstica mas destacable de la librerfa syses la posibilidad de manejar los para metros delprograma en el comando que los lanzo, porejemplo:import sysprint sys.argv[O]

    Mostrara el nombre del archivo (el parametro 0).

    Esto es utll cuando se quieren hacer programasque puedan ser lanzados desde scripts deconsola, para evitar que el usuario tenga queintroducir los datos a mano, por ejemplo:import sysargc=len(sys.argv)print 'Hay', argc, 'argumentos'for i in sys.argv:

    print i

    Esto mostrarfa el nurnero de argumentos y estos.Ademas da el control de 3 archiv es, el deentrada (sys.stdin), que muestra 1 0 que seintroduce por el teclado, el de salida (sys.stdout)donde se escribe 1 0 que saldra por pantalla y elde errores (sys.stderr), ahora mismo se hablarade como manejar los archivos.7. Manejo de archivosEmpezamos con open, esta funci6n sirve paraabrir un archlvo, se Ie pasan dos para metros, elnombre del archivo y las opciones(dependiendo de si solo puede leer ,si puedeescribir, ...)

    La opcion de lectura nunca crea un archivonuevo.La opcion de atiadir a continuacion crea unarchivo nuevo si no hay ninguno.La opcion de escribir crea un archivo nuevo (yborra antes el otro si habia alguno).

    Estas dos se combinan para elegir distintas

    www.ha(K.X(raeK.es

  • 8/4/2019 Programacion en Phyton

    13/18

    hack0, = ac::J 00. ' - = crack-. --.,ck)(c~ock-esww_ho

    opciones, por ejemplo "rb" significa que es delectura yes binario.Si despues de las opciones hay un +, el archivose puede manejar de todas las formas (leer yescribir)Ejemplo:archivo=open('archivol','at+')Abre un archivo lIamado "archlvo l" conpermisos para todo y si no existe 1 0 crea.Para leer algo de un archivo se hacearchivo.read(numero_de_carateres_a_leer} si nose especifica la cantidad de caracteres a leer, selee todo el archivo, una alternativa esarchivo.readlineO,que lee una linea del archivo.Nota: si archivo.readO 0 archivo.readlineOdevuelve un string de longitud 0, es que seacab6 el archivo.Para escribir algo en un archivo se hacearchivo.write("string de ejemplo"}, que escribestring de ejemplo en el archivo.Por ultimo, para cerrar un archivo se utilizaarchlvo.closef).Adicionalmente existe archivo.flushO que haceque los cambios en el archivo se guarden, estoes especialmente utll si se manejan los archivossys.stdout y sys.stderr a mano, ya que de otraforma no muestran los cambios hasta que seacabe la linea.Ejemplo (Un programa que copia un archivo):# Debe ser binario por si acasoinp=open('archivol','rb')# L o rnisrnocon esteoutp=open('archivo2','wb')string=inp.read(1)wh il e le n( st ri ng O :outp.write(string)

    string=inp.read(1)

    inp.close()outp.close()print 'Archivo copiado! :)'8. Manejo de erroresA veces hay partes del c6digo que pudengenerar errores, al importar librerias que no sonestandar, 0 al intentar leer un archivo que noexiste, en esos momentos habra que teneralgunas precauciones para evitar que el c6digofalle sin recuperacion posible, para eso seutilizan lasfunciones try, exception y raiseLas funciones try y exception funcionan de unaforma parecida a if y else:try: f=open('archivo','r')except:print 'No se ha podido abrirel archivo'Esto hara que python intente abrir el archivo yen caso de error imprima "No se ha podido abrirel archivo".Pueden utilizarse varias llneas dentro del try 0del exception, para hacer el c6digo mas cortopor ejemplo:try: import libreria_no_estandara=input('Introduce un nurnerodel 1 al 10')except:print 'Se ha producido unerror'Aqui hay dos Ifneas que puden causar el error,importar una librerfa que no siempre estadisponible 0 usar input, que produce un error siel usuario introduce caracteres alfabeticos, enlos dos casas se mostrara por pantalla Se haproducido un error

    www,ha(k.xc rae k.as

  • 8/4/2019 Programacion en Phyton

    14/18

    hack0, = ac::J 00.' .. crack-. -_ .ckxcrack.esww.ha

    Por ultimo esta raise(tipo de error,"Descripciondel error"} que sirve para avisar de un error, eltipo de error mas frecuente es el Exception,porejemplo supongamos que queremos hacer unafunci6n de suma que no acepte numerosnegativos:def surna(a,b):if (a

  • 8/4/2019 Programacion en Phyton

    15/18

    hacko c:::::l 0c::J 00.' .. crack-. -_ .ckxcrack.esww.ha

    hace con connect.

    escucha = socket.socket()escucha.bind ' ',1234# Escuchamos en el puerto 1234# en cualquier interfaz

    Ahora hay que decidir cuantas conexionespueden estar a la espera de que sean aceptadaspor nuestro script, esto se hace con listen ,indicandole el nurnero de conexiones, porejemplo 10 {si hay un firewall activo,probablemente este sea el momenta donde seproduzca el aviso}.escucha.listen(lO)Por ultimo solo queda aceptar las conexiones,esto se hace con accept, devuelve 2 parametres,un nuevo socket para la conexi6n y la direcci6ndesde donde viene la conexi6n, el socket que seutiliz6 para aceptar se puede {de hecho sedeberfa} reutilizar para aceptar conexiones almismo puerto, volviendo a lIamar a accept. EIsocket que se obtiene de accept ya estaconectado, se puede enviar y recibir datosdirectamente, por ejemplo, si 1 0 que queremoses que envfe "Hola mundo!" a quien se conecte,y despues cierre la conexi6n.while True:

    # Se aceptan conexionesconn, addr = escucha.accept()# Se envia el mensajec on n. se nd (' Ho la m un do !' )# Y se cierra la conexi6nconn.close()

    10. Programacion orientada a objetosPython nos permite crear nuevos tipos devariables, a las que llama clases {class}permitiendo asf practicar 1 0 que se llama laprogramaci6n orientada a objetos {OOP}.

    Las clases se declaran de forma similar a lasfunciones, la "palabra clave" es class, que vaseguida de el nombre de la clasey ':'class contador : # Clase de ejemploUna vez hecho esto, podemos incluir lasvariables y funciones que contendra la clase,supongamos que queremos hacer un contadorque nos muestre las veces que se lIamo a unafunci6n, necesitamos una variable para lIevar lascuentas

    veces = 0Y una funci6n a la que lIamar, que incrementarael contador y rnostrara las veces, para acceder alas variables comunes a todo el objeto seprecede con self. , entonces la funci6n quedarfaas!.

    # Siempre se pasara como primer# parametro selfdef cuenta(self):

    # Incrementa elcontador self.veces = self.veces + 1print self.vecesEn nuestro ejemplo, la clase contador yafuncionarfac = contador ( )c.cuenta( )c.cuenta( )Mostrara12

    W W W,h a(K .x c ra e K .~ !

  • 8/4/2019 Programacion en Phyton

    16/18

    hack0=0c::J 00=,-: crack-. -.ckxcrack.esww.ha

    Eso todo 1 0 necesario para clases baslcas, perohay unas cuantas funciones que permiten hacer

    a lasclaseshacer mas cosas:Ademas hay otra posibilidad uruca de laproqrarnadon orientada a objetos, la herencia,que permite crear una nueva clase que parte deuna anterior, esto se hace ariadiendo la clase"base" entre parentesls en la declaraclon de lanueva clase,despues del nombre de estayantesde los ':', veamos por ejemplo como extender elcontador para que soporte las funciones como_init_, _str_, ...class nuevo contador (contador):

    def init (self, base = 0):# inicializa el contador

    self.veces = int(base)def str (self):# Devuelve la representacion en# cadena

    return str(self.veces)def int (self):# Devuelve la representacion en# mlmero entero

    return self.vecesdef float (self):# Devuelve la representacion en# numero de punto flotante

    return float(self.veces)

    def __ cmp__ (self, otro):# Compara con otro valor# Negativo si el otro es mayor,# 0 si son iguales.# Positivo si el otro es menor.

    return self.veces - otro

    Nota: No hay ninqun problema en reescribirrnetodos que existieran en la clase inicial, a estose Ie llama sobrecarga de rnetodo,> c = nuevo_contador(10)> c.cuenta()11> print c11> c = = 11True> c.cuenta()12> c = = 11False11. Programacion multihilo basicaLa proqramaclon multihilo permite que unscript ejecute varias cosas a la vez,especialmente utll cuando hay cuellos debotella importantes, como las conexiones dered, si por ejemplo queremos hacer un escanerde puertos es mucho mas eficiente lanzar unoscuantos hilos para realizar varias conexiones a lavez, con 1 0 que el tiempo se reduce bastante.Sobre la coordlnaclon de codlqo en paralelo(categoria donde seengloba lamultihilo) sedice-lPor que cruzo lagallina paralela lacalle?-cruzar la calle Para-lPor que cruzo lagallina paralela lacalle?-Paracalle la cruzarlQue se quiere decir con esto?, que laproqrarnaclon en paralelo implica que mucho

    W W W,h a(K .x c ra e K .~ !

  • 8/4/2019 Programacion en Phyton

    17/18

    hack 0, = aCJ 0 CJ= - = crack. . . ._ .ckxcrock-esww_ho

    c6digo se va a invertir solamente en coordinar elprograma ... y bueno, a quien Ie guste esa parte,pues bien, pero a quien no...La programaci6n en paralelo en un mundo en sfmismo, asl que apenas rasqare la superficieexplicando como crear un hila de ejecuci6nindependiente en Python. Por otro lade nopuedo dejar sin comentar que cada hila es unobjeto distinto iI, asl que si no comprendistebien el capitulo anterior, toca volver.Para crear un hila de ejecuci6n necesitaremosuna clasenueva, que se base en (herede) la claseque sepuede encontrar en threading.Threadfrom threading import Threadclass nuevo_hilo(Thread):Si se sobreescribe (tecnlcamente, se sobrecarga)el _init_ de la clase, en la nueva funci6n hayque lIamar al _init_ original antes de nada,por ejemplo, si queremos que el hila cuentehasta un nurnero que digamos, y que se definaen el _init_ tendremos que hacer.

    def in it (self, tope):Thread. in it (self)self.tope = topePero aun no es un hila de ejecuci6n separado,para esto hayque definir otra funci6n, run:

    d ef r un (s el f) :print 'Ya soy un hiloindependiente'i = 0while i < self.tope:print ii = i+1Para iniciar el hila independiente hay que lIamara la funci6n start del objeto (si,no run), y ya esta,> h = nuevo_hilo(20)

    > h. start ( )Ya soy un hilo independiente> # Aqui ya se separo el hiloo12345678910111213141516171819-1: AnexoEn estes momentos es posible que aunhabiendo comprendido todo 1 0 que se detallaaqul te preguntes como hacer algunas cosas, yes que esto no se escribi6 para ser una gufaextensa sino como introducci6n a laprogramaci6n, Python permite hacer casicualquier cosaque sete ocurra:Manipulaci6n de paquetes a bajo nivel, qraflcos2D y 3D, cifrado y descifrado de datos,bluetooth ... entre las librerfas estandar hayincluso unas para manejar factlrnente FTP,SMTP,archivos ZIP,archivos GZIP...En[http://docs.python.org/release/2.6.6/library/index.html ] se puede encontrar casi todo 1 0 que senecesita saber sobre Python, pero acontinuaci6n dejo una lista de las cosas quecreo que pueden resultar mas interesantes:

    www.ha(K.X(raeK.es

  • 8/4/2019 Programacion en Phyton

    18/18

    hack 0, = aCJ 00=,.: crack. . . ._ .ckxcrock-esww_ho

    http://docs.python.org/release/2.6.6/Iibrary/math.html: Librerfa maternatlcahttp://docs.python.org/release/2.6.6/Iibrary/random.html: Generaci6n de numeros pseudo-aleatorioshttp://docs.python.org/release/2.6.6/Iibrary/os.html: Para hacer scripts mas portableshttp://docs.python.org/release/2.6.6/Iibrary/sys.html: Ejecutar otros programas y dernasgolosinashttp://docs.python.org/release/2.6.6/Iibrary/time.html: Esperas y medici6n de tiempo (i muy utll !)http://docs.python.org/release/2.6.6/Iibrary/socket.html: Mas conexiones de redhttp://docs.python.org/release/2.6.6/Iibrary/ssl.html: Para conexiones cifradas :Dhttp://docs.python.org/release/2.6.6/Iibrary/simplehttpserver.html: Monta un servidor web en 6Ifneashttp://docs.python.org/release/2.6.6/Iibrary/select.html: Para esperar a varios socketshttp:// docs.python.org/release/2.6.6/1 ibra ry/sq Iite3.html: Para usar bases de datos Sqlite3http://docs.python.org/release/2.6.6/Iibrary/zipfile.html: Archivos ZIPhttp:// docs.python.org/release/2.6.6/1 ibra ryIgzi p.html: Archivos GZIPhttp://docs.python.org/release/2.6.6/Iibrary/hashlib.html: Funciones hash

    http:// docs.python.org/release/2.6.6/1 ibra ryItki nter.html: Interfaces grMicas simpleshttp://docs.python.org/release/2.6.6/Iibrary/turtle.html: Graflcos de tortuga (para pasar el rata =P)

    http://docs.python.org/release/2.6.6/Iibrary/mathttp://docs.python.org/release/2.6.6/Iibrary/randhttp://docs.python.org/release/2.6.6/Iibrary/os.hhttp://docs.python.org/release/2.6.6/Iibrary/sys.http://docs.python.org/release/2.6.6/Iibrary/timehttp://docs.python.org/release/2.6.6/Iibrary/sockhttp://docs.python.org/release/2.6.6/Iibrary/ssl.hhttp://docs.python.org/release/2.6.6/Iibrary/simhttp://docs.python.org/release/2.6.6/Iibrary/selehttp://docs.python.org/release/2.6.6/Iibrary/zipfihttp://docs.python.org/release/2.6.6/Iibrary/hashttp://docs.python.org/release/2.6.6/Iibrary/turtlhttp://docs.python.org/release/2.6.6/Iibrary/turtlhttp://docs.python.org/release/2.6.6/Iibrary/hashttp://docs.python.org/release/2.6.6/Iibrary/zipfihttp://docs.python.org/release/2.6.6/Iibrary/selehttp://docs.python.org/release/2.6.6/Iibrary/simhttp://docs.python.org/release/2.6.6/Iibrary/ssl.hhttp://docs.python.org/release/2.6.6/Iibrary/sockhttp://docs.python.org/release/2.6.6/Iibrary/timehttp://docs.python.org/release/2.6.6/Iibrary/sys.http://docs.python.org/release/2.6.6/Iibrary/os.hhttp://docs.python.org/release/2.6.6/Iibrary/randhttp://docs.python.org/release/2.6.6/Iibrary/mat