3.0 legunaje de programacion

6

Click here to load reader

Upload: richard-ore-cayetano

Post on 18-Aug-2015

217 views

Category:

Documents


1 download

DESCRIPTION

python

TRANSCRIPT

3.LenguajesdeProgramacinAutores:JosMaraHerreraFernndez,LuisMiguelSnchezBreaContenidosdeestecaptulo:CaractersticasdeprogramacinElementosdellenguajeComentariosVariablesTiposdedatosListasyTuplasDiccionariosConjuntosListasporcomprensinFuncionesClasesCondicionalesBucleforBuclewhileMdulosSistemadeobjetosExistennumerososmanualesdeprogramacin,ademsdemagnificosyextensosmanualesoficiales.Sirvadeejemplo,http://pyspanishdoc.sourceforge.net/tut/tut.html, una amplia gua en espaol que a pesar de ser escrita en 2005 nosproporcionar toda la informacn que necesitamos. Nosotros en esta seccin nos limitaremos a aportar un resumentomado de la wikipedia para que el lector pueda seguir el resto del libro de forma cmoda aunque recomendamosvisitar tanto la fuente original de la informacin, http://es.wikipedia.org/wiki/Python, como la gua que acabamos demencionar.3.1.CaractersticasdeprogramacinNohacefaltadefinirlosdatos.Lasfuncionessealmacenanenmdulos,quepuedenserdeltamaoquedeseemos.Esnecesariodeclararlosmodulosylasfuncionesdeotrosmdulosquesevanaimplementar.Hayinfinidaddemdulosdecualquierareadeinters.3.1.1.ElementosdellenguajePythonfuediseadoparaserledoconfacilidad.Unadesuscaractersticaseselusodepalabrasdondeotroslenguajesutilizaran smbolos. Por ejemplo, los operadores lgicos !, || y && en Python se escriben not, or y and,respectivamente.Elcontenidodelosbloquesdecdigo(bucles,funciones,clases,etc.)esdelimitadomedianteespaciosotabuladores,conocidoscomoindentacin,antesdecadalneaderdenespertenecientesalbloque.Pythonsediferenciaasdeotroslenguajes de programacin que mantienen como costumbre declarar los bloques mediante un conjunto de caracteres,normalmente entre llaves {}. Se pueden utilizar tanto espacios como tabuladores para identar el cdigo, pero serecomiendanomezclarlos.Debido al significado sintctico de la indentacin, una instruccin debe estar contenida en lnea. No obstante, si porlegibilidadsequieredividirlainstruccinenvariaslneas,aadiendounabarrainvertidaalfinaldeunalnea,seindicaquelainstruccincontinaenlasiguiente.lista=['valor1','valor2','valor3']cadena='Estoesunacadenabastantelarga'queesequivalentealista=['valor1','valor2'\,'valor3']cadena='Estoesunacadena'\'bastantelarga'3.1.2.ComentariosTABLA DE CONTENI DOSAutoresQuesnuevoLicenciaDescargasReferencias1.Introduccin2.PuestaenMarcha3.LenguajesdeProgramacin4.MdulosCientficos5.EcuacionesdeMaxwellenelvaco6.Polarizacin7.Interaccinradiacinmateria8.ndicederefraccin:modelomicroscpico9.EcuacionesdeFresnel10.Pulsosdeluz11.Interferencias12.Mdulosdeptica13.Difraccinencampocercano14.Difraccinencampolejano15.RedesdeDifraccin16.ProcesadopticodelainformacinBSQUEDA IraIntroduzcalostrminosdebsquedaounnombredemdulo,claseofuncin.Computacin cientfica con Python para mdulos de evaluacin continuaen asignaturas de ciencias aplicadasANTERI OR|SI GUI ENTELoscomentariossepuedenponerdedosformas.Laprimeraymsapropiadaparacomentarioslargosesutilizandolanotacincomentario,tresapostrofesdeaperturaytresdecierre.'''ComentariomslargoenunalneaenPython'''Lasegundanotacinutilizaelsmbolo#delantedelalneaacomentar,print"Holamundo"#TambinesposibleaadiruncomentarioalfinaldeunalneadecdigoEl intrprete no tiene en cuenta los comentarios, lo cual es til si deseamos poner informacin adicional en nuestrocdigocomo,porejemplo,unaexplicacinsobreelcomportamientodeunaseccindelprograma.3.1.3.VariablesLasvariablessedefinendeformadinmica,loquesignificaquenosetienequeespecificarculessutipodeantemanoy puede tomar distintos valores en otro momento, incluso de un tipo diferente al que tena previamente. Se usa elsmbolo=paraasignarvalores.x=1x="Estavariableesunacadena"#Estoesposibleporquelostipossonasignadosdinmicamente.3.1.4.TiposdedatosLostiposdedatossepuedenresumirenestatabla:Tipo Clase Notas Ejemplostr Cadena Inmutable Cadenaunicode Cadena VersinUnicodedestr uCadenalist Secuencia Mutable,puedecontenerobjetosdediversostipos [4.0,Cadena,True]tuple Secuencia Inmutable,puedecontenerobjetosdediversostipos (4.0,Cadena,True)set Conjunto Mutable,sinorden,nocontieneduplicados set([4.0,Cadena,True])frozenset Conjunto Inmutable,sinorden,nocontieneduplicados frozenset([4.0,Cadena,True])dict Mapping Grupodeparesclave:valor {key1:1.0,key2:False}int Nmeroentero Precisin fija, convertido en long en caso deoverflow.42long Nmeroentero Precisinarbitraria 42L456966786151987643Lfloat Nmerodecimal Comaflotantededobleprecisin 3.1415927complex NmerocomplejoParterealyparteimaginariaj. (4.5+3j)bool Booleano Valorbooleanoverdaderoofalso TrueoFalseMutable:sisucontenido(odichovalor)puedecambiarseentiempodeejecucin.Inmutable:sisucontenido(odichovalor)nopuedecambiarseentiempodeejecucin.3.1.5.ListasyTuplasParadeclararunalistaseusanloscorchetes[],encambio,paradeclararunatuplaseusanlosparntesis().Enambasloselementosseseparanporcomas,yenelcasodelastuplasesnecesarioquetengancomomnimounacoma.Tanto las listas como las tuplas pueden contener elementos de diferentes tipos. No obstante las listas suelenusarse para elementos del mismo tipo en cantidad variable mientras que las tuplas se reservan para elementosdistintosencantidadfija.Paraaccederaloselementosdeunalistaotuplaseutilizaunndiceentero(empezandopor0,nopor1).Sepuedenutilizarndicesnegativosparaaccederelementosapartirdelfinal,porejemploparaaccederalltimondicedeberamosdeusar1.Las listas se caracterizan por ser mutables, es decir, se puede cambiar su contenido en tiempo de ejecucin,mientrasquelastuplassoninmutablesyaquenoesposiblemodificarelcontenidounavezcreada.Listas:>>>lista=["abc",42,3.1415]#Definicindeunalistaconelementosdedistintotipo.>>>lista[0]#Accederaunelementoporsundice,enestecasoalprimero.'abc'>>>lista[1]#Accederaunelementousandounndicenegativo,enestecasoelltimo.3.1415>>>lista.append(True)#Aadirunelementoalfinaldelalista.>>>lista['abc',42,3.1415,True]>>>dellista[3]#Borraunelementodelalistausandounndice(enestecaso:True).>>>lista['abc',42,3.1415]>>>lista[0]="xyz"#Reasignarelvalordelprimerelementodelalista.>>>lista['xyz',42,3.1415]>>>lista[0:2]#Mostrarloselementosdelalistadelndice"0"al"2"(sinincluiresteltimo).['xyz',42]>>>lista_anidada=[lista,[True,42L]]#Esposibleanidarlistas>>>lista_anidada[['xyz',42,3.1415],[True,42L]]>>>lista_anidada[1][0]#Accederaunelementodeunalistadentrodeotralista(delsegundoelemento,mostrarelprimerelemento).TrueTuplas:>>>tupla=("abc",42,3.1415)#Definicindeunatuplaconelementosdedistintotipo.>>>tupla[0]#Accederaunelementoporsundiceenestecasoalprimero.'abc'>>>deltupla[0]#Noesposibleborrar(niaadir)unelementoenunatupla,loqueprovocarunaexcepcin.(Excepcin)#Tampocoesposiblereasignarelvalordeunelementoenunatupla,loquetambinprovocarunaexcepcin.>>>tupla[0]="xyz"(Excepcin)>>>tupla[0:2]#Mostrarloselementosdelatupladelndice"0"al"2"(sinincluiresteltimo).('abc',42)>>>tupla_anidada=(tupla,(True,3.1415))#Tambinesposibleanidartuplas.>>>1,2,3,"abc"#Estotambinesunatupla,aunqueesrecomendableponerlaentreparntesis(recuerdaquerequiere,almenos,unacoma).(1,2,3,'abc')>>>(1)#Aunqueentreparntesis,estonoesunatupla,yaquenoposeealmenosunacoma,porloquenicamenteaparecerelvalor.1>>>(1,)#Encambio,enesteotrocaso,sesunatupla.(1,)>>>(1,2)#Conmsdeunelementonoesnecesarialacomafinal.(1,2)>>>(1,2,)#Aunqueagregarlanomodificaelresultado.(1,2)3.1.6.DiccionariosPara declarar un diccionario se usan las llaves { }. Contienen elementos separados por comas, donde cadaelementoestformadoporunparclave:valor(elsmbolo:separalaclavedesuvalorcorrespondiente).Losdiccionariossonmutables,esdecir,sepuedecambiarelcontenidodeunvalorentiempodeejecucin.Encambio,lasclavesdeundiccionariodebenserinmutables.Estoquieredecir,porejemplo,quenopodremosusarnilistasnidiccionarioscomoclaves.Elvalorasociadoaunaclavepuedeserdecualquiertipodedato,inclusoundiccionario.>>>diccionario={"cadena":"abc","numero":42,"lista":[True,42L]}#Diccionarioquetienediferentesvaloresporcadaclave,inclusounalista.>>>diccionario["cadena"]#Usandounaclave,seaccedeasuvalor.'abc'>>>diccionario["lista"][0]#Accederaunelementodeunalistadentrodeunvalor(delvalordelaclave"lista",mostrarelprimerelemento).True>>>diccionario["cadena"]="xyz"#Reasignarelvalordeunaclave.>>>diccionario["cadena"]'xyz'>>>diccionario["decimal"]=3.1415927#Insertarunnuevoelementoclave:valor.>>>diccionario["decimal"]3.1415927>>>diccionario_mixto={"tupla":(True,3.1415),"diccionario":diccionario}#Tambinesposiblequeunvalorseaundiccionario>>>diccionario_mixto["diccionario"]["lista"][1]#Accederaunelementodentrodeunalista,queseencuentradentrodeundiccionario.42L>>>diccionario={("abc",):42}#Sesposiblequeunaclaveseaunatupla,puesesinmutable.>>>diccionario={["abc"]:42}#Noesposiblequeunaclaveseaunalista,puesesmutable,loqueprovocarunaexcepcin.(Excepcin)3.1.7.ConjuntosLosconjuntosseconstruyenmedianteset(items)dondeitemsescualquierobjetoiterable,comolistasotuplas.Losconjuntosnomantienenelordennicontienenelementosduplicados.Se suelen utilizar para eliminar duplicados de una secuencia, o para operaciones matemticas comointerseccin,unin,diferenciaydiferenciasimtrica.>>>conjunto_inmutable=frozenset(["a","b","a"])#Seutilizaunalistacomoobjetoiterable.>>>conjunto_inmutablefrozenset(['a','b'])>>>conjunto1=set(["a","b","a"])#Primerconjuntomutable.>>>conjunto1set(['a','b'])>>>conjunto2=set(["a","b","c","d"])#Segundoconjuntomutable.>>>conjunto2set(['a','c','b','d'])#Recuerda,nomantienenelorden,comolosdiccionarios.>>>conjunto1&conjunto2#Interseccinset(['a','b'])>>>conjunto1|conjunto2#Unin.set(['a','c','b','d'])>>>conjunto1conjunto2#Diferencia(1).set([])>>>conjunto2conjunto1#Diferencia(2).set(['c','d'])>>>conjunto1^conjunto2#Diferenciasimtrica.set(['c','d'])3.1.8.ListasporcomprensinUnalistaporcomprensin(eningls:listcomprehension)esunaexpresincompactaparadefinirlistas.Aligualquelambda,apareceenlenguajesfuncionales.Ejemplos:>>>range(5)#Lafuncin"range"devuelveunalista,empezandoen0yterminandoconelnmeroindicadomenosuno.[0,1,2,3,4]>>>[i*iforiinrange(5)]#Porcadaelementodelrango,lomultiplicaporsmismoyloagregaalresultado.[0,1,4,9,16]>>>lista=[(i,i+2)foriinrange(5)].>>>lista[(0,2),(1,3),(2,4),(3,5),(4,6)]3.1.9.FuncionesLas funciones se definen con la palabra clave def, seguida del nombre de la funcin y sus argumentos entreparntesisparafinalizarcon:,esdecir,>>>defmi_funcion(arg1,arg2,...,argN):Otra forma de escribir funciones, aunque menos utilizada, es con la palabra clave lambda. lambda es uncosntructorquesirverparaejecutarfuncionesannimas,esdecirfuncionessinningnnombreperoquecreanunareferenciaaunobjetofuncin.Lasintaxisdelambdaenpythoneslambda:Elvalordevueltoenlasfuncionescondefsereldadoconlainstruccinreturn.lambdanonecesitadereturnpararetornarunvalor,yaqueestimplcito,puestoquelafuncinenteradebeserunanicaexpresin.def>>>defsuma(x,y=2):...returnx+y#Devuelvelasumadelvalordelavariable"x"yelvalorde"y"....>>>suma(4)#Lavariable"y"nosemodifica,siendosuvalor:26>>>suma(4,10)#Lavariable"y"ssemodifica,siendosunuevovalor:1014lambda>>>suma=lambdax,y=2:x+y>>>suma(4)#Lavariable"y"nosemodifica,siendosuvalor:26>>>suma(4,10)#Lavariable"y"ssemodifica,siendosunuevovalor:10143.1.10.ClasesLas clases se definen con la palabra clave class, seguida del nombre de la clase y, si hereda de otra clase, elnombredeesta.EnPython2.xesrecomendablequeunaclaseherededeobject,enPython3.xestoyanoharfalta.Enunaclaseunmtodoequivaleaunafuncin,yunapropiedadequivaleaunavariable.__init__ es un mtodo especial que se ejecuta al instanciar la clase, se usa generalmente para inicializarpropiedadesyejecutarmtodosnecesarios.AligualquetodoslosmtodosenPython,debeteneralmenosunparmetro,generalmenteseutilizaself.Elrestodeparmetrossernlosqueseindiquenalinstanciarlaclase.Laspropiedadesquesedeseequeseanaccesiblesdesdefueradelaclasesedebendeclararusandoself.delantedelnombre.Enpythonnoexisteelconceptodeencapsulacin,porloqueelprogramadordebeserresponsabledeasignarlosvaloresalaspropiedades>>>classPersona(object):...def__init__(self,nombre,edad):...self.nombre=nombre#UnaPropiedadcualquiera....self.edad=edad#Otrapropiedadcualquiera....defmostrar_edad(self):#Esnecesarioque,almenos,tengaunparmetro,generalmente:"self"....printself.edad#mostrandounapropiedad....defmodificar_edad(self,edad):#ModificandoEdad....ifedad150:#Secompruebaquelaedadnoseamenorde0(algoimposible),nimayorde150(algorealmentedifcil)....returnFalse...else:#Siestenelrango0150,entoncessemodificalavariable....self.edad=edad#Semodificalaedad....>>>p=Persona("Alicia",20)#Instanciamoslaclase,comosepuedever,noseespecificaelvalorde"self">>>p.nombre#Lavariable"nombre"delobjetosesaccesibledesdefuera.'Alicia'>>>p.nombre="Andrea"#Yportanto,sepuedecambiarsucontenido.>>>p.nombre'Andrea'>>>p.mostrar_edad()#Podemosllamaraunmtododelaclase.20>>>p.modificar_edad(21)#Ypodemoscambiarlaedadusandoelmtodoespecficoquehemoshechoparahacerlodeformacontrolada.>>>p.mostrar_edad()213.1.11.CondicionalesUnasentenciacondicionalifejecutasubloquedecdigointernoslosisecumpleciertacondicin.Sedefineusandolapalabra clave if seguida de la condicin, y el bloque de cdigo. Condiciones adicionales, si las hay, se introducenusandoelif seguida de la condicin y su bloque de cdigo. Todas las condiciones se evalan secuencialmente hastaencontrar la primera que sea verdadera, y su bloque de cdigo asociado es el nico que se ejecuta. Opcionalmente,puedehaberunbloquefinal(lapalabraclaveelseseguidadeunbloquedecdigo)queseejecutaslocuandotodaslascondicionesresultanfalsas.>>>verdadero=True>>>ifverdadero:#Noesnecesarioponer"verdadero==True"....print"Verdadero"...else:...print"Falso"...Verdadero>>>lenguaje="Python">>>iflenguaje=="C":#lenguajenoes"C",porloqueestebloqueseobviaryevaluarlasiguientecondicin....print"Lenguajedeprogramacin:C"...eliflenguaje=="Python":#Sepuedenaadirtantosbloques"elif"comosequiera....print"Lenguajedeprogramacin:Python"...else:#Encasodequeningunadelasanteriorescondicionesfueracierta,seejecutaraestebloque....print"Lenguajedeprogramacin:indefinido"...Lenguajedeprogramacin:Python>>>ifverdaderoandlenguaje=="Python":#Usode"and"paracomprobarqueambascondicionessonverdaderas....print"VerdaderoyLenguajedeprogramacin:Python"...VerdaderoyLenguajedeprogramacin:Python3.1.12.BucleforEl bucle for es similar a foreach en otros lenguajes. Recorre un objeto iterable, como una lista, una tupla o ungenerador, y por cada elemento del iterable ejecuta el bloque de cdigo interno. Se define con la palabra clave forseguida de un nombre de variable, seguido de in, seguido del iterable, y finalmente el bloque de cdigo interno. Encadaiteracin,elelementosiguientedeliterableseasignaalnombredevariableespecificado:>>>lista=["a","b","c"]>>>foriinlista:#Iteramossobreunalista,queesiterable....printi...abc>>>cadena="abcdef">>>foriincadena:#Iteramossobreunacadena,quetambinesiterable....printi,#Aadiendounacomaalfinalhacemosquenointroduzcaunsaltodelnea,sinounespacio....abcdef3.1.13.BuclewhileEl bucle while evala una condicin y, si es verdadera, ejecuta el bloque de cdigo interno. Contina evaluando yejecutando mientras la condicin sea verdadera. Se define con la palabra clave while seguida de la condicin, y acontinuacinelbloquedecdigointerno:>>>numero=0>>>whilenumero>>importos#Mduloqueproveefuncionesdelsistemaoperativo>>>os.name#Devuelveelnombredelsistemaoperativo'posix'>>>os.mkdir("/tmp/ejemplo")#Creaundirectorioenlarutaespecificada>>>importtime#Mduloparatrabajarconfechasyhoras>>>time.strftime("%Y%m%d%H:%M:%S")#Dndoleunciertoformato,devuelvelafechay/ohoraactual'2010081018:01:17'NOTA: En http://pyspanishdoc.sourceforge.net/modindex.html podemos encontrar el ndice de mdulos estndar depython.3.1.15.SistemadeobjetosEn Python todo es un objeto (incluso las clases). Las clases, al ser objetos, son instancias de una metaclase. Pythonademssoportaherenciamltipleypolimorfismo.>>>cadena="abc"#Unacadenaesunobjetode"str">>>cadena.upper()#Alserunobjeto,poseesuspropiosmtodos'ABC'>>>lista=[True,3.1415]#Unalistaesunobjetode"list">>>lista.append(42L)#Unalistatambin(aligualquetodo)esunobjeto,ytambinposeesuspropiosmtodos>>>lista[True,3.1415,42L]ANTERIOR|SIGUIENTEMOSTRARELCDIGOCopyright2013,LuisMiguelSnchezBrea.CreadoconSphinx