Python para Principiantes
Python para Principiantes
Python para Principiantes
Eugenia Bahit 2012. Creative Commons Atribucin-NoComercial 3.0 Comparte el conocimiento en libertad!
Python para Principiantes de Eugenia Bahit se distribu e ba!o una "icencia Creative Commons AtribucinNoComercial-#in$erivadas 3.0 %n&orted.
Comparte el conocimiento
Bajo las siguientes condiciones: (econocer res&etar la autor)a de la obra No hacer uso comercial de ella No alterar el contenido
htt&*++,,,.sa-ecreative.org+,or.+120/302002120
@eugeniabahit
www.eugeniabahit.com
Imagen Twitter Follow Me Aha-Soft.com Creati e Commons !Attribution-Share A"i#e $.0 %n&orte'(
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
www.detodoprogramacion.com
Descarga todos los ejemplos de este libro los talleres del curso' ingresando en
htt&*++curso-& thon.eugeniabahit.com+sources.tar.g4
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
www.detodoprogramacion.com
00
!abla de Contenidos "#ndice$......................................................................................................................... % Preparaci&n del entorno de desarrollo......................................................................................................... ' 3ntroduccin al #istema 5&erativo 6N%+"inu7...........................................................................................10 3nstalacin de %buntu 6N%+"inu7 en 8indo,s....................................................................................10 3nstalacin de %buntu 6N%+"inu7 como 9nico #istema 5&erativo.......................................................11 3nstalando : thon...................................................................................................................................... 12 3nstalacin de un #hell interactivo me!orado..............................................................................................10 Nin!a-3$E................................................................................................................................................... 1; 3nstalacin de Ba4aar................................................................................................................................ 12 Estructura y elementos del lenguaje........................................................................................................... () Elementos del "engua!e............................................................................................................................ 20 <ariables............................................................................................................................................... 20 =i&os de datos...................................................................................................................................... 21 5&eradores Aritm>ticos........................................................................................................................ 22 Comentarios......................................................................................................................................... 23 =i&os de datos com&le!os..................................................................................................................... 20 =u&las.............................................................................................................................................. 20 "istas............................................................................................................................................... 20 $iccionarios..................................................................................................................................... 2; Estructuras de Control de ?lu!o................................................................................................................. 22 3dentacin............................................................................................................................................. 22 Encoding............................................................................................................................................... 2/ Asignacin m9lti&le............................................................................................................................... 2/ Estructuras de control de -lu!o condicionales........................................................................................21 Estructuras de control iterativas............................................................................................................ 31 Bucle ,hile...................................................................................................................................... 31 Bucle -or.......................................................................................................................................... 32 *&dulos+ pa,uetes y namespaces.............................................................................................................. Creando mdulos em&a@uetados.............................................................................................................. 30 3m&ortando mdulos enteros................................................................................................................ 30 Names&aces......................................................................................................................................... 3; Alias................................................................................................................................................. 3; 3m&ortar mdulos sin utili4ar names&aces.......................................................................................3; -unciones de.inidas por el usuario............................................................................................................. / $e-iniendo -unciones................................................................................................................................. 3A #obre los &arBmetros........................................................................................................................... 3A :arBmetros &or omisin................................................................................................................... 31 Ce ,ords como &arBmetros............................................................................................................ 31 :arBmetros arbitrarios..................................................................................................................... 00 $esem&a@uetado de &arBmetros.................................................................................................... 00 "lamadas de retorno.................................................................................................................................. 01 #aber si una -uncin e7iste &uede ser llamada..................................................................................02 "lamadas recursivas ................................................................................................................................. 03
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
www.detodoprogramacion.com
#obre la -inalidad de las -unciones ........................................................................................................... 03 0ntroducci&n a la 1rientaci&n a 1bjetos..................................................................................................... %% :ensar en ob!etos...................................................................................................................................... 0; D E@u> es un ob!etoF............................................................................................................................ 0; Ahora E@u> me dices si describimos las cualidades de un ob!etoF......................................................0; :ero algunos ob!etos' tambi>n se com&onen de otros ob!etos.............................................................02 D tambi>n ha ob!etos @ue com&arten caracter)sticas con otros ob!etos.............................................0A "os ob!etos' tambi>n tienen la ca&acidad de Ghacer cosasH.................................................................;0 5b!etos mBs ob!etos* la &arte di-)cil................................................................................................... ;1 Al &an' &an. D al vino' vino. "as cosas &or su nombre....................................................................;2 :rogramacin 5rientada a 5b!etos........................................................................................................... ;3 Elementos Caracter)sticas de la :55............................................................................................... ;3 Clases.............................................................................................................................................. ;3 :ro&iedades.................................................................................................................................... ;0 I>todos........................................................................................................................................... ;0 5b!eto.............................................................................................................................................. ;; Jerencia* caracter)stica &rinci&al de la :55...................................................................................;; Accediendo a los m>todos &ro&iedades de un ob!eto........................................................................;2 *2todos principales del 1bjeto 3tring....................................................................................................... 4) I>todos de -ormato................................................................................................................................... ;1 Convertir a ma 9scula la &rimera letra.................................................................................................;1 Convertir una cadena a min9sculas...................................................................................................... ;1 Convertir una cadena a ma 9sculas..................................................................................................... ;1 Convertir ma 9sculas a min9sculas viceversa...................................................................................;1 Convertir una cadena en ?ormato =)tulo..............................................................................................;1 Centrar un te7to.................................................................................................................................... 20 Alinear te7to a la i4@uierda................................................................................................................... 20 Alinear te7to a la derecha..................................................................................................................... 20 (ellenar un te7to ante&oniendo ceros..................................................................................................20 I>todos de B9s@ueda............................................................................................................................... 22 Contar cantidad de a&ariciones de una subcadena..............................................................................22 Buscar una subcadena dentro de una cadena.....................................................................................22 I>todos de <alidacin............................................................................................................................... 23 #aber si una cadena comien4a con una subcadena determinada........................................................23 #aber si una cadena -inali4a con una subcadena determinada............................................................23 #aber si una cadena es al-anum>rica................................................................................................... 23 #aber si una cadena es al-ab>tica........................................................................................................ 20 #aber si una cadena es num>rica........................................................................................................ 20 #aber si una cadena contiene solo min9sculas....................................................................................20 #aber si una cadena contiene solo ma 9sculas...................................................................................2; #aber si una cadena contiene solo es&acios en blanco.......................................................................2; #aber si una cadena tiene ?ormato $e =)tulo......................................................................................2; I>todos de #ustitucin............................................................................................................................. 22 $ar -ormato a una cadena' sustitu endo te7to dinBmicamente............................................................22 (eem&la4ar te7to en una cadena......................................................................................................... 22 Eliminar caracteres a la i4@uierda derecha de una cadena...............................................................22 Eliminar caracteres a la i4@uierda de una cadena................................................................................22 Eliminar caracteres a la derecha de una cadena..................................................................................2/ I>todos de unin divisin....................................................................................................................... 2A %nir una cadena de -orma iterativa....................................................................................................... 2A :artir una cadena en tres &artes' utili4ando un se&arador...................................................................2A :artir una cadena en varias &artes' utili4ando un se&arador................................................................2A :artir una cadena en en l)neas............................................................................................................. 2A E!ercicio..................................................................................................................................................... /0 E!ercicio NK1......................................................................................................................................... /0 E!ercicio NK2......................................................................................................................................... /0 E!ercicio NK3......................................................................................................................................... /0 *2todos principales del objeto list............................................................................................................. /( I>todos de agregado................................................................................................................................ /2
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
www.detodoprogramacion.com
Agregar un elemento al -inal de la lista................................................................................................./2 Agregar varios elementos al -inal de la lista......................................................................................... /2 Agregar un elemento en una &osicin determinada............................................................................./2 I>todos de eliminacin............................................................................................................................. /3 Eliminar el 9ltimo elemento de la lista................................................................................................... /3 Eliminar un elemento &or su )ndice....................................................................................................... /3 Eliminar un elemento &or su valor........................................................................................................ /3 I>todos de orden...................................................................................................................................... /0 5rdenar una lista en reversa Linvertir ordenM......................................................................................../0 5rdenar una lista en -orma ascendente................................................................................................/0 5rdenar una lista en -orma descendente............................................................................................../0 I>todos de b9s@ueda............................................................................................................................... /; Contar cantidad de a&ariciones elementos........................................................................................... /; 5btener n9mero de )ndice.................................................................................................................... /; Ane7o sobre listas tu&las........................................................................................................................ /2 Conversin de ti&os.............................................................................................................................. /2 Concatenacin sim&le de colecciones.................................................................................................. /2 <alor mB7imo m)nimo......................................................................................................................... /2 Contar elementos................................................................................................................................. // *2todos principales del objeto dict............................................................................................................ /) I>todos de eliminacin............................................................................................................................. /1 <aciar un diccionario............................................................................................................................. /1 I>todos de agregado creacin............................................................................................................... /1 Co&iar un diccionario............................................................................................................................ /1 Crear un nuevo diccionario desde las claves de una secuencia.........................................................../1 Concatenar diccionarios....................................................................................................................... A0 Establecer una clave valor &or de-ecto.............................................................................................. A0 I>todos de retorno.................................................................................................................................... A1 5btener el valor de una clave............................................................................................................... A1 #aber si una clave e7iste en el diccionario...........................................................................................A1 5btener las claves valores de un diccionario.....................................................................................A1 5btener las claves de un diccionario.................................................................................................... A1 5btener los valores de un diccionario................................................................................................... A2 5btener la cantidad de elementos de un diccionario............................................................................A2 El objeto -ile: trabajando con archi5os...................................................................................................... ) #obre el ob!eto ?ile.................................................................................................................................... A0 Iodos de A&ertura............................................................................................................................... A0 I>todos del 5b!eto ?ile............................................................................................................................. A2 :ro&iedades del ob!eto -ile......................................................................................................................... A/ Cerrando archivos de -orma automBtica.................................................................................................... AA 6n Paseo por los *&dulos de la librer#a est7ndar.....................................................................................)' Idulos de sistema................................................................................................................................... 10 Idulo os............................................................................................................................................. 10 Archivos directorios....................................................................................................................... 10 El mdulo os las variables de entorno..........................................................................................11 os.&ath............................................................................................................................................. 11 Idulo s s........................................................................................................................................... 12 <ariables del mdulo s s................................................................................................................. 12 I>todos del mdulo s s.................................................................................................................. 12 Idulo sub&rocess............................................................................................................................... 13 Ca&turando la salida con :o&en...................................................................................................... 13 Entradas salidas @ue &ueden ser ca&turadas con :o&en.............................................................10 stdout.......................................................................................................................................... 10 stdin............................................................................................................................................ 10 stderr.......................................................................................................................................... 10 %tili4ando tuber)as &ara ca&turar la salida.......................................................................................10 Idulos &ara el &rogramador.................................................................................................................... 12 $ebuguear cdigo con :db.................................................................................................................. 12 $ocumentar tu a&& con & doc.............................................................................................................. 1/
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
www.detodoprogramacion.com
:robar el cdigo antes de enviarlo a &roduccin con doctest...............................................................1A Idulos @ue resuelven necesidades -uncionales....................................................................................100 5btener datos aleatorios.................................................................................................................... 100 8ra&ear un te7to................................................................................................................................ 101 Idulos e 3nternet................................................................................................................................... 102 Acceder al navegador 8eb................................................................................................................. 102 Conectarse v)a ?=:............................................................................................................................ 102 Conectarse a un servidor ?=:....................................................................................................... 102 0ntroducci&n a *y39: y el lenguaje 39:................................................................................................. (;% Acerca de I #N".................................................................................................................................... 10; 3nstalacin con-iguracin de I #N"................................................................................................ 10; 3niciar' reiniciar detener el servidor I #N".....................................................................................102 Administracin de I #N".................................................................................................................. 10/ Conectarse desconectarse al servidor........................................................................................10/ Comandos &ara administrar I #N" dede el shell interactivo.......................................................10/ #obre el lengua!e #N"............................................................................................................................. 10A =i&os de datos mBs comunes LrecomendadosM..................................................................................10A #intB7is bBsica de las sentencias #N"............................................................................................... 10A Crear tablas en una base de datos................................................................................................ 101 3nsertar datos en una tabla............................................................................................................ 110 #eleccionar registros..................................................................................................................... 110 Iodi-icar registros......................................................................................................................... 111 Eliminar registros........................................................................................................................... 111 Consultas avan4adas......................................................................................................................... 112 "a clBusula 8JE(E...................................................................................................................... 112 5rdenando consultas* la clBusula 5($E( BD..............................................................................113 Alias de tablas cam&os.................................................................................................................... 110 ?unciones del lengua!e #N" de I #N"............................................................................................. 110 Contar la cantidad de registros* C5%N=LM.....................................................................................11; #umar totales* #%ILM.................................................................................................................... 11; Concatenar cadenas* C5NCA=LM.................................................................................................. 11; Convertir a min9sculas ma 9sculas* "CA#ELM %CA#ELM.........................................................11; (eem&la4ar datos* (E:"ACELM.................................................................................................... 11; 5btener los &rimeros o 9ltimos caracteres* "E?=LM (36J=LM......................................................11; (edondear n9meros* (5%N$LM.................................................................................................... 11; 5btener solo la -echa de un cam&o $A=E=3IE o =3IE#=AI:* $A=ELM......................................112 5btener una -echa -ormateada* $A=EO?5(IA=LM.......................................................................112 5btener el registro con el valor mB7imo m)nimo* IAPLM I3NLM................................................112 5&timi4acin de bases de $atos............................................................................................................. 112 =odos los registros deben tener un 3$ 9nico.......................................................................................112 Crear )ndices en las tablas................................................................................................................. 11/ 3ndica cuBles cam&os no &ueden ser nulos........................................................................................11/ %tili4a el motor 3nno$B....................................................................................................................... 11/ Bases de datos relacionales.................................................................................................................... 111 Bases de datos en Python con *y39:.................................................................................................... (22 3ntroduccin a bases de datos con : thon.............................................................................................. 123 Conectarse a la base de datos e!ecutar consultas................................................................................123 %na -orma sim&le de acceder a bases de datos.................................................................................120 3nsertar datos................................................................................................................................. 120 #eleccionar todos los registros...................................................................................................... 120 #eleccionar solo registros coincidentes......................................................................................... 120 Eliminar registros........................................................................................................................... 12; Actuali4ar datos............................................................................................................................. 12; Corriendo Python <pps en la =eb............................................................................................................ (28 3ntroduccin............................................................................................................................................. 12/ : thon ba!o A&ache................................................................................................................................. 12A ENu> necesitamosF............................................................................................................................ 12A 1. 3nstalacin de modO,sgi en A&ache..........................................................................................12A 2. Crear la estructura de directorios &ara nuestra a&licacin.........................................................12A
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
www.detodoprogramacion.com
3. Crear un controlador &ara la a&licacin.....................................................................................121 0. Con-igurar el <irtualJost............................................................................................................ 130 %tili4ando environ &ara mane!ar &eticiones del usuario...........................................................................131 En5iando e>mails con .ormato ?!*: desde Python...............................................................................( :a@uetes necesarios............................................................................................................................... 130 Env)o de e-mail desde : thon................................................................................................................. 130 Env)o de e-mails a m9lti&les destinatarios.......................................................................................... 132 Agregar una direccin de res&uesta di-erente....................................................................................132
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
www.detodoprogramacion.com
01
2. : thon 2./
Comen4aremos instalando todo nuestro sistema' &ara crear un entorno de desarrollo &ro&icio' &ara traba!ar con : thon. A tal -in' nos valdremos de las siguientes herramientas tecnolog)as* 1. #istema 5&erativo 6N%+"inu7* %buntu 11.10 Lo su&eriorM 3. i: thon L#hell interactivo me!oradoM 0. Nin!a-3$E L3$E de desarrolloM ;. Ba4aar L#istema de Control de <ersiones distribuidoM
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
'
www.detodoprogramacion.com
(;
www.detodoprogramacion.com
eli!as. :ara instalar %buntu 8indo,s 3nstaller' sigue las instrucciones de los pasos 2 y de la 6G: de descarga' las cuales &odrBs visuali4ar &ulsando el botn G#ho, me ho,H de cada uno de los &asos.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
((
www.detodoprogramacion.com
Instalando P't(on
%na ve4 @ue ha as instalado tu distribucin 6N%+"inu7' a tendrBs : thon instalado en tu sistema. :ara com&robarlo' abres una terminal L&resiona Alt S ?0 luego escribe en el cam&o de b9s@ueda gnome-terminalM escribe & thon como se muestra a continuacin*
eugenia@cochito:~$ python Python 2.7.2+ (default, Oct 4 2011, 20:03:08) [GCC 4 ! 1" on linu#2 $%&e 'hel&', 'co&%(ight', 'c(edit)' o( 'licen)e' fo( *o(e info(*ation +++
"o @ue verBs en &antalla' es el #hell interactivo de : thon. Para salir del 3hell interacti5o+ pulsa las teclas Ctrl H D.
eugenia@cochito:~$ &%thon ,%thon 2 - 2. (default, Oct 4 2011, 20:03:08) [GCC 4 ! 1" on linu#2 $%&e 'hel&', 'co&%(ight', 'c(edit)' o( 'licen)e' fo( *o(e info(*ation +++ &(int '/ola 0undo1' /ola 0undo1 +++
#i en lugar del #hell interactivo' ves un mensa!e de error similar a G& thon* orden no encontradaH' deberBs seguir los siguientes &asos &ara instalarlo* Actuali4a la lista de los re&ositorios*
eugenia@cochito:~$ )udo a&t2get u&date
3nstala : thon*
eugenia@cochito:~$ )udo a&t2get in)tall &%thon2 -
31BGE :13 C1*<CD13 sudo: te convierte en su&er usuario. Tnico usuario @ue tiene &ermisos &ara instalar &a@uetes en tu sistema o&erativo. apt>get: es la utilidad &ara mane!ar &a@uetes en distribuciones 6N%+"inu7 basadas en $ebian. Alternativamente' &uedes utili4ar
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
(2
www.detodoprogramacion.com
el comando aptitude en ve4 de a&t-get. update: o&cin de a&t-get @ue sincroni4a los archivos del )ndice de &a@uetes con los re&ositorios o-iciales Ldicho de otra -orma' obtiene un )ndice de actuali4acionesM upgrade: o&cin de a&t-get @ue actuali4a el sistema. install: es la o&cin de a&t-get @ue indica @ue se instalarBn uno o mBs &a@uetes
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
www.detodoprogramacion.com
:ara e!ecutar el nuevo shell interactivo' solo deberBs escribir el comando i& thon*
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
(%
www.detodoprogramacion.com
"in)a*I+,
Nin!a-3$E es un Entorno 3ntegrado de $esarrollo 1 @ue nos &ermitirB' crear &ro ectos en : thon' al tiem&o de ir e!ecutando nuestros cdigos corrigiendo eventuales errores @ue >stos' &uedan &resentar.
:ara instalar Nin!a-3$E en tu ordenador' desde la terminal' e!ecuta los siguientes comandos* 1M Agrega el ::A de Nin!a-3$E*
)udo a&t2add2(e&o)ito(% &&a:nin3a2ide2de4elo&e()5dail%
3M 3nstala Nin!a-3$E*
)udo a&t2get in)tall nin3a2ide 1 htt&*++es.,i.i&edia.org+,i.i+EntornoOdeOdesarrolloOintegrado
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
(4
www.detodoprogramacion.com
Instalacin de -a.aar
Ba4aar es un sistema de control de versiones distribuido' @ue nos &ermitirB ir manteniendo el control cambios sobre nuestros archivos' centrali4Bndolos en un re&ositorio. %n (e&ositorio es un es&acio destinado a almacenar in-ormacin digital. En nuestro caso' lo @ue se almacenarB en ese re&ositorio' serBn los archivos -cdigo -uente' tarballs' binarios' etc- de las a&licaciones e!ercicios @ue iremos codeando a lo largo del curso. "as venta!as &rinci&ales de utili4ar un #C<' son* Es&acio de almacenamiento centraliEado de' &rinci&almente' el cdigo -uente de la a&licacin as) como scri&ts de construccin -en el caso de a&licaciones @ue re@uieran ser com&iladas o sim&lemente' necesiten reali4ar con-iguraciones es&eciales' a sea tanto &ara continuar desarrollBndolas como &ara e!ecutarlas-. :ara ser e-ectivos' deben llevar un control hist&rico de cambios @ue se va an e-ectuando en los archivos -&re-erentemente automBtico-' &ermitir el establecimiento de tags -eti@uetas- @ue a uden a identi-icar di-erentes releases -versiones-.
"os #istemas de Control de <ersiones L#C<M &ueden agru&arse en dos ti&os* CentraliEados: un 9nico re&ositorio centrali4ado administrado &or un solo res&onsable. Distribuidos "recomendados$: donde e7iste un re&ositorio central @ue cada usuario &odrB clonar &ara obtener su &ro&io re&ositorio -local- e interactuar con con otros re&ositorios locales. Entre los 3CI distribuidos &odemos destacar e7celentes alternativas BP: L#o-t,are "ibreM' como es el caso de -entre otros-' Bit Lde "inus =orvalds' creador del Cernel "inu7 en el @ue se basa el #istema 5&erativo 6N%+"inu7M' *ercurial Ldesarrollado en : thon CM o el magn)-ico BaEaar' nacido a &artir de 6N%Arch desarrollado )ntegramente en : thon &or Iartin :ool' con el &atrocinio de Canonical elegido en este curso.
%na gran 5entaja de los 3CI es @ue permiten a 5arios programadores trabajar simult7neamente sobre los mismos archi5os' im&idiendo @ue el traba!o de uno' &ise al traba!o de otro.
"os #C< &ueden utili4arse tanto a trav>s de l)nea de comandos' como de a&licaciones
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
(8
www.detodoprogramacion.com
grB-icas. En este curso' nos centraremos en el uso &or medio de l)nea de comandos. "os #C<' en su ma or)a - a rasgos generales- cuentan con un con!unto de -uncionalidades' las cuales' &ara cada una' e7iste un determinado comando Lgeneralmente' similar en la ma or)a de los #C<M. :ara instalar BaEaar en tu ordenador' e!ecuta el siguiente comando*
)udo a&t2get in)tall 67(
%na ve4 instalado Ba4aar' deberBs clonar el repositorio central Ldesde el servidor del cursoM a tu ordenador local*
67( 6(anch )ft&:55tu_usuario@!! 228 82 935ho*e5tu_usuario5&u6lic5t(un:
A continuacin' deberBs ingresar tu contraseUa. %na ve4 clonado el re&ositorio' deberBs agregar unas l)neas al archivo de con-iguracin de Ba4aar. :ara ello' abre el archivo de con-iguracin con el editor Nano*
nano t(un:5 67(56(anch56(anch conf
A continuacin' &ulsa tres veces' las teclas Ctrl S % &ara &egar Ltres vecesM la l)nea @ue cortaste anteriormente. $eberBs ver lo siguiente*
&a(ent;location < )ft&:55tu_usuario@!! 228 82 935ho*e5tu_usuario5&u6lic5t(un: &a(ent;location < )ft&:55tu_usuario@!! 228 82 935ho*e5tu_usuario5&u6lic5t(un: &a(ent;location < )ft&:55tu_usuario@!! 228 82 935ho*e5tu_usuario5&u6lic5t(un:
(eem&la4a la &alabra GparentH de la segunda l)nea' &or GpushH de -orma tal @ue el archivo' se vea como sigue*
&a(ent;location < )ft&:55tu_usuario@!! 228 82 935ho*e5tu_usuario5&u6lic5t(un: push;location < )ft&:55tu_usuario@!! 228 82 935ho*e5tu_usuario5&u6lic5t(un: pull;location < )ft&:55tu_usuario@!! 228 82 935ho*e5tu_usuario5&u6lic5t(un:
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
(/
www.detodoprogramacion.com
02
$entro de los lenguajes in.orm7ticos' : thon' &ertenece al gru&o de los lenguajes de programaci&n &uede ser clasi-icado como un lenguaje interpretado' de alto ni5el' multiplata.orma' de tipado din7mico multiparadigma. A di-erencia de la ma or)a de los lengua!es de &rogramacin' Python nos pro5ee de reglas de estilos ' a -in de &oder escribir cdigo -uente mBs legible de manera estandari4ada. Estas reglas de estilo' son de-inidas a trav>s de la Python Enhancement Proposal CJ ) "PEP )$ ' la cual iremos viendo a lo largo del curso.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
()
www.detodoprogramacion.com
B:13<G01
:enguaje in.orm7tico:es un idioma arti-icial' utili4ado &or ordenadores' cu o -in es transmitir in-ormacin de algo a alguien. "os lengua!es in-ormBticos' &ueden clasi-icarse en* aM lengua!es de &rogramacin L: thon' :J:' :earl' C' etc.MR bM lengua!es de es&eci-icacin L%I"MR cM lengua!es de consulta L#N"MR dM lengua!es de marcas LJ=I"' PI"MR eM lengua!es de trans-ormacin LP#"=MR -M &rotocolos de comunicaciones LJ==:' ?=:MR entre otros. :enguaje de programaci&n: es un lengua!e in-ormBtico' diseUado &ara e7&resar rdenes e instrucciones &recisas' @ue deben ser llevadas a cabo &or una com&utadora. El mismo &uede utili4arse &ara crear &rogramas @ue controlen el com&ortamiento -)sico o lgico de un ordenador. EstB com&uesto &or una serie de s)mbolos' reglas sintBcticas semBnticas @ue de-inen la estructura del lengua!e. :enguajes de alto ni5el: son a@uellos cu a caracter)stica &rinci&al' consiste en una estructura sintBctica semBntica legible' acorde a las ca&acidades cognitivas humanas. A di-erencia de los lengua!es de ba!o nivel' son inde&endientes de la ar@uitectura del hard,are' motivo &or el cual' asumen ma or &ortabilidad. :enguajes interpretados: a di-erencia de los com&ilados' no re@uieren de un com&ilador &ara ser e!ecutados sino de un int>r&rete. %n int>r&rete' act9a de manera casi id>ntica a un com&ilador' con la salvedad de @ue e!ecuta el &rograma directamente' sin necesidad de generar &reviamente un e!ecutable. E!em&lo de lengua!es de &rogramacin inter&retado son : thon' :J:' (ub ' "is&' entre otros. !ipado din7mico: un lengua!e de ti&ado dinBmico es a@uel cu as variables' no re@uieren ser de-inidas asignando su ti&o de datos' sino @ue >ste' se auto-asigna en tiem&o de e!ecucin' seg9n el valor declarado. *ultiplata.orma: signi-ica @ue &uede ser inter&retado en diversos #istemas 5&erativos como 6N%+"inu7' 8indo,s' Iac 5#' #olaris' entre otros. *ultiparadigma: ace&ta di-erentes &aradigmas Lt>cnicasM de &rogramacin' tales como la orientacin a ob!etos' as&ectos' la &rogramacin im&erativa -uncional. C&digo .uente: es un con!unto de instrucciones rdenes lgicas' com&uestos de algoritmos @ue se encuentran escritos en un determinado lengua!e de &rogramacin' las cuales deben ser inter&retadas o com&iladas' &ara &ermitir la e!ecucin del &rograma in-ormBtico.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
('
www.detodoprogramacion.com
2ariab"es
%na variable es un es&acio &ara almacenar datos modi-icables' en la memoria de un ordenador. En : thon' una variable se de-ine con la sinta7is*
no*6(e;de;la;4a(ia6le < 4alo(;de;la;4a(ia6le
E7iste un ti&o de GvariableH' denominada constante' la cual se utili4a &ara de-inir valores -i!os' @ue no re@uieran ser modi-icados. PEP ): 5ariables %tili4ar nombres descri&tivos en min9sculas. :ara nombres com&uestos' se&arar las &alabras &or guiones ba!os. Antes des&u>s del signo V' debe haber uno L solo unM es&acio en blanco
Correcto: *i;4a(ia6le < 12 0ncorrecto: 0i=a(ia6le < *i;4a(ia6le < 12 12 > *i4a(ia6le < 12 > *i;4a(ia6le<12 >
en ma 9sculas se&arando
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
2;
www.detodoprogramacion.com
N9mero entero*
edad < 38
N9mero real*
&(ecio < -438 28
E7isten ademBs' otros ti&os de datos mBs com&le!os' @ue veremos mBs adelante.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
2(
www.detodoprogramacion.com
5&eradores Aritm>ticos
Entre los o&eradores aritm>ticos @ue : thon utili4a' &odemos encontrar los siguientes*
Smbolo . 2 2 G GG 5 55 I Significado Au*a Ee)ta @egaciFn 0ulti&licaciFn C#&onente Hi4i)iFn Hi4i)iFn ente(a 0Fdulo Ejemplo a a a a a a a a < < < < < < < < 10 . 8 12 2 28 - G 8 2 GG 3 12 8 5 2 12 8 5 2 2- I 4 Resultado a a a a a a a a e) e) e) e) e) e) e) e) 18 8 28 38 8 ! 28 ! 0 3
des&u>s de un
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
22
www.detodoprogramacion.com
Comentarios
%n archivo' no solo &uede contener cdigo -uente. =ambi>n &uede incluir comentarios Lnotas @ue como &rogramadores' indicamos en el cdigo &ara &oder com&renderlo me!orM. "os comentarios &ueden ser de dos ti&os* de una sola l)nea o multi-l)nea la siguiente manera*
# Esto es un comentario de una sola lnea *i;4a(ia6le < 18 ! este es un comentario de "arias lneas *i;4a(ia6le < 18 *i;4a(ia6le < 18 # Este comentario es de una lnea tambi#n
se e7&resan de
En los comentarios' &ueden incluirse &alabras @ue nos a uden a identi-icar ademBs' el subti&o de comentario*
J $%&% e)to e) algo &o( hace( J '()*E e)to e) algo Kue de6e co((egi()e J ))) e)to ta*6iLn, e) algo Kue de6e co((egi()e
PEP ): comentarios Comentarios en la misma l)nea del cdigo deben se&ararse con dos es&acios en blanco. "uego del s)mbolo W debe ir un solo es&acio en blanco.
Correcto: a < 18 J Cdad de 0a(Ma 0ncorrecto: a < 18 J Cdad de 0a(Ma
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
www.detodoprogramacion.com
Estos tres ti&os' &ueden almacenar colecciones de datos de diversos ti&os se di-erencian &or su sinta7is &or la -orma en la cual los datos &ueden ser mani&ulados.
3u&"as
%na tu&la es una 5ariable ,ue permite almacenar 5arios datos inmutables Lno &ueden ser modi-icados una ve4 creadosM de ti&os di-erentes*
*i;tu&la < (Ncadena de te#toN, 18, 2 8, Not(o datoN, 28)
#e &uede acceder a cada uno de los datos mediante su )ndice corres&ondiente' siendo 0 LceroM' el )ndice del &rimer elemento*
&(int *i;tu&la[1" J Aalida: 18
=ambi>n se &uede acceder a una &orcin de la tu&la' indicando Lo&cionalmenteM desde el )ndice de inicio hasta el )ndice de -in*
&(int *i;tu&la[1:4" &(int *i;tu&la[3:" &(int *i;tu&la[:2" J He4uel4e: (18, 2 8, Not(o datoN) J He4uel4e: (Not(o datoN, 28) J He4uel4e: (Ncadena de te#toN, 18)
5tra -orma de acceder a la tu&la de -orma inversa Lde atrBs hacia adelanteM' es colocando un )ndice negativo*
&(int *i;tu&la[21" &(int *i;tu&la[22" J Aalida: 28 J Aalida: ot(o dato
-istas
%na lista es similar a una tu&la con la di-erencia -undamental de @ue &ermite modi-icar los datos una ve4 creados
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
2%
www.detodoprogramacion.com
A las listas se accede igual @ue a las tu&las' &or su n9mero de )ndice*
&(int *i;li)ta[1" &(int *i;li)ta[1:4" &(int *i;li)ta[22" J Aalida: 18 J He4uel4e: [18, 2 8, Not(o datoN" J Aalida: ot(o dato
"as lista N5 son inmutables* &ermiten modi-icar los datos una ve4 creados*
*i;li)ta[2" < 3 8 J el te(ce( ele*ento aho(a e) 3 8
4iccionarios
Iientras @ue a las listas tu&las se accede solo 9nicamente &or un n9mero de )ndice' los diccionarios &ermiten utili4ar una clave &ara declarar acceder a un valor*
*i;dicciona(io < ONcla4e;1N: 4alo(;1, Ncla4e;2N: 4alo(;2, P Ncla4e;-N: 4alo(;-Q &(int *i;dicciona(io[Ncla4e;2N" J Aalida: 4alo(;2
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
24
www.detodoprogramacion.com
I'entaci)n
:ara hablar de estructuras de control de -lu!o en : thon' es im&rescindible &rimero' hablar de identacin. K9u2 es la identaci&nL En un lengua!e in-ormBtico' la identacin es lo @ue la sangr)a al lengua!e humano escrito La nivel -ormalM. As) como &ara el lengua!e -ormal' cuando uno redacta una carta' debe res&etar ciertas sangr)as' los lengua!es in-ormBticos' re@uieren una identacin. Co todos los lenguajes de programaci&n+ necesitan de una identaci&n ' aun@ue s)' se estila im&lementarla' a -in de otorgar ma or legibilidad al cdigo -uente. :ero en el caso de Python+ la identaci&n es obligatoria' a @ue de ella' de&enderB su estructura.
PEP ): identaci&n %na identacin de % "cuatro$ espacios en blanco' indicarB @ue las instrucciones identadas' -orman &arte de una misma estructura de control.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
28
www.detodoprogramacion.com
Enco'ing
El encoding Lo codi-icacinM es otro de los elementos del lengua!e @ue no &uede omitirse a la hora de hablar de estructuras de control.
El encoding no es mBs @ue una directi5a ,ue se coloca al inicio de un archi5o Python+ a .in de indicar al sistema+ la codi.icaci&n de caracteres utiliEada en el archi5o.
ut--A &odr)a ser cual@uier codi-icacin de caracteres. #i no se indica una codi-icacin de caracteres' : thon &odr)a &roducir un error si encontrara caracteres Ge7traUosH*
&(int 'Cn el RSga(a encont(L un RandT'
"
Asignaci)n m0"ti&"e
5tra de las venta!as @ue : thon nos &rovee' es la de &oder asignar en una sola instruccin' m9lti&les variables*
a, 6, c < N)t(ingN, 18, $(ue
En una sola instruccin' estamos declarando tres variables* a' b valor concreto a cada una*
+++ &(int a )t(ing +++ &(int 6 18 +++ &(int c $(ue
asignBndoles un
"a asignacin m9lti&le de variables' tambi>n &uede darse utili4ando como valores' el
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
2/
www.detodoprogramacion.com
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
2)
www.detodoprogramacion.com
"as estructuras de control condicionales' son a@uellas @ue nos &ermiten evaluar si una o mBs condiciones se cum&len' &ara decir @u> accin vamos a e!ecutar. :a e5aluaci&n de condiciones' solo puede arrojar 1 de 2 resultados* 5erdadero o .also L=rue o ?alseM. En la vida diaria' actuamos de acuerdo a la evaluacin de condiciones' de manera mucho mBs -recuente de lo @ue en realidad creemos* Si el sem'foro est' en /erde, cru&ar la calle. Sino, esperar a que el sem'foro se ponga en /erde. A veces' tambi>n evaluamos mBs de una condicin &ara e!ecutar una determinada accin* 0i llega la factura de la lu& y tengo dinero, pagar la boleta. :ara describir la evaluacin a reali4ar sobre una condicin' se utili4an operadores relacionales Lo de com&aracinM*
%PER8&%RES RE;8<(%=8;ES 0&E <%*P8R8<(>=5 2222222222222222222222222222222222222222222222222222222222 Smbolo Significado Ejemplo Resultado << ?gual Kue 8 << Dal)o 1< Hi)tinto Kue (o3o 1< 4e(de =e(dade(o V 0eno( Kue 8 V 12 =e(dade(o + 0a%o( Kue 12 + Dal)o V< 0eno( o igual Kue 12 V< 12 =e(dade(o +< 0a%o( o igual Kue 4 +< 8 Dal)o
LXM 1 indica resultado verdadero de la condicin' mientras @ue 0' indica -also.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
2'
www.detodoprogramacion.com
"as estructuras de control de -lu!o condicionales' se de-inen mediante el uso de tres &alabras claves reservadas' del lengua!e* if LsiM' elif Lsino' siM else LsinoM. <eamos algunos e!em&los*
#i gasto hasta Y100' &ago con dinero en e-ectivo. #ino' si gasto mBs de Y100 &ero menos de Y300' &ago con tar!eta de d>bito. #ino' &ago con tar!eta de cr>dito.
if co*&(a V< 100: &(int ',ago en efecti4o' elif co*&(a + 100 and co*&(a V 300: &(int ',ago con ta(3eta de dL6ito' el)e: &(int ',ago con ta(3eta de c(Ldito'
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
www.detodoprogramacion.com
Buc"e whi"e
Este bucle' se encarga de e!ecutar una misma accin Gmientras @ueH una determinada condicin se cum&la* Iientras @ue aUo sea menor o igual a 2012' im&rimir la -rase G3n-ormes del AUo a1oH
J 2G2 coding: utf28 2G2 anio < 2001 Ahile anio V< 2012: &(int '?nfo(*e) del BXo', )t((anio) anio .< 1
:odrBs notar @ue en cada iteracin' incrementamos el valor de la variable @ue condiciona el bucle LanioM. #i no lo hici>ramos' esta variable siem&re ser)a igual a 2001 el bucle se e!ecutar)a de -orma in-inita' a @ue la condicin L anio V< 2012M siem&re se estar)a cum&liendo.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
www.detodoprogramacion.com
:ero ENu> sucede si el valor @ue condiciona la iteracin no es num>rico no &uede incrementarseF En ese caso' &odremos utili4ar una estructura de control condicional' anidada dentro del bucle' -renar la e!ecucin cuando el condicional de!e de cum&lirse' con la &alabra clave reservada brea.*
Yhile $(ue: no*6(e < (aY;in&ut('?ndiKue )u no*6(e: ') if no*6(e: breaB
El bucle anterior' inclu e un condicional anidado @ue veri-ica si la variable nombre es verdadera Lsolo serB verdadera si el usuario ti&ea un te7to en &antalla cuando el nombre le es solicitadoM. #i es verdadera' el bucle &ara Lbrea.M. #ino' seguirB e!ecutBndose hasta @ue el usuario' ingrese un te7to en &antalla.
Buc"e for
El bucle -or' en : thon' es a@uel @ue nos &ermitirB iterar sobre una variable com&le!a' del ti&o lista o tu&la* :or cada nombre en miOlista' im&rimir nombre
*i;li)ta < [NZuanN, NBntonioN, N,ed(oN, N/e(*inioN" for no*6(e in *i;li)ta: &(int no*6(e
En los e!em&los anteriores' nombre color' son dos variables declaradas en tiem&o de e!ecucin Les decir' se declaran dinBmicamente durante el bucleM' asumiendo como valor' el de cada elemento de la lista Lo tu&laM en cada iteracin. 5tra -orma de iterar con el bucle -or' &uede emular a ,hile* :or cada aUo en el rango 2001 a 2013' im&rimir la -rase G3n-ormes del AUo a1oH
J 2G2 coding: utf28 2G2 fo( anio in (ange(2001, 2013): &(int '?nfo(*e) del BXo', )t((anio)
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
www.detodoprogramacion.com
03
En : thon' cada uno de nuestros archivos .& se denominan m&dulos. Estos mdulos' a la ve4' &ueden -ormar &arte de pa,uetes. %n &a@uete' es una car&eta @ue contiene archivos .& . :ero' &ara @ue una car&eta &ueda ser considerada un &a@uete' debe contener un archivo de inicio llamado ..init...py. Este archivo' no necesita contener ninguna instruccin. $e hecho' &uede estar com&letamente vac)o.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
www.detodoprogramacion.com
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
www.detodoprogramacion.com
"a instruccin i*&o(t seguida de no*6(e;del;&aKuete no*6(e;del;*odulo, nos &ermitirB hacer uso de todo el cdigo @ue dicho mdulo contenga.
Python tiene sus propios m&dulos ' los cuales -orman &arte de su librer#a de m&dulos est7ndar' @ue tambi>n &ueden ser im&ortados.
+ames&aces
:ara acceder Ldesde el mdulo donde se reali4 la im&ortacinM' a cual@uier elemento del mdulo im&ortado' se reali4a mediante el namespace' seguido de un &unto L.M el nombre del elemento @ue se desee obtener. En : thon' un names&ace' es el nombre @ue se ha indicado luego de la &alabra i*&o(t' es decir la ruta Lnames&aceM del mdulo*
&(int modulo.<%=S$8=$E.4 &(int paCuete.modulo4.<%=S$8=$E.4 &(int paCuete.subpaCuete.modulo4.<%=S$8=$E.4
A"ias
Es &osible tambi>n' abreviar los names&aces mediante un GaliasH. :ara ello' durante la im&ortacin' se asigna la &alabra clave as seguida del alias con el cuBl nos re-eriremos en el -uturo a ese names&ace im&ortado*
i*&o(t *odulo as * i*&o(t &aKuete *odulo1 as &* i*&o(t &aKuete )u6&aKuete *odulo1 as &)*
"uego' &ara acceder a cual@uier elemento de los mdulos im&ortados' el names&ace utili4ado serB el alias indicado durante la im&ortacin*
&(int m.CO@A$B@$C ;1 &(int pm.CO@A$B@$C ;1 &(int psm.CO@A$B@$C;1
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
www.detodoprogramacion.com
Es &osible tambi>n' im&ortar mBs de un elemento en la misma instruccin. :ara ello' cada elemento irB se&arado &or una coma L'M un es&acio en blanco*
from &aKuete *odulo1 import CO@A$B@$C;12 CO@A$B@$C;2
:ero qu sucede si los elementos importados desde mdulos diferentes tienen los mismos nombres? En estos casos' habrB @ue pre5enir .allos+ utiliEando alias para los elementos*
from &aKuete *odulo1 import CO@A$B@$C;1 as <4, CO@A$B@$C;2 as <2 from &aKuete )u6&aKuete *odulo1 import CO@A$B@$C;1 as <S4, CO@A$B@$C;2 as <S2 &(int &(int &(int &(int C1 C2 CA1 CA2
PEP ): importaci&n "a im&ortacin de mdulos debe reali4arse al comien4o del documento' en orden al-ab>tico de &a@uetes mdulos. :rimero deben im&ortarse los mdulos &ro&ios de : thon. "uego' los mdulos de terceros -inalmente' los mdulos &ro&ios de la a&licacin. Entre cada blo@ue de im&orts' debe de!arse una l)nea en blanco.
$e -orma alternativa L&ero mu &oco recomendadaM' tambi>n es &osible im&ortar todos los elementos de un mdulo' sin utili4ar su names&ace &ero tam&oco alias. Es decir' @ue todos los elementos im&ortados se accederB con su nombre original*
f(o* &aKuete *odulo1 import @ &(int CO@A$B@$C;1 &(int CO@A$B@$C;2
M!1D1: Abrir una terminal e iniciar el shell interactivo Lint>r&reteM de : thon. A continuacin' im&ortar el mdulo thi)* import this
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
www.detodoprogramacion.com
04
%na -uncin' es la -orma de agru&ar e7&resiones sentencias LalgoritmosM @ue realicen determinadas acciones' &ero @ue >stas' solo se e!ecuten cuando son llamadas. Es decir' @ue al colocar un algoritmo dentro de una -uncin' al correr el archivo' el algoritmo no serB e!ecutado si no se ha hecho una re-erencia a la -uncin @ue lo contiene.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
www.detodoprogramacion.com
+e1iniendo 1unciones
En : thon' la de-inicin de -unciones se reali4a mediante la instruccin def mBs un nombre de -uncin descri&tivo -&ara el cuBl' a&lican las mismas reglas @ue &ara el nombre de las variables- seguido de &ar>ntesis de a&ertura cierre. Como toda estructura de control en : thon' la de-inicin de la -uncin -inali4a con dos &untos L*M el algoritmo @ue la com&one' irB identado con 0 es&acios*
def *i;funcion05+ J aKuM el algo(it*o
%na -uncin' no es e!ecutada hasta tanto no sea invocada. :ara invocar una -uncin' sim&lemente se la llama &or su nombre*
def *i;funcion(): &(int '/ola 0undo' funcion05
Cuando una -uncin' haga un retorno de datos' >stos' &ueden ser asignados a una variable*
def funcion(): return '/ola 0undo' frase / funcion05 &(int f(a)e
Los parmetros, se indican entre los parntesis, a modo de variables, a fin de poder utilizarlos como tales, dentro de la misma funcin. "os &arBmetros @ue una -uncin es&era' serBn utili4ados &or >sta' dentro de su algoritmo' a modo de 5ariables de 7mbito local. Es decir' @ue los &arBmetros serBn variables locales' a las cuBles solo la -uncin &odrB acceder*
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
www.detodoprogramacion.com
Al llamar a una funcin, siempre se le deben pasar sus argumentos en el mismo orden en el que los espera. Pero esto puede evitarse, haciendo uso del paso de argumentos como keywords ( er ms a!a"o# $Keywords como parmetros%&.
PEP ): -unciones A la de-inicin de una -uncin la deben anteceder dos l)neas en blanco. Al asignar &arBmetros &or omisin' no debe de!arse es&acios en blanco ni antes ni des&u>s del signo V.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
'
www.detodoprogramacion.com
8ar7metros arbitrarios
Al igual @ue en otros lengua!es de alto nivel' es &osible @ue una -uncin' es&ere recibir un n9mero arbitrario -desconocido- de argumentos. Estos argumentos' llegarBn a la -uncin en -orma de tu&la. :ara de-inir argumentos arbitrarios en una -uncin' se antecede al &arBmetro un asterisco LXM*
def (eco((e(;&a(a*et(o);a(6it(a(io)(&a(a*et(o;fi3o, @arbitrarios): &(int &a(a*et(o;fi3o # "os parmetros arbitrarios se corren como tuplas fo( a(gu*ento in a(6it(a(io): &(int a(gu*ento (eco((e(;&a(a*et(o);a(6it(a(io)(NDi#edN, 1arbitrario 412 1arbitrario 212 1arbitrario F1)
'i una funcin espera reci!ir parmetros fi"os y ar!itrarios, los arbitrarios siempre deben suceder a los fijos. Es &osible tambi>n' obtener &arBmetros arbitrarios como &ares de claveVvalor. En estos casos' al nombre del &arBmetro deben &recederlo dos astericos LXXM*
def (eco((e(;&a(a*et(o);a(6it(a(io)(&a(a*et(o;fi3o, Ga(6it(a(io), @@BAords): &(int &a(a*et(o;fi3o fo( a(gu*ento in a(6it(a(io): &(int a(gu*ento
# "os ar#umentos arbitrarios tipo cla$e% se recorren como los diccionarios
fo( cla4e in :Yo(d): &(int 'Cl 4alo( de', cla4e, 'e)', :Yo(d)[cla4e" (eco((e(;&a(a*et(o);a(6it(a(io)('Di#ed', 'a(6it(a(io 1', 'a(6it(a(io 2', 'a(6it(a(io 3', cla"e4/ "alor uno 2 cla"e2/ "alor dos )
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
%;
www.detodoprogramacion.com
def calcula((i*&o(te, de)cuento): (etu(n i*&o(te 2 (i*&o(te G de)cuento 5 100) datos / 74G332 43: &(int calcula((@datos)
El mismo caso &uede darse cuando los valores a ser &asados como &arBmetros a una -uncin' se encuentren dis&onibles en un diccionario. A@u)' deberBn &asarse a la -uncin' &recedidos de dos asteriscos LXXM*
def calcula((i*&o(te, de)cuento): (etu(n i*&o(te 2 (i*&o(te G de)cuento 5 100) datos / H descuento + 432 &(int calcula((@@datos) importe + 4G33I
%lamadas de retorno
En : thon' es &osible Lal igual @ue en la gran ma or)a de los lengua!es de &rogramacinM' llamar a una -uncin dentro de otra' de -orma -i!a de la misma manera @ue se la llamar)a' desde -uera de dicha -uncin*
def funcion(): (etu(n '/ola 0undo' def )aluda((no*6(e, *en)a3e<N/olaN): &(int *en)a3e, no*6(e &(int mi.funcion05
#in embargo' es &osible @ue se desee realiEar dicha llamada+ de manera din7mica ' es decir' desconociendo el nombre de la .unci&n a la @ue se desearB llamar. A este ti&o de acciones' se las denomina llamadas de retorno. :ara conseguir llamar a una -uncin de manera dinBmica' : thon dis&one de dos -unciones nativas* locals05 globals05 Ambas -unciones' retornan un diccionario. En el caso de local)()' >ste diccionario se com&one -!ustamente- de todos los elementos de Bmbito local' mientras @ue el de glo6al)()' retorna lo &ro&io &ero a nivel global.
def funcion(): (etu(n '/ola 0undo' def lla*ada;de;(eto(no(func<''): """Llamada de retorno a nivel global""" (etu(n globals057func:05
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
%(
www.detodoprogramacion.com
&(int lla*ada;de;(eto(no( funcion ) # Llamada de retorno a nivel local nombre.de.la.funcion / funcion &(int locals057nombre.de.la.funcion:05
#i se tienen @ue &asar argumentos en una llamada retorno' se lo &uede hacer normalmente*
def funcion(nombre): (etu(n '/ola ' . no*6(e def lla*ada;de;(eto(no(func<''): '''^la*ada de (eto(no a ni4el glo6al''' (etu(n glo6al)()[func"0 ;aura 5 &(int lla*ada;de;(eto(no('funcion') J ^la*ada de (eto(no a ni4el local no*6(e;de;la;funcion < 'funcion' &(int local)()[no*6(e;de;la;funcion"0 'acundo 5
El o&erador in' nos &ermitirB conocer si un elemento se encuentra dentro de una coleccin' mientras @ue la -uncin calla6le() nos de!arB saber si esa -uncin &uede ser llamada.
def funcion(no*6(e): (etu(n '/ola ' . no*6(e def lla*ada;de;(eto(no(func<''): if func in glo6al)(): if calla6le(glo6al)()[func"): (etu(n glo6al)()[func"('^au(a') el)e: (etu(n 'DunciFn no encont(ada' &(int lla*ada;de;(eto(no('funcion') no*6(e;de;la;funcion < 'funcion'
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
%2
www.detodoprogramacion.com
%lamadas recursi as
3e denomina llamada recursi5a "o recursi5idad$+ a a,uellas .unciones ,ue en su algoritmo+ hacen re.erencia s# misma. "as llamadas recursivas suelen ser mu 9tiles en casos mu &untuales' &ero debido a su gran -actibilidad de caer en iteraciones in-initas' deben e7tremarse las medidas &reventivas adecuadas ' solo utili4arse cuando sea estrictamente necesario no e7ista una -orma alternativa viable' @ue resuelva el &roblema evitando la recursividad. : thon admite las llamadas recursivas' &ermitiendo a una -uncin' llamarse a s) misma' de igual -orma @ue lo hace cuando llama a otra -uncin.
def 3uga((intento<1): (e)&ue)ta < (aY;in&ut('_He KuL colo( e) una na(an3a` ') if (e)&ue)ta 1< 'na(an3a': if intento V 3: &(int 'PnDalla)te1 ?ntLntalo de nue4o' intento .< 1 jugar0intento5 # "lamada recursi$a el)e: &(int 'Pn,e(di)te1' el)e: &(int 'PnGana)te1' 3uga(()
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
www.detodoprogramacion.com
05
En : thon todo es un Gob!etoH debe ser mani&ulado - entendido- como tal. :ero ENu> es un ob!etoF E$e @u> hablamos cuando nos re-erimos a Gorientacin a ob!etosF En este ca&)tulo' haremos una introduccin @ue res&onderB a estas - muchas otras- ®untas. Nos en-ocaremos &rimero' en cuestiones de conce&tos bBsicos' &ara luego' ir introduci>ndonos de a &oco' en &rinci&ios tericos elementalmente necesarios' &ara im&lementar la orientacin a ob!etos en la &rBctica.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
%%
www.detodoprogramacion.com
Pensar en ob)etos
:ensar en ob!etos' &uede resultar -al inicio- una tarea di-)cil. #in embargo' di-)cil no signi-ica com&le!o. :or el contrario' &ensar en ob!etos re&resenta la ma or sim&licidad @ue uno &odr)a es&erar del mundo de la &rogramacin. Pensar en objetos+ es simple... aun@ue lo sim&le' no necesariamente signi-i@ue sencillo.
(uando pensamos en $o!"etos%, todos los sustantivos son objetos. #encillo EciertoF Entonces' de ahora en mBs' solo conc>ntrate en &ensar la vida en ob!etos Lal menos' hasta terminar de leer este documentoM.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
%4
www.detodoprogramacion.com
El objeto es -eo Ahora' imagina @ue te encuentras -rente a un niUo de 2 aUos LniUo* ob!eto @ue ®unta cosas @ue t9 das &or entendidas de -orma im&l)citaM. D cada ve4 @ue le dices las cualidades de un ob!eto al molesto niUo-ob!eto' >ste te ®unta* -HENu> es...FH' seguido del ad!etivo con el cuBl -inali4aste tu -rase. Entonces' tu le res&ondes diciendo Ges un+unaH seguido de un sustantivo. =e lo muestro con un e!em&lo* El ob!eto es verde. K9u2 es verdeF %n color. El ob!eto es grande. K9u2 es grandeF %n tamaUo. El ob!eto es -eo. K9u2 es -eoF %n as&ecto. Estos sustantivos @ue res&onden a la ®unta del niUo' &ueden &asar a -ormar &arte de una locuci&n adjeti5a @ue es&eci-i@ue con ma or &recisin' las descri&ciones anteriores* El ob!eto es de color verde. El ob!eto es de tamao grande. El ob!eto es de aspecto -eo. :odemos decir entonces - todo esto' gracias al molesto niUo-ob!eto-' @ue una cualidad' es un atributo Lderivado de Gcualidad atribuible a un ob!etoHM @ue entonces' un objeto es un sustanti5o ,ue posee atributos+ cuyas cualidades lo describen. <eBmoslo mBs grB-icamente*
1BQE!1 "sustanti5o$ LelM 5b!eto <!G0B6!1 "locuci&n adjeti5a$ Les deM color Les deM tamaUo Les deM as&ecto C6<:0D<D DE: <!G0B6!1 "adjeti5o$ <erde 6rande ?eo
%8
www.detodoprogramacion.com
El ob!eto tiene algunas antenas El ob!eto tiene un o!o El ob!eto tiene unos cuantos &elos "os com&onentes de un ob!eto' tambi>n integran los atributos de ese ob!eto. #olo @ue estos atributos' son algo &articulares* son otros objetos ,ue poseen sus propias cualidades. Es decir' @ue estos Gatributos-ob!etoH tambi>n res&onderBn a la ®unta GECmo es+son ese+esos+esasFH seguido del atributo-ob!eto LsustantivoM. Am&liemos el e!em&lo &ara @ue se entienda me!or* El ob!eto tiene algunas antenas. ECmo son esas antenasF "as antenas son de color violeta "as antenas son de longitud e7tensa El ob!eto tiene un o!o. ECmo es ese o!oF El o!o es de -orma oval El o!o es de color a4ul El o!o es de tamaUo grande El ob!eto tiene unos cuantos &elos. ECmo son esos &elosF "os &elos son de color -ucsia "os &elos son de te7tura rugosa :ongBmoslo mBs grB-ico*
1BQE!1 "sustanti5o$ <!G0B6!1>1BQE!1 "sustanti5o$ Ltiene algunasM antenas LelM 5b!eto Ltiene unM o!o Ltiene unos cuantosM &elos <!G0B6!13 "locuci&n adjeti5a$ LdeM color LdeM longitud LdeM -orma LdeM color LdeM tamaUo LdeM color LdeM te7tura C6<:0D<DE3 DE :13 <!G0B6!13 "adjeti5o$ <ioleta e7tensa 5val a4ul grande ?ucsia rugosa
Entonces' &odemos deducir @ue un objeto puede tener dos tipos de atributos * 1M "os @ue res&onden a la ®unta Cmo es el ob eto?! con la -rase El ob eto es"""! S ad!etivo Latributos de-inidos &or cualidadesM 2M "os @ue res&onden a la ®unta #u tiene el ob eto?! con la -rase El ob eto
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
%/
www.detodoprogramacion.com
tiene"""! S sustantivo Latributos de-inidos &or las cualidades de otro ob!etoM <eBmoslo a9n' mBs grB-icamente* Objeto color tamao aspecto antenas ojos pelos Pelo
Antena
color
longitud Ojo
color
textura
forma
color
tamao
<iendo el grB-ico anterior' tenemos lo siguiente* 2n ob eto )sustanti/o. al cual hemos descrito con tres atributos )adjeti/os. y otros tres atributos$ob eto )sustanti/os. los cu'les son a la /e&, otros tres objetos )sustanti/os. con sus atributos )adjeti/os. correspondientes. 30imple, no4 5hora, compliquemos todo un poco.
< tambi>n ha: ob5etos ;ue com&arten caracter@sticas con otros ob5etos
#esulta ser, que nuestro 6bjeto, es pr'cticamente igual a un nue/o objeto. 7s decir, que el nue/o objeto que estamos /iendo, tiene absolutamente todas las caracter8sticas que nuestro primer objeto, es decir, tiene los mismos atributos. !ero tambi9n, tiene algunas m's. !or ejemplo, este nue%o ob eto, adem's de los atributos de nuestro primer objeto, tiene un pie. 7s decir, que las caracter8sticas de nuestro nue/o objeto, ser'n todas las del objeto original, m's una nue/a* pie. #epasemos las caracter8sticas de nuestro nue/o objeto* El nuevo ob!eto es de color verde. El nuevo ob!eto es de tamaUo grande. El nuevo ob!eto es de as&ecto -eo.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
%)
www.detodoprogramacion.com
El nuevo ob!eto tiene algunas antenas. ECmo son esas antenasF "as antenas son de color violeta "as antenas son de longitud e7tensa El nuevo ob!eto tiene un o!o. ECmo es ese o!oF El o!o es de -orma oval El o!o es de color a4ul El o!o es de tamaUo grande El nuevo ob!eto tiene unos cuantos &elos. ECmo son esos &elosF "os &elos son de color -ucsia "os &elos son de te7tura rugosa "nue5as caracter#sticas$ El nuevo ob!eto tiene un &ie. ECmo es ese &ieF El &ie es de -orma rectangular El &ie es de color amarillo El &ie tiene 3 dedos. ECmo son esos dedosF "os dedos son de longitud mediana "os dedos son de -orma alargada "os dedos son de color amarillo <eamos todas las caracter)sticas de este nuevo' en un grB-ico como lo hicimos antes.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
%'
www.detodoprogramacion.com
Antena
longitud Ojo
color
textura
forma
color
dedos Dedo
forma
color
tamao
longitud
forma
color
Con mucha -acilidad' &odemos observar como nuestro nuevo ob!eto es una es&ecie de Gob!eto original am&liadoH. Es decir @ue el nuevo ob!eto' es e7actamente igual al ob!eto original Lcom&arte todos sus atributosM &ero &osee nuevas caracter)sticas. EstB claro ademBs' @ue el ob!eto original el nuevo ob!eto' son dos ob!etos di-erentes EciertoF No obstante' el nue5o objeto es un sub>tipo del objeto original. Ahora s)' a com&licarnos a9n mBs.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
4;
www.detodoprogramacion.com
El nuevo ob!eto LademBsM puede saltar #i com&letamos el grB-ico anterior con las acciones' obtendremos lo siguiente* Objeto Flotar color tamao aspecto antenas ojos pelos Pelo
Saltar color
Antena
longitud Ojo
color
textura
forma
color
dedos Dedo
forma
color
tamao
longitud
forma
color
#i observas el grB-ico anterior' notarBs @ue el nuevo ob!eto' no solo tiene los mismos atributos @ue el ob!eto original' sino @ue ademBs' tambi>n &uede reali4ar las mismas acciones @ue >ste. #encillo' ciertoF Ahora s)' com&li@u>monos del todo *M
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
4(
www.detodoprogramacion.com
A" &an, &an. < a" ino, ino. -as cosas &or su nombre
Cuando en el documento... Jablamos de Gob!etoH Jablamos de GatributosH Lo cualidadesM Jablamos de GaccionesH @ue &uede reali4ar el ob!eto Jablamos de Gatributos-ob!etoH <emos @ue los ob!etos relacionados entre s)' tienen nombres de atributos iguales L&or e!em&lo* color tamaUoM sin embargo' &ueden tener valores di-erentes Jablamos de ob!etos @ue son sub-ti&os Lo am&liacinM de otros En la programaci&n se denomina... 1bjeto Propiedades *2todos Composici&n Polimor.ismo R con respecto a la programaci&n orientada a objetos es... %n elemento %n elemento %n elemento %na t>cnica %na caracter)stica
?erencia
%na caracter)stica
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
42
www.detodoprogramacion.com
Paradigma: teora cuyo ncleo central )...* suministra la base y modelo para resolver problemas )...* +efinicin de la ,eal Academia -spa.ola, igsimo tercera edicin Cmo tal' nos enseUa un m>todo -&robado estudiado- el cual se basa en las interacciones de ob!etos Ltodo lo descrito en el t)tulo anterior' G:ensar en ob!etosHM &ara resolver las necesidades de un sistema in-ormBtico. BBsicamente' este &aradigma se com&one de 2 elementos veremos a continuacin. / caracter)sticas @ue
C"ases
"as clases son los modelos sobre los cuBles se construirBn nuestros ob!etos. :odemos tomar como e!em&lo de clases' el grB-ico @ue hicimos en la &Bgina A de este documento. En : thon' una clase se de-ine con la instruccin cla)) seguida de un nombre gen>rico &ara el ob!eto.
class O63eto: &a)) class Bntena: &a)) class ,elo:
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
www.detodoprogramacion.com
8ro&ie'a'es
"as &ro&iedades' como hemos visto antes' son las caracter)sticas intr)nsecas del ob!eto. [stas' se re&resentan a modo de variables' solo @ue t>cnicamente' &asan a denominarse G&ro&iedadesH*
cla)) Bntena(): colo( < '' longitud < '' cla)) ,elo(): colo( < '' te#tu(a < '' cla)) O3o(): fo(*a < '' colo( < '' ta*anio < '' cla)) O63eto(): colo( < '' ta*anio < '' a)&ecto < '' antena) < Bntena() o3o) < O3o() &elo) < ,elo()
J &(o&iedad co*&ue)ta &o( el o63eto o63eto Bntena J &(o&iedad co*&ue)ta &o( el o63eto o63eto O3o J &(o&iedad co*&ue)ta &o( el o63eto o63eto ,elo
PEP ): propiedades "as &ro&iedades se de-inen de la misma -orma @ue las variables La&lican las mismas reglas de estiloM.
D>to'os
"os m>todos son G-uncionesH Lcomo las @ue vimos en el ca&)tulo anteriorM' solo @ue
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
4%
www.detodoprogramacion.com
1b5eto
"as clases &or s) mismas' no son mBs @ue modelos @ue nos servirBn &ara crear ob!etos en concreto. :odemos decir @ue una clase' es el ra4onamiento abstracto de un ob!eto' mientras @ue el ob!eto' es su materiali4acin. A la accin de crear ob!etos' se la denomina Ginstanciar una claseH dicha instancia' consiste en asignar la clase' como valor a una variable*
cla)) O63eto(): colo( < '4e(de' ta*anio < 'g(ande' a)&ecto < 'feo' antena) < Bntena() o3o) < O3o() &elo) < ,elo() def flota(()elf): &(int 12 et / %bjeto05 &(int et colo( &(int et ta*anio &(int et a)&ecto et colo( < '(o)a' &(int et colo(
44
www.detodoprogramacion.com
&ro&iedades m>todos @ue otro ob!eto' ademBs agregan nuevas &ro&iedades m>todos. A esto se lo denomina herencia* una clase @ue hereda de otra. <ale aclarar' @ue en : thon' cuando una clase no hereda de ninguna otra+ debe hacerse heredar de object' @ue es la clase &rinci&al de : thon' @ue de-ine un ob!eto.
cla)) Bntena(o63ect): colo( < '' longitud < '' cla)) ,elo(o63ect): colo( < '' te#tu(a < '' cla)) O3o(o63ect): fo(*a < '' colo( < '' ta*anio < '' cla)) O63eto(o63ect): colo( < '' ta*anio < '' a)&ecto < '' antena) < Bntena() o3o) < O3o() &elo) < ,elo() def flota(()elf): &a)) cla)) Hedo(o63ect): longitud < '' fo(*a < '' colo( < '' cla)) ,ie(o63ect): fo(*a < '' colo( < '' dedo) < Hedo() # Nue$o&b'eto s( )ereda de otra clase: &b'eto cla)) @ue4oO63eto(O63eto): &ie < ,ie() def )alta(()elf): &a))
48
www.detodoprogramacion.com
acceder a su m>todos &ro&iedades. :ara ello' : thon utili4a una sinta7is mu sim&le* el nombre del ob!eto' seguido de &unto la &ro&iedad o m>todo al cuBl se desea acceder*
o63eto < 0iCla)e() &(int o63eto &(o&iedad o63eto ot(a;&(o&iedad < '@ue4o 4alo(' 4a(ia6le < o63eto *etodo() &(int 4a(ia6le &(int o63eto ot(o;*etodo()
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
4/
www.detodoprogramacion.com
06
Como comentamos en el ca&)tulo anterior' en : thon' todo es un ob!eto &or tanto' cual@uier variable cu o valor sea de ti&o string' &odrB ser tratada como un subti&o del ob!eto string' el cuBl dis&one de m>todos @ue son heredados &or dicho subti&o. En este ca&)tulo' veremos los m>todos mBs -recuentes del ob!eto string.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
4)
www.detodoprogramacion.com
M2todos de 1ormato
Con ertir a ma'3scula la primera letra *2todo: ca&itali4eLM Getorna: una co&ia de la cadena con la &rimera letra en ma 9sculas
+++ cadena < '6ien4enido a *i a&licaciFn' +++ &(int cadena capitaliJe05 Uien4enido a *i a&licaciFn
Con ertir una cadena a min3sculas *2todo: lo,erLM Getorna: una co&ia de la cadena en min9sculas
+++ cadena < '/ola 0undo' +++ &(int cadena loAer05 hola *undo
Con ertir una cadena a ma'3sculas *2todo: u&&erLM Getorna: una co&ia de la cadena en ma 9sculas
+++ cadena < '/ola 0undo' +++ &(int cadena upper05 /O^B 0a@HO
Con ertir ma'3sculas a min3sculas ' ice ersa *2todo: s,a&caseLM Getorna: una co&ia de la cadena convertidas las ma 9sculas en min9sculas
+++ cadena < '/ola 0undo' +++ &(int cadena sAapcase05 hO^B *a@HO
viceversa
4'
www.detodoprogramacion.com
Centrar un te&to *2todo: centerLlongitud\' Gcaracter de rellenoH]M Getorna: una co&ia de la cadena centrada
+++ cadena < '6ien4enido a *i a&licaciFn' ca&itali7e() +++ &(int cadena center0G32 / 5 <<<<<<<<<<<Uien4enido a *i a&licaciFn<<<<<<<<<<<< +++ &(int cadena center0G32 5 Uien4enido a *i a&licaciFn
4linear te&to a la i.0uierda *2todo: l!ustLlongitud\' Gcaracter de rellenoH]M Getorna: una co&ia de la cadena alineada a la i4@uierda
+++ cadena < '6ien4enido a *i a&licaciFn' ca&itali7e() +++ &(int cadena ljust0G32 / 5 Uien4enido a *i a&licaciFn<<<<<<<<<<<<<<<<<<<<<<<
4linear te&to a la derec(a *2todo: r!ustLlongitud\' Gcaracter de rellenoH]M Getorna: una co&ia de la cadena alineada a la derecha
+++ cadena < '6ien4enido a *i a&licaciFn' ca&itali7e() +++ &(int cadena rjust0G32 / 5 <<<<<<<<<<<<<<<<<<<<<<<Uien4enido a *i a&licaciFn +++ &(int cadena rjust0G32 5 Uien4enido a *i a&licaciFn
5ellenar un te&to anteponiendo ceros *2todo: 4-illLlongitudM Getorna: una co&ia de la cadena rellena con ceros a la i4@uierda hasta alcan4ar la longitud -inal indicada
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
8;
www.detodoprogramacion.com
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
8(
www.detodoprogramacion.com
M2todos de -3s0ueda
Contar cantidad de apariciones de una subcadena *2todo: countLGsubcadenaH\' &osicionOinicio' &osicionO-in]M Getorna: un entero re&resentando la cantidad de a&ariciones de subcadena dentro de cadena
+++ cadena < '6ien4enido a *i a&licaciFn' ca&itali7e() +++ &(int cadena count0 a 5 3
-uscar una subcadena dentro de una cadena *2todo: -indLGsubcadenaH\' &osicionOinicio' &osicionO-in]M Getorna: un entero re&resentando la &osicin donde inicia la subcadena dentro de cadena. #i no la encuentra' retorna -1
+++ cadena < '6ien4enido a *i a&licaciFn' ca&itali7e() +++ &(int cadena find0 mi 5 13 +++ &(int cadena find0 mi 2 32 435 21
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
82
www.detodoprogramacion.com
M2todos de 6alidacin
Saber si una cadena comien.a con una subcadena determinada *2todo: starts,ithLGsubcadenaH\' &osicionOinicio' &osicionO-in]M Getorna: =rue o ?alse
+++ cadena < '6ien4enido a *i a&licaciFn' ca&itali7e() +++ &(int cadena startsAith0 9ien"enido 5 $(ue +++ &(int cadena startsAith0 aplicaciKn 5 Dal)e +++ &(int cadena startsAith0 aplicaciKn 2 4L5 $(ue
Saber si una cadena 1inali.a con una subcadena determinada *2todo: ends,ithLGsubcadenaH\' &osicionOinicio' &osicionO-in]M Getorna: =rue o ?alse
+++ cadena < '6ien4enido a +++ &(int cadena endsAith0 $(ue +++ &(int cadena endsAith0 Dal)e +++ &(int cadena endsAith0 $(ue *i a&licaciFn' ca&itali7e() aplicaciKn 5 9ien"enido 5 9ien"enido 2 32 435
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
www.detodoprogramacion.com
Saber si una cadena contiene solo min3sculas *2todo: islo,erLM Getorna: =rue o ?alse
+++ cadena < '&e&e g(illo' +++ &(int cadena isloAer05 $(ue +++ cadena < ',e&e G(illo' +++ &(int cadena isloAer05 Dal)e +++ cadena < ',e&eg(illo' +++ &(int cadena isloAer05 Dal)e +++ cadena < '&e&eg(illo-8' +++ &(int cadena isloAer05
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
8%
www.detodoprogramacion.com
$(ue
Saber si una cadena contiene solo ma'3sculas *2todo: isu&&erLM Getorna: =rue o ?alse
+++ cadena < ',C,C GE?^^O' +++ &(int cadena isupper05 $(ue +++ cadena < ',e&e G(illo' +++ &(int cadena isupper05 Dal)e +++ cadena < ',e&eg(illo' +++ &(int cadena isupper05 Dal)e +++ cadena < ',C,CGE?^^O' +++ &(int cadena isupper05 $(ue
Saber si una cadena contiene solo espacios en blanco *2todo: iss&aceLM Getorna: =rue o ?alse
+++ cadena < '&e&e g(illo' +++ &(int cadena isspace05 Dal)e +++ cadena < ' ' +++ &(int cadena isspace05 $(ue
Saber si una cadena tiene Formato +e Ttulo *2todo: istitleLM Getorna: =rue o ?alse
+++ cadena < ',e&e G(illo' +++ &(int cadena istitle05 $(ue +++ cadena < ',e&e g(illo' +++ &(int cadena istitle05 Dal)e
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
84
www.detodoprogramacion.com
M2todos de Sustitucin
+ar 1ormato a una cadena/ sustitu'endo te&to din7micamente *2todo: -ormatLXargs' XX.,argsM Getorna: la cadena -ormateada
+++ cadena < '6ien4enido a *i a&licaciFn O0Q' +++ &(int cadena format0 en Python 5 6ien4enido a *i a&licaciFn en ,%thon +++ cadena < '?*&o(te 6(uto: $O0Q . ?=B: $O1Q < ?*&o(te neto: O2Q' +++ &(int cadena format04332 242 4245 ?*&o(te 6(uto: $100 . ?=B: $21 < ?*&o(te neto: 121 +++ cadena < '?*&o(te 6(uto: $O6(utoQ . ?=B: $Oi4aQ < ?*&o(te neto: OnetoQ' +++ &(int cadena format0bruto/4332 i"a/242 neto/4245 ?*&o(te 6(uto: $100 . ?=B: $21 < ?*&o(te neto: 121 +++ &(int cadena format0bruto/4332 i"a/433 @ 24 M 4332 neto/433 @ 24 M 433 + 4335 ?*&o(te 6(uto: $100 . ?=B: $21 < ?*&o(te neto: 121
5eempla.ar te&to en una cadena *2todo: re&laceLGsubcadena a buscarH' Gsubcadena &or la cual reem&la4arHM Getorna: la cadena reem&la4ada
+++ 6u)ca( < 'no*6(e a&ellido' +++ (ee*&la7a(;&o( < 'Zuan ,L(e7' +++ &(int 'C)ti*ado A( no*6(e a&ellido:' replace0buscar2 reemplaJar.por5 C)ti*ado A( Zuan ,L(e7:
,liminar caracteres a la i.0uierda ' derec(a de una cadena *2todo: stri&L\GcaracterH]M Getorna: la cadena sustituida
+++ +++ YYY +++ YYY cadena < ' YYY eugenia6ahit co* &(int cadena strip05 eugenia6ahit co* &(int cadena strip01 15 eugenia6ahit co* '
,liminar caracteres a la i.0uierda de una cadena *2todo: lstri&L\GcaracterH]M Getorna: la cadena sustituida
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
88
www.detodoprogramacion.com
+++ cadena < 'YYY eugenia6ahit co*' +++ &(int cadena lstrip0 A. 5 eugenia6ahit co* +++ cadena < ' YYY eugenia6ahit co*' +++ &(int cadena lstrip05 YYY eugenia6ahit co*
,liminar caracteres a la derec(a de una cadena *2todo: rstri&L\GcaracterH]M Getorna: la cadena sustituida
+++ cadena < 'YYY eugenia6ahit co* +++ &(int cadena rstrip0 5 YYY eugenia6ahit co* '
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
8/
www.detodoprogramacion.com
Partir una cadena en tres partes/ utili.ando un separador *2todo: &artitionLGse&aradorHM Getorna: una tu&la de tres elementos donde el &rimero es el contenido de la cadena &revio al se&arador' el segundo' el se&arador mismo el tercero' el contenido de la cadena &osterior al se&arador
+++ tu&la < 'htt&:55YYY eugenia6ahit co*' partition0 AAA. 5 +++ &(int tu&la (Nhtt&:55N, NYYY N, Neugenia6ahit co*N) +++ &(otocolo, )e&a(ado(, do*inio < tu&la ++++ &(int ',(otocolo: O0QPnHo*inio: O1Q' fo(*at(&(otocolo, do*inio) ,(otocolo: htt&:55 Ho*inio: eugenia6ahit co*
Partir una cadena en arias partes/ utili.ando un separador *2todo: s&litLGse&aradorHM Getorna: una lista con todos elementos encontrados al dividir la cadena &or un se&arador
+++ :e%Yo(d) < '&%thon, guia, cu()o, tuto(ial' split0 2 +++ &(int :e%Yo(d) [N&%thonN, NguiaN, Ncu()oN, Ntuto(ialN" 5
Partir una cadena en en lneas *2todo: s&litlinesLM Getorna: una lista donde cada elemento es una -raccin de la cadena divida en l)neas
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
8)
www.detodoprogramacion.com
+++ te#to < '''^inea 1 ^inea 2 ^inea 3 ^inea 4 ''' +++ &(int te#to splitlines05 [N^inea 1N, N^inea 2N, N^inea 3N, N^inea 4N" +++ te#to < '^inea 1Pn^inea 2Pn^inea 3' +++ &(int te#to splitlines05 [N^inea 1N, N^inea 2N, N^inea 3N"
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
8'
www.detodoprogramacion.com
,)ercicio
E5ercicio +F1
Crear un m&dulo para 5alidaci&n de nombres de usuarios. $icho mdulo' deberB cum&lir con los siguientes criterios de aceptaci&n* El nombre de usuario debe contener un m)nimo de 2 caracteres un mB7imo de 12 El nombre de usuario debe ser al-anum>rico Nombre de usuario con menos de 2 caracteres' retorna el mensa!e GEl nombre de usuario debe contener al menos 2 caracteresH Nombre de usuario con mBs de 12 caracteres' retorna el mensa!e GEl nombre de usuario no &uede contener mBs de 12 caracteresH Nombre de usuario con caracteres distintos a los al-anum>ricos' retorna el mensa!e GEl nombre de usuario &uede contener solo letras n9merosH Nombre de usuario vBlido' retorna =rue
E5ercicio +F2
Crear un m&dulo para 5alidaci&n de contraseSas. $icho mdulo' deberB cum&lir con los siguientes criterios de aceptaci&n* "a contraseUa debe contener un m)nimo de A caracteres %na contraseUa debe contener letras min9sculas' ma 9sculas' n9meros al menos 1 carBcter no al-anum>rico "a contraseUa no &uede contener es&acios en blanco ContraseUa vBlida' retorna =rue ContraseUa no vBlida' retorna el mensa!e G"a contraseUa elegida no es seguraH
E5ercicio +F$
Crear un mdulo @ue solicite al usuario el ingreso de un nombre de usuario contraseUa @ue los valide utili4ando los mdulos generados en los dos e!ercicios anteriores. <yuda: &ara contar la cantidad de caracteres de una cadena' en : thon se utili4a la -uncin incor&orada* len(cadena)
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
/;
www.detodoprogramacion.com
07
En este ca&)tulo' veremos los m>todos @ue &osee el ob!eto lista. Algunos de ellos' tambi>n se encuentran dis&onibles &ara las tuplas.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
/(
www.detodoprogramacion.com
M2todos de agregado
4gregar un elemento al 1inal de la lista *2todo: a&&endLGnuevo elementoHM
+++ no*6(e);*a)culino) < ['Bl4a(o', 'Zacinto', '0iguel', 'Cdga(do', 'Ha4id'" +++ no*6(e);*a)culino) append0 Eose 5 +++ &(int no*6(e);*a)culino) [NBl4a(oN, NHa4idN, NCdga(doN, NZacintoN, NZo)eN, NEic:%N, NZo)eN"
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
/2
www.detodoprogramacion.com
M2todos de eliminacin
,liminar el 3ltimo elemento de la lista *2todo: &o&LM Getorna: el elemento eliminado
+++ no*6(e);*a)culino) pop05 NGe(a(doN +++ &(int no*6(e);*a)culino) [NEic:%N, NBl4a(oN, NHa4idN, NCdga(doN, NZacintoN, NZo)eN, NEic:%N, NZo)eN, NZo)eN"
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
www.detodoprogramacion.com
M2todos de orden
Ordenar una lista en re ersa (in ertir orden) *2todo: reverseLM
+++ no*6(e);*a)culino) re"erse05 +++ &(int no*6(e);*a)culino) [NZo)eN, NZo)eN, NEic:%N, NZacintoN, NHa4idN, NBl4a(oN, NEic:%N"
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
/%
www.detodoprogramacion.com
M2todos de b3s0ueda
Contar cantidad de apariciones elementos *2todo: countLelementoM
+++ +++ 2 +++ +++ 2 no*6(e);*a)culino) < ['Bl4a(o', '0iguel', 'Cdga(do', 'Ha4id', '0iguel'" no*6(e);*a)culino) count0 *iguel 5 no*6(e);*a)culino) < ('Bl4a(o', '0iguel', 'Cdga(do', 'Ha4id', '0iguel') no*6(e);*a)culino) count0 *iguel 5
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
/4
www.detodoprogramacion.com
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
/8
www.detodoprogramacion.com
Contar e"ementos
Al igual @ue &ara contar caracteres en una string' dis&onemos de la -uncin integrada len() &ara conocer la cantidad de elementos en una lista o en una tu&la*
+++ len0listaF5 10 +++ len(li)ta1) 4 +++ len(tu&la2) 4
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
//
www.detodoprogramacion.com
08
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
/)
www.detodoprogramacion.com
M2todos de eliminacin
6aciar un diccionario *2todo: clearLM
+++ dicciona(io < O'colo(': '4ioleta', 'talle': 'cA', '&(ecio': 1-4 28Q +++ &(int dicciona(io ONcolo(N: N4ioletaN, N&(ecioN: 1-4 28, NtalleN: NcANQ +++ dicciona(io.clear05 +++ &(int dicciona(io OQ
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
/'
www.detodoprogramacion.com
+++ )ecuencia < ['colo(', 'talle', '*a(ca'" +++ dicciona(io1 < dict.fromBeys0secuencia5 +++ dicciona(io1 ONcolo(N: @one, N*a(caN: @one, NtalleN: @oneQ +++ dicciona(io2 < dict.fromBeys0secuencia2 1"alor 6 defecto15 +++ dicciona(io2 ONcolo(N: N4alo( # defectoN, N*a(caN: N4alo( # defectoN, NtalleN: N4alo( # defectoNQ
Concatenar 'iccionarios
I>todo* u&dateLdiccionarioM
+++ dicciona(io1 < O'colo(': '4e(de', '&(ecio': 48Q +++ dicciona(io2 < O'talle': '0', '*a(ca': '^aco)te'Q +++ dicciona(io1.update0diccionario25 +++ dicciona(io1 ONcolo(N: N4e(deN, N&(ecioN: 48, N*a(caN: N^aco)teN, NtalleN: N0NQ
'i la cla e no e1iste, la crea con el alor por defecto. 'iempre retorna el alor para la cla e pasada como parmetro.
+++ (e*e(a < O'colo(': '(o)a', '*a(ca': 'da(a'Q +++ cla4e < (e*e(a setdefault0 talle 2 O 5 +++ cla4e NaN +++ (e*e(a ONcolo(N: N(o)aN, N*a(caN: Nda(aN, NtalleN: NaNQ +++ (e*e(a2 < (e*e(a co&%() +++ (e*e(a2 ONcolo(N: N(o)aN, N*a(caN: Nda(aN, NtalleN: NaNQ +++ cla4e < (e*e(a2 setdefault0 estampado 5 +++ cla4e +++ (e*e(a2 ONcolo(N: N(o)aN, Ne)ta*&adoN: @one, N*a(caN: Nda(aN, NtalleN: NaNQ +++ cla4e < (e*e(a2 setdefault0 marca 2 ;acoste 5 +++ cla4e Nda(aN +++ (e*e(a2 ONcolo(N: N(o)aN, Ne)ta*&adoN: @one, N*a(caN: Nda(aN, NtalleN: NaNQ
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
);
www.detodoprogramacion.com
M2todos de retorno
1btener e" a"or 'e una c"a e
*2todo: getLclave\' Gvalor 7 de-ecto si la clave no e7isteH]M
+++ (e*e(a get0 color 5 N(o)aN +++ (e*e(a get0 stocB 5 +++ (e*e(a get0 stocB 2 N)in )toc:N
sin stocB 5
0alida*
Cl 4alo( de la cla4e colo( e) (o)a Cl 4alo( de la cla4e *a(ca e) da(a Cl 4alo( de la cla4e talle e) a
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
)(
www.detodoprogramacion.com
+++ dicciona(io < ONcolo(N: N(o)aN, N*a(caN: Nda(aN, NtalleN: NaNQ +++ cla4e) < dicciona(io.Beys05 +++ cla4e) [Ncolo(N, N*a(caN, NtalleN"
+++ dicciona(io < ONcolo(N: N(o)aN, N*a(caN: Nda(aN, NtalleN: NaNQ +++ len0diccionario5 3
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
)2
www.detodoprogramacion.com
09
: thon nos &ermite traba!ar en dos niveles di-erentes con res&ecto al sistema de archivos directorios. %no de ellos' es a trav>s del mdulo os' @ue como su nombre lo indica' nos -acilita el traba!o con todo el sistema de archivos directorios' a nivel del &ro&ios #istema 5&erativo. El segundo nivel -mBs sim&le-' es el @ue nos &ermite traba!ar con archivos' mani&ulando su lectura escritura a nivel de la a&licacin tratando a cada archivo como un ob!eto. En talleres anteriores' hemos utili4ado el ob!eto -ile m>todos como (ead()' (eadline)() clo)e(). En este ca&)tulo' nos en-ocaremos en este segundo nivel de traba!o' con el -in de conocer al ob!eto ?ile en ma or &ro-undidad.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
www.detodoprogramacion.com
#olo escritura. #obreescribe el archivo si e7iste. Crea el archivo si no e7iste. #olo escritura en modo binario. #obreescribe el archivo si e7iste. Crea el archivo si no e7iste.
Ab
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
)%
www.detodoprogramacion.com
A+
Escritura lectura. #obreescribe el archivo si e7iste. Crea el archivo si no e7iste. Escritura lectura en modo binario. #obreescribe el archivo si e7iste. Crea el archivo si no e7iste. AUadido Lagregar contenidoM. Crea el archivo si >ste no e7iste. AUadido en modo binario Lagregar contenidoM. Crea el archivo si >ste no e7iste. AUadido Lagregar contenidoM lectura. Crea el archivo si >ste no e7iste.
Ab+ a ab a+ ab+
Al inicio del archivo #i el archivo e7iste' al -inal de >ste. #i el archivo no e7iste' al comien4o. #i el archivo e7iste' al -inal de >ste. #i el archivo no e7iste' al comien4o. #i el archivo e7iste' al -inal de >ste. #i el archivo no e7iste' al comien4o.
AUadido Lagregar contenidoM lectura en modo #i el archivo e7iste' al -inal de >ste. binario. #i el archivo no e7iste' al comien4o. Crea el archivo si >ste no e7iste.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
)4
www.detodoprogramacion.com
read07bytes:5
a(chi4o < o&en('(e*e(a) t#t', '(') contenido < archi"o.read05 &(int contenido
readline07bytes:5 readlines05
a(chi4o < o&en('(e*e(a) t#t', '(') linea1 < archi"o.readline05 &(int linea1 a(chi4o < o&en('(e*e(a) t#t', '(') fo( linea in archi"o.readlines05: &(int linea a(chi4o < o&en('(e*e(a) t#t', '(') linea1 < a(chi4o (eadline() *a) < a(chi4o (ead(archi"o.tell05 G 2) if archi"o.tell05 + 80: a(chi4o )ee:(80) a(chi4o < o&en('(e*e(a) t#t', '(.') contenido < a(chi4o (ead() final;de;a(chi4o < a(chi4o tell() archi"o.Arite01=ue"a linea15 a(chi4o )ee:(final;de;a(chi4o) nue4o;contenido < a(chi4o (ead() &(int nue4o;contenido J @ue4a linea a(chi4o < o&en('(e*e(a) t#t', '(.') contenido < a(chi4o (ead() final;de;a(chi4o < a(chi4o tell() lista / 71;nea 4Pn12 1;nea 21: archi"o.Aritelines0lista5 a(chi4o )ee:(final;de;a(chi4o) &(int a(chi4o (eadline() J ^Mnea 1 &(int a(chi4o (eadline() J ^Mnea 2 a(chi4o < o&en('(e*e(a) t#t', '(') contenido < a(chi4o (ead() archi"o.close05 &(int contenido
tell05
Arite0cadena5
#ecuencia serB cual@uier Aritelines0secuencia5 iterable cu os elementos serBn escritos uno &or l)nea
close05
Cierra un archivo
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
)8
www.detodoprogramacion.com
a(chi4o < o&en('(e*e(a) t#t', '(.') contenido < a(chi4o (ead() no*6(e < archi"o.name *odo < archi"o.mode encoding < archi"o.encoding a(chi4o clo)e() if archi"o.closed: &(int 'Cl a(chi4o )e ha ce((ado co((ecta*ente' el)e: &(int 'Cl a(chi4o &e(*anece a6ie(to'
Cl a(chi4o )e ha ce((ado co((ecta*ente +++ no*6(e N(e*e(a) t#tN +++ *odo N(.N +++ encoding @one
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
)/
www.detodoprogramacion.com
Cuando una estructura Yith -inali4a' : thon' automBticamente invoca al m>todo clo)e()' como se &uede ver en el valor de la &ro&iedad clo)ed Como tambi>n se de!a ver en el e!em&lo' la sentencia Yith utili4a un alias &ara el ob!eto -ile' lo @ue &ermite acceder al ob!eto -ile' !ustamente' &or el alias indicado.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
))
www.detodoprogramacion.com
10
: thon nos &rovee de un gran abanico de mdulos @ue integran su librer)a estBndar' como bien &uede verse en el manual o-icial* htt&*++docs.& thon.org+modinde7.html. En este ca&)tulo' veremos algunos de ellos @ue se destacan a sea &or la -recuencia de uso como &or sus &restaciones.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
)'
www.detodoprogramacion.com
Mdulos de sistema
Entre los mdulos de sistema @ue : thon nos &rovee a trav>s de su librer)a estBndar' &odemos destacar tres* os' sys' subprocess Jaremos una breve reseUa de cada uno de ellos' a continuacin.
D)'u"o os
El mdulo os nos &ermite acceder a -uncionalidades de&endientes del #istema 5&erativo. #obre todo' a@uellas @ue nos re-ieren in-ormacin sobre el entorno del mismo nos &ermiten mani&ular la estructura de directorios L&ara leer escribir archivos' ver ca&)tulo 1M. Ge.erencia o.icial: htt&*++docs.& thon.org+librar +os.html
Archi os : 'irectorios
El mdulo os nos &rovee de varios m>todos &ara traba!ar de -orma &ortable con las -uncionalidades del sistema o&erativo. <eremos a continuacin' los m>todos mBs destacados de este mdulo.
Descripci&n #aber si se &uede acceder a un archivo o directorio Conocer el directorio actual Cambiar de directorio de traba!o Cambiar al directorio de traba!o ra)4 Cambiar los &ermisos de un archivo o directorio Cambiar el &ro&ietario de un archivo o directorio Crear un directorio Crear directorios recursivamente Eliminar un archivo Eliminar un directorio Eliminar directorios recursivamente (enombrar un archivo Crear un enlace simblico o) getcAd() o) chdir(nue4o;&ath) o) chroot() o) chmod(&ath, &e(*i)o)) o) choAn(&ath, &e(*i)o)) o) mBdir(&ath[, *odo") o) mBdirs(&ath[, *odo") o) remo"e(&ath) o) rmdir(&ath) o) remo"edirs(&ath) o) rename(actual, nue4o) o) symlinB(&ath, no*6(e;de)tino) *2todo o) access(&ath, *odo;de;acce)o)
Para ver al mdulo os trabajando con funcionalidades del sistema de archi os y directorios, e"ecutar python os.e6amples de la carpeta )ou(ce) de este cap2tulo.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
';
www.detodoprogramacion.com
os.&ath
El mdulo o) tambi>n nos &rovee del submdulo &ath Los.pathM el cual nos &ermite acceder a ciertas -uncionalidades relacionadas con los nombres de las rutas de archivos directorios. Entre ellas' las mBs destacadas se describen en la siguiente tabla*
Descripci&n (uta absoluta $irectorio base #aber si un directorio e7iste Conocer 9ltimo acceso a un directorio Conocer tamaUo del directorio #aber si una ruta es* 2na ruta absoluta 2n archi/o 2n directorio 2n enlace simblico 2n punto de montaje o) path.isabs(&ath) o) path.isfile(&ath) o) path.isdir(&ath) o) path.islinB(&ath) o) path.ismount(&ath) *2todo o) path.abspath(&ath) o) path.basename(&ath) o) path.e6ists(&ath) o) path.getatime(&ath) o) path.getsiJe(&ath)
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
'(
www.detodoprogramacion.com
D)'u"o s:s
El mdulo )%) es el encargado de &roveer variables relacionadas con el int>r&rete. -uncionalidades' directamente
Sys.getsiJeof0o63ect[, default"5
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
'2
www.detodoprogramacion.com
D)'u"o sub&rocess
El mdulo )u6&(oce)) es a@uel @ue nos &ermite traba!ar de -orma directa con rdenes del sistema o&erativo.
-l mdulo subprocess se presenta en este cap2tulo solo con fines educati os, mostrando e"emplos !sicos y sencillos. Por lo tanto, se recomienda tener mucho cuidado en el uso de este mdulo desaconsejando su uso para rdenes que puedan comprometer el sistema!
Entre los m>todos mBs comunes de )u6&(oce))' &odemos encontrar )u6&(oce)).call05. Este m>todo' suele ser 9til' &ara e!ecutar rdenes sencillas' como &or e!em&lo' limpiar la pantalla*
f(o* )u6&(oce)) i*&o(t call call01clear15
El m>todo call' es&erarB recibir como &rimer argumento' el comando a ser e!ecutado' como se mostr en el e!em&lo anterior. #in embargo' si el comando re@uiere argumentos' como &rimer &arBmetro' call necesitarB recibir una lista donde el &rimer elemento serB el comando el segundo' sus argumentos. %n e!em&lo de ello' es el siguiente cdigo encargado de hacer un listado de archi5os y directorios*
f(o* )u6&(oce)) i*&o(t call co*ando;%;a(gu*ento) < 71ls12 1,lha1: call(co*ando;%;a(gu*ento))
El mdulo )u6&(oce)) tambi>n nos &rovee del submdulo Popen' el cuBl nos &ermite' no solo e!ecutar rdenes al igual @ue call' sino mantener un me!or control sobre las salidas.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
'
www.detodoprogramacion.com
"o &rimero @ue debemos tener en cuenta' es @ue ,o&en Lal igual @ue callM' como &rimer argumento' recibirB el comando a ser e!ecutado o una lista de dos elementos' donde el &rimero sea el comando el segundo' la lista de argumentos. Jasta a@u)' no ha di-erencia con call #in embargo' si la salida del &roceso abierto con :o&en no es tratada' el &roceso @uedarB abierto. :or e!em&lo' el siguiente c&digo ,uedar#a en ejecuci&n*
f(o* )u6&(oce)) i*&o(t ,o&en ,o&en([Nl)N, N2lhaN"
A di-erencia de call' :o&en no es un m>todo de )u6&(oce))' sino' un ob!eto. Cmo tal' la -orma correcta de iniciar un &roceso con :o&en' serB entonces' crear un ob!eto :o&en &ara &oder acceder a sus m>todos' as) evitar' @ue el &roceso @uede abierto en e!ecucin. $e esta -orma' creamos el ob!eto luego' llamamos al m>todo Aait05 de ,o&en' el cual espera a ,ue el proceso .inalice.
f(o* )u6&(oce)) i*&o(t ,o&en proceso / Popen071ls12 1,lha1:5 proceso.Aait05
#i e!ecutamos el cdigo anterior' al igual @ue sucede con call' la salida obtenida es directamente &lasmada en &antalla. Es a@u) donde entra en !uego' el mane!o de las salidas @ue ,o&en nos &ermite hacer.
nomenclatura corres&ondiente a la salida estBndar en sistemas %N3P-"i.e. Es la encargada de almacenar la salida de un &rograma.
stdin
nomenclatura corres&ondiente a la entrada estBndar en sistemas %N3P-li.e. Es la encargada de enviar in-ormacin a un &rograma.
stderr
al igual @ue las anteriores' se utili4a como re-erencia a los errores &roducidos en la salida de un &rograma.
'%
www.detodoprogramacion.com
e-ectuar dicha ca&tura' tanto stdout como stdin +o stderr se pasan como argumentos cla5e a Popen El 5alor de dichos argumentos+ deber7 ser un archivo o una tuber#a @ue -uncione como tal. D &ara esto' ,o&en' tambi>n nos &rovee de una tuber)a &ara ca&turar dichas entradas salidas' llamada P(PE. $e esta -orma' si @uisi>ramos ca&turar la salida estBndar o error de nuestro cdigo' debemos &asarle a ,o&en' )tdout )tde(( como argumentos claves' con ,?,C como valor de cada uno de ellos' &ara lo cual' tambi>n debemos im&ortar ,?,C*
f(o* )u6&(oce)) i*&o(t P(PE, ,o&en &(oce)o < ,o&en([Nl)N, N2lhaN", stdout/P(PE, stderr/P(PE)
Al ca&turar la salida estBndar en una tuber)a' a no serB necesario &oner en es&era al &roceso' &uesto @ue directamente serB ca&turado &or la tuber)a' &ermiti>ndonos acceder a la lectura tanto de )tdout como de )tde((' como si se tratara de cual@uier otro archivo*
&(oce)o < ,o&en([Nl)N, N2lhaN", stdout/P(PE, stderr/P(PE) e((o(;econt(ado < proceso.stderr.read05 li)tado < proceso.stdout.read05
Ca&turando la salida' como bien se &uede ver en el e!em&lo' )tdout )tde((' son tratados como archivos Lde hecho' lo son a @ue hemos utili4ado una tuber)aM. :or lo tanto' deben ser cerrados una ve4 le)dos*
&(oce)o < ,o&en([Nl)N, N2lhaN", )tdout<,?,C, )tde((<,?,C) e((o(;econt(ado < &(oce)o )tde(( (ead() proceso.stderr.close05 li)tado < &(oce)o )tdout (ead() proceso.stdout.close05
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
'4
www.detodoprogramacion.com
A &artir de la l)nea donde &d6 ,d6() )et;t(ace() se encuentra' al e!ecutar &%thon tu;a(chi4o &%' ,d6 comen4arB a e!ecutar tu archivo l)nea &or l)nea' es&erando tu res&uesta. :or e!em&lo' en el cdigo anterior' tras la e!ecucin del archivo' la &antalla se lim&iarB ,d6 comen4arB a actuar' mostrBndote la l)nea @ue sigue*
2+ &(oce)o < ,o&en([Nl)N, N2lhaN", )tdout<,?,C, )tde((<,?,C) (,d6)
,d6 estarB es&erando tu orden &ara continuar. Entre las rdenes mBs usuales' &uedes indicar*
n s c C
(ne#t) e3ecuta el cFdigo *o)t(ado % )alta a la )iguiente lMnea de tu a(chi4o ()te&) te *o)t(a(S &a)o a &a)o el ca*ino (eco((ido ha)ta &ode( e3ecuta( la )iguiente lMnea de tu a(chi4o (continue) e3ecuta el a(chi4o ha)ta encont(a( un &unto de Kuie6(e (Kuit) a6andona( el de6ugge(
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
'8
www.detodoprogramacion.com
:ero no solo un comando' &uede ser ordenado a ,d6 =ambi>n es &osible' Gde&urarH el cdigo de tu archivo' e!ecutando alguna instruccin*
2+ li)tado < &(oce)o )tdout (ead() (,d6) n + 5ho*e5eugenia5Cu()o)5,%thon &a(a ,(inci&iante)50Fdulo 85)ou(ce)5)u6&(oce));e#a*&le)5e#a*&le) &%(13)V*odule+() 2+ &(oce)o )tdout clo)e() 0Pdb5 listado.upper05 1$%$8; 42RPn&RS)RS)R,) 2 EO?E=(8 EO?E=(8 N23R 2342,37,37 47+FN .Pn&RS)RS)R,) EO?E=(8 EO?E=(8 N23R 2342,37,37 47+FN ..Pn,RS,RS,R,, 4 EO?E=(8 EO?E=(8 N2T 2342,37,37 23+N- E)8*P;ES.P!Pn1 (,d6)
Alternativamente' tambi>n &uedes obtener la documentacin en -ormato J=I". :ara ello' deberBs e!ecutar* pydoc ,A nombre.del.modulo 5tra alternativa' es iniciar un servidor 8eb local' @ue te &ermita navegar &or la documentacin de tu a&&. :ara ello' sim&lemente e!ecuta pydoc ,p n Ldonde n' es el n9mero del &uerto &or el cual accederBs. :or e!em&lo' pydoc ,p -3-3 inicia el servidor en htt&:55localho)t:80805M.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
'/
www.detodoprogramacion.com
#i vemos el te7to deba!o de G=est*H' luce como el int>r&rete interactivo. A@u) esto invocando a la -uncin*
+++ )u*a(;do);nu*e(o)(28, 10)
D deba!o' esto GsimulandoH el resultado @ue arro!ar)a en el int>r&rete interactivo. Esto' serB inter&retado &or docte)t' como Gel resultado es&eradoH*
38
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
')
www.detodoprogramacion.com
$(%ing: )u*a(;do);nu*e(o)(30, 20) C#&ecting: 80 o: 1 ite*) had no te)t): ;;*ain;; 1 ite*) &a))ed all te)t): 2 te)t) in ;;*ain;; )u*a(;do);nu*e(o) 2 te)t) in 2 ite*) 2 passed and 3 failed. $est passed.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
''
www.detodoprogramacion.com
resuel en
necesidades
Con el mdulo random de la librer)a estBndar de : thon' es &osible obtener datos aleatorios. Entre los m>todos de los cuBles dis&one' se destacan los siguientes*
*2todo random.randint0a, 65 random.choice0)ecuencia5 random.shuffle0)ecuencia5 random.sample0)ecuencia, n5 Descripci&n (etorna un n9mero aleatorio entero entre a (etorna una me4cla de los elementos de una secuencia (etorna n elementos aleatorios de secuencia b (etorna cual@uier dato aleatorio de secuencia
import random # !enerar n+meros aleatorios entre ,---- y ----li)ta < [" fo( n in (ange(0, 80): li)ta a&&end(random.randint0NTTTT2 TTTTT5) # Ele#ir un n+mero al a.ar nu*e(o;al;a7a( < random.choice0lista5 # Ele#ir / n+meros al a.ar nu*e(o);al;a7a( < random.sample0lista2 G5 # reordenar los elementos de una lista *u3e(e) < ['Bna', 'Ueat(i7', 'Ca*ila', 'Ca(*en', 'Helia', 'Ho(a', 'C*il)e'" random.shuffle0mujeres5
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
(;;
www.detodoprogramacion.com
/ra&ear un te.to
El mdulo te6tArap' entre muchas otras -uncionalidades' a trav>s del m>todo Y(a&()' nos &ermite :rapear un te7to e7tenso' obteniendo una lista con cada l)nea de te7to conservando la longitud deseada*
te#tYa(& Y(a&(te#to, 80)
(etorna una lista donde cada elemento serB una l)nea de te7to' de longitud no su&erior a los A0 caracteres.
import te6tArap te#to < _^o(e* i&)u* ad hi) )c(i&ta 6landit &a(tiendo, eu* fa)tidii accu*)an eu(i&idi) in, eu* li6e( hend(e(it an eui ut Yi)i 4oci6u) )u)ci&iantu(, Kuo dicit (iden) incide(int id euo *undi lo6o(ti) (efo(*idan) eu, legi*u) )en)e(it definie6a) an eo) Cu )it tincidunt inco((u&te definitione*, 4i) *utat affe(t &e(ci&it cu, ei(*od con)ectetue( )ignife(u*Kue eu &e( ?n u)u latine eKuide* dolo(e) euo no falli 4i(i) intellega*, ut fugit 4e(itu) &lace(at &e( f Y(a&) < te6tArap.Arap0te6to2 L35 fo( linea in Y(a&): &(int linea
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
(;(
www.detodoprogramacion.com
Mdulos e Internet
Acce'er a" na ega'or /eb
Abrir una %(" en una nueva &estaUa del navegador*
import AebbroAser AebbroAser.open.neA.tab('htt&:55YYY eugenia6ahit co*')
4s so!re AebbroAser en http#33docs.python.org3li!rary3we!!rowser.html urllib2 es otro mdulo interesante para manipular peticiones 566P e interactuar a tra s de 7nternet# http#33docs.python.org3li!rary3urlli!8.html
Conectarse @a G38
El mdulo ftplib de la librer)a estBndar de : thon' nos &rovee de los m>todos necesarios &ara crear clientes ?=: de -orma rB&ida sencilla.
(;2
www.detodoprogramacion.com
*2todo '$P.connect0ho)t[, &ue(to, ti*eout") '$P.login0u)e(, &a))5 '$P.close05 '$P.set.pas"06ool5 '$P.getAelcome05 '$P.dir05 '$P.cAd0&ath5 '$P.mBd0&ath5 '$P.pAd05 '$P.rmd0&ath5 '$P.storlines01S$%R de)tino12 open0localfile2 1r15 '$P.rename0actual, nue4o5 '$P.delete0filena*e5 '$P.retrlines01RE$R a(chi4o;(e*oto15
Descripci&n #e conecta al servidor ?=: #e loguea en el servidor ?inali4a la cone7in Establece la cone7in en modo &asivo si el &arBmetro es =rue. (etorna el mensa!e de bienvenida del servidor (etorna un listado de archivos la car&eta actual Crea un nuevo directorio (etorna el directorio de traba!o actual Elimina el directorio &ath "ee local-ile lo escribe en destino directorios de
(enombra el archivo GactualH &or GnuevoH Elimina un archivo "ee archivoOremoto retorna su contenido
J 2G2 coding: utf28 2G2 from ftplib import '$P ftp / '$P05 ft& connect(N!! 228 82 93N, 21, 2999) ft& login(Nu)e(N, N&a))N) &(int ft& getAelcome() ft& mBd(Nnue4o2di(N) ft& cAd(Nnue4o2di(N) &(int ft& pAd() ft& storlines(NA$OE e#a*&le t#tN, o&en(Nft&;e#a*&le) &%N, N(N)) ft& rename(Ne#a*&le t#tN, Ne#a*&le &%N) ft& dir() a(chi4o < ft& retrlines(NEC$E e#a*&le &%N) &(int a(chi4o ft& close()
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
(;
www.detodoprogramacion.com
11
En este ca&)tulo haremos una introduccin a conce&tos elementales sobre bases de datos' I #N" el lengua!e de consulta #N".
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
(;%
www.detodoprogramacion.com
4cerca de M'S9%
I #N" es un ser5idor de Bases de Datos 39: L#tructured Nuer "anguageM @ue se distribu e en dos versiones* %na versin 6:" L#o-t,are "ibreM 5tra versin &rivativa' llamada I #N" AB
En este curso' utili4aremos la versin estBndar licenciada ba!o la 6N% 6eneral :ublic "icense L6:"M. :uedes descargar el manual completo de *y39: en el siguiente enlace* htt&*++do,nloads.m [email protected]+docs+re-man-;.0-es.a0.&d-
Insta"aci)n : configuraci)n 'e D:SH:ara instalar I #N"' &or l)nea de comandos' escribe*
)udo a&t2get in)tall mysCl,ser"er mysCl,client
$urante la instalacin' el sistema te &edirB @ue ingreses una contraseUa &ara la administracin de I #N". Asigna una contraseUa @ue &uedas recordar -Bcilmente mantenla a salvo a @ue deberBs utili4arla -recuentemente. %na ve4 @ue -inalice la instalacin' e!ecuta el siguiente comando a -in de securi4ar el servidor I #N" Lesta con-iguracin' es vBlida tambi>n' &ara servidores de &roduccinM*
)udo mysCl.secure.installation
A continuacin' el sistema te &edirB @ue ingreses la contraseUa actual &ara administracin de I #N" Lla del usuario root de I #N"M. =en en cuenta @ue la contraseUa no serB mostrada mientras escribes*
Cnte( cu((ent &a))Yo(d fo( (oot (ente( fo( none):
A continuacin' te ®untarB si deseas modi-icar esa contraseUa. #alvo @ue desees modi-icarla' ingresa n*
Change the (oot &a))Yo(d` [g5n" n
Ahora la ®unta' serB si deseas eliminar usuarios annimos. (es&onde @ue s)*
Ee*o4e anon%*ou) u)e()` [g5n" !
"uego' te ®untarB si desees desabilitar el acceso remoto al usuario root de I #N". :or su&uesto' res&onde @ue s)*
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
(;4
www.detodoprogramacion.com
"a siguiente ®unta serB si deseas eliminar la base de datos de &rueba ella. =ambi>n res&onde @ue s)*
Ee*o4e te)t data6a)e and acce)) to it` [g5n" !
el acceso a
?inalmente' te ®untarB si deseas recargar las tablas de &rivilegios Lesto es &ara asegurar @ue todos los cambios reali4ados sur!an e-ectoM. Entonces' res&onde s)' &or 9ltima ve4*
Eeload &(i4ilege ta6le) noY` [g5n" !
Iniciar, reiniciar : 'etener e" ser i'or D:SHEn ocasiones necesitarBs iniciar' reiniciar o detener el servidor de bases de datos' I #N". "as opciones dis&onibles son*
stop start restart detiene el )e(4ido( inicia el )e(4ido( (einicia el )e(4ido(
:ara iniciar' reiniciar o detener el servidor' deberBs ejecutar el siguiente comando' seguido de la o&cin deseada*
sudo MetcMinit.dMmysCl o&cion;de)eada
"gicamente reem&la4ando o&cion &or )to&' )ta(t o (e)ta(t seg9n si deseas &arar' iniciar o reiniciar el servidor.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
(;8
www.detodoprogramacion.com
A'ministraci)n 'e D:SH%na ve4 @ue comencemos a utili4ar bases de datos' necesitarBs &oder acceder a las o&ciones de administracin de las mismas. :or lo tanto' te recomiendo tener siem&re a mano este ca&)tulo' &ara &oder consultarlo con -recuencia.
A continuacin' deberBs ingresar la contraseUa del root de I #N" Lno es la del root del #5. Es la @ue hemos con-igurado durante la instalacin de I #N"M. "as 2u 2& signi-ican usuario &ass,ord res&ectivamente.
All) &odremos escribir los comandos necesarios &ara administrar el servidor de bases de datos.
DE3CG0PC0TC
Iuestra todas las bases de datos creadas en el servidor 3ndicar @ue vas a comen4ar a utili4ar la base de datos elegida Crear una nueva base de datos #alir del shell interactivo
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
(;/
www.detodoprogramacion.com
Denominaci&n
(=$0=5 &E<(*8;0=2 &5 9%%; &8$E &8$E$(*E $(*ES$8*P $(*E !E8R0&5 <D8R0=5 V8R<D8R0=5 9;%9
Especi.icaciones
@ < cantidad de dMgito) @ < cantidad de dMgito) totale) H < cantidad de deci*ale)
Ejemplo
?@$(8) HCC?0B^(10, 2) UOO^ HB$C HB$C$?0C $?0CA$B0, $?0C
H < cantidad de dMgito) (2 o 4) @ < longitud de la cadena W ent(e 0 % 288 @ < longitud *S#i*a de la cadena W ent(e 0 % !8832
Sint7.is b7sica 'e "as sentencias SH%na sentencia #N" Ldenominada query en la !erga in-ormBticaM' es una instrucci&n escrita en lengua!e #N". <eremos a@u)' el ti&o de sentencias mBs habituales.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
(;)
www.detodoprogramacion.com
E!em&lo*
CECB$C $BU^C &(oducto)( &(oducto =BEC/BE(128), de)c(i&cion U^OU, &(ecio HCC?0B^(!, 2), en;)toc: UOO^ )h
E7&licacin*
CECB$C $BU^C &(oducto)
&(oducto =BEC/BE(128),
Crear un cam&o llamado &roducto' de ti&o cadena de te7to de longitud variable' con una longitud mB7ima de 12; caracteres
de)c(i&cion U^OU,
Crear un cam&o &recio de ti&o num>rico de longitud mB7ima de 2 dig)tos de los cuales' solo 2 &ueden ser decimales
en;)toc: UOO^
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
(;'
www.detodoprogramacion.com
E!em&lo*
?@ACE$ ?@$O &(oducto)(&(oducto, &(ecio, en;)toc:) =B^aCA(NUol)a de do(*i( &a(a alta *ontaXaN, 234 !8, $EaC)h
E7&licacin*
?@ACE$ ?@$O &(oducto)(&(oducto, &(ecio, en;)toc:)
enOstoc. de la tabla
Con los valores GBolsa de dormir &ara alta montaUaH' 230.2; res&ectivamente en cada uno de los cam&os indicados
verdadero'
Se"eccionar registros
#inta7is*
SE;E<$ 'R%* ca*&o1, ca*&o2, ca*&o10 ta6lah
E!em&lo*
AC^CC$ DEO0 &(oducto, &(ecio &(oducto)h
E7&licacin*
AC^CC$ &(oducto, &(ecio
&recio
$e la tabla &roductos
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
((;
www.detodoprogramacion.com
Do'ificar registros
#inta7is*
OP&8$E SE$ ta6la ca*&o1 < 4alo(, ca*&o2 < 4alo(, ca*&o10 < 4alo(h
E!em&lo*
a,HB$C AC$ &(oducto) en;)toc: < DB^AC, &(ecio < 0h
E7&licacin*
a,HB$C &(oducto)
AC$
&(ecio < 0h
el cam&o &recio a 0
E"iminar registros
#inta7is*
&E;E$E 'R%* ta6lah
E!em&lo*
HC^C$C DEO0 &(oducto)h
E7&licacin*
HC^C$C DEO0 &(oducto)h
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
(((
www.detodoprogramacion.com
Consu"tas a an6a'as
#i bien no veremos a@u) consultas realmente com&le!as' a @ue el curso se basa en el lengua!e de &rogramacin : thon no' en el lengua!e de consulta #N"' haremos un rB&ido &aseo' &or las o&ciones dis&onibles en #N" &ara sentencias mBs com&le!as @ue las anteriores.
-a c"7usu"a /EEIE
"as sentencias en #N"' se com&onen de cl7usulas. D i/CEC es una de ellas. "a cl7usula SDERE nos &ermite .iltrar registros en una sentencia #N". Esta clBusula' -unciona de -orma similar a la com&aracin de e7&resiones en : thon' utili4ando los siguientes operadores de comparaci&n*
Q / +< *a%o( Kue igual Kue *a%o( o igual Kue W WQ V< *eno( Kue di)tinto Kue *eno( o igual Kue
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
((2
www.detodoprogramacion.com
<eamos algunos e!em&los* #eleccionar &roductos donde &recio sea menor @ue 1000*
AC^CC$ DEO0 SDERE &(oducto, &(ecio &(oducto) precio W 4333U
Aumentar el 10Z del &recio de los &roductos' @ue actualmente se encuentren entre 1;0 200*
a,HB$C AC$ SDERE &(oducto) &(ecio < (&(ecio G 1 10) precio 9E$SEE= 4G3 8=& 233U
Eliminar &roductos cu os &recios sean 100' 200 +o 300 &roducto sea nulo*
HC^C$C DEO0 SDERE 8=& %R &(oducto) precio (=04332 2332 F335 0en.stocB (S '8;SE producto (S =O;;5U
DEO0 i/CEC
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
((
www.detodoprogramacion.com
B@H %R&ER 9!
&(ecio UC$iCC@ 1 B@H 80 en;)toc: ?A @O$ DB^AC precio &ES<2 producto 8S<U
/tese 0ue los alias que contengan caracteres e"tra#os, de!en ser encerrados entre comillas simples
Gunciones 'e" "engua5e SH- 'e D:SHEs &osible tambi>n' utili4ar diversas -unciones &ro&ias del lengua!e #N" - a sea estandar o de I #N"- a -in de &oder obtener los datos con cierto -ormato. <eremos a@uellas de uso mBs -recuente.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
((%
www.detodoprogramacion.com
Ntese @ue las cadenas de caracteres deben encerrarse entre comillas sim&les o&erador de concatenacin &ara esta -uncin' es la coma.
@ue el
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
((4
www.detodoprogramacion.com
'e
un
cam&o
4A3E3IDE
1btener e" registro con e" a"or m7.imo : m@nimoC DAK!( : DI+!(
AC^CC$ DEO0 *8)0precio5 &(oducto)h
AC^CC$ DEO0
*(=0precio5 &(oducto)h
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
((8
www.detodoprogramacion.com
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
((/
www.detodoprogramacion.com
id ?@$(11) @O$ @a^^ Ba$O;?@CEC0C@$ ,E?0BEg jCg, &(oducto =BEC/BE(128) @O$ @a^^, &(ecio HCC?0B^(10, 2) @O$ @a^^, en;)toc: UOO^, de)c(i&cion U^OU @O$ @a^^, ?@HCc(&(ecio, en;)toc:) ) E=?(=E/(nno&9U
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
(()
www.detodoprogramacion.com
categoria
producto
El ob!eto &roducto' se relaciona directamente con el ob!eto categor)a. Esto signi-ica @ue nuestros &roductos' &ertenecen a una categor)a determinada. #e relacionan a trav>s del cam&o-&ro&iedad' categoriaOid. :ara crear bases de datos relacionales' primero debemos crear nuestros modelos ' a -in de obtener las relaciones @ue serBn necesarias*
class Catego(ia(o63ect): catego(ia;id < 0h catego(ia < '' acti4a < $(ue class ,(oducto(o63ect): &(oducto;id < 0 catego(ia < Catego(ia() &(oducto < '' &(ecio < 0 0 de)c(i&cion < ''
%na ve4 @ue tenemos los modelos' &odemos &asar a crear las tablas*
CECB$C $BU^C catego(ia( catego(ia;id ?@$(11) @O$ @a^^ Ba$O;?@CEC0C@$ ,E?0BEg jCg, catego(ia =BEC/BE(28) @O$ @a^^, acti4a UOO^ ) E=?(=E/(nno&9U
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
(('
www.detodoprogramacion.com
CECB$C $BU^C &(oducto( &(oducto;id ?@$(11) @O$ @a^^ Ba$O;?@CEC0C@$ ,E?0BEg jCg, categoria.id (=$0445 =%$ =O;;2 &(oducto =BEC/BE(288) @O$ @a^^, &(ecio HCC?0B^(-, 2) @O$ @a^^, de)c(i&cion U^OU, '%RE(?= RE! 0categoria.id5 RE'ERE=<ES categoria0categoria.id5 ) E=?(=E/(nno&9U
(uando el campo de una tabla hace referencia a la clave primaria de otra tabla, se denomina $cla e fornea% o $foreign $ey% (en ingls&. Para poder utilizar cla es forneas, 4y'9L necesita utilizar s2 o s2, el motor %nno&' ya 0ue es el <nico con soporte para stas.
Como &odrBs observar' el cam&o de la tabla &roducto' @ue hace re-erencia a la clave &rimaria de la tabla categor)a' se llama igual LcategoriaOidM. :odr)a tener un nombre di-erente' &ero mBs adelante lo veremos. Este campo+ debe ser creado en la tabla+ como cual,uier campo comNn. :a principal di.erencia+ radica en ,ue debemos indicar ,ue este campo+ debe ser tratado como una cla5e .or7nea. :ara ello' utili4amos la siguiente sinta7is*
DOEC?G@ jCg (no*6(e;de;la;cla4e;fo(anea) ECDCEC@CCA ta6la;(elacionada(no*6(e;de;la;cla4e;&(i*a(ia)
(K es una (oreign Key (cla e fornea& mientras 0ue PK es una Primary Key (cla e primaria&
Esto signi-ica @ue siem&re @ue debamos relacionar un cam&o con otro' el cam&o relacionado deberB indicarse como ?oreign Ce mientras @ue el cam&o al cuBl hace
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
(2;
www.detodoprogramacion.com
re-erencia' deberB indicarse como :rimar Ce . "uego' &odremos obtener' desde la base de datos' el Gob!etoH &roducto' inclu endo los datos a los cuBles hace re-erencia. :ara ello' utili4aremos la siguiente consulta*
AC^CC$ DEO0 &(oducto G, catego(ia G &(oducto ?@@CE ZO?@ catego(ia aA?@G(catego(ia;id)
Con AC^CC$ &(oducto G, catego(ia G estamos seleccionando todos los cam&os de la tabla &roducto todos los cam&os de la tabla categoria. Iientras @ue con DEO0 &(oducto ?@@CE ZO?@ catego(ia aA?@G(catego(ia;id)' estamos diciendo @ue*
DEO0 &(oducto ?@@CE ZO?@ catego(ia
utili4ando el cam&o catego(ia;id Cmo comentamos anteriormente' una ?C no necesariamente debe llevar el mismo nombre @ue la clave &rimaria a la cuBl hace re-erencia. :odr)amos' &or e!em&lo' haber creado nuestra tabla &(oducto de la siguiente manera*
CECB$C $BU^C &(oducto( &(oducto;id ?@$(11) @O$ @a^^ Ba$O;?@CEC0C@$ ,E?0BEg jCg, 'R.categoria (=$0445 =%$ =O;;2 &(oducto =BEC/BE(288) @O$ @a^^, &(ecio HCC?0B^(-, 2) @O$ @a^^, de)c(i&cion U^OU, '%RE(?= RE! 0'R.categoria5 ECDCEC@CCA catego(ia(catego(ia;id) ) C@G?@C<?nnoHUh
Es decir' @ue a no &odemos indicarle @ue utilice el cam&o homnimo en ambas tablas' sino' @ue &ara reali4ar esta unin interna se base en la condicin de igualdad del valor de los mismo Lcam&o -orBneo &rimario res&ectivamenteM.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
(2(
www.detodoprogramacion.com
12
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
(22
www.detodoprogramacion.com
)os resultados de una consulta de seleccin, se reci!en en una tupla, cuyos elementos, son otras tuplas, conteniendo el alor de cada campo seleccionado de la ta!la, en el orden 0ue han sido seleccionados.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
(2
www.detodoprogramacion.com
def (un;Kue(%(Kue(%<NN): dato) < [HU;/OA$, HU;aACE, HU;,BAA, HU;@B0C" conn < 0%Ae^d6 connect(Gdato)) cu()o( < conn cu()o(() cu()o( e#ecute(Kue(%) if Kue(% data el)e: conn data # Conectar a la base de datos # Crear un cursor # Ejecutar una consulta
u&&e(() )ta(t)Yith(NAC^CC$N): < cu()o( fetchall() # Traer los resultados de un select co**it() < @one # Hacer efectiva la escritura de datos # Cerrar el cursor # Cerrar la cone i!n
Insertar 'atos
dato < (aY;in&ut('Hato: ') Kue(% < '?@ACE$ ?@$O 6 (62) =B^aCA (NI)N)' I dato (un;Kue(%(Kue(%)
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
(2%
www.detodoprogramacion.com
E"iminar registros
c(ite(io < (aY;in&ut('?ng(e)e c(ite(io &- eli*ina( coincidencia): ') Kue(% < 'HC^C$C DEO0 6 i/CEC 62 < NI)N' I c(ite(io (un;Kue(%(Kue(%)
Actua"i6ar 'atos
61 < (aY;in&ut('?H: ') 62 < (aY;in&ut('@ue4o 4alo(: ') Kue(% < 'a,HB$C 6 AC$ 62<NI)N i/CEC 61 < Ii' I (62, int(61)) (un;Kue(%(Kue(%)
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
(24
www.detodoprogramacion.com
13
En este ca&)tulo' nos concentraremos en a&render' como servir a&licaciones : thon en la 8eb' corriendo ba!o A&ache' &ero sin utili4ar un -rame,or.' a @ue el ob!etivo de este curso es entender el &roceso de ra4onamiento &ara obtener la res&uesta a Gcmo resolver necesidades &untualesH.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
(28
www.detodoprogramacion.com
Introduccin
E7isten en el mercado' varios -rame,or.s @ue nos &ermiten crear a&licaciones : thon robustas' de manera rB&ida servirlas a trav>s de 3nternet' en un sitio 8eb tradicional. Algunos de ellos' &oseen una ar@uitectura &articular' como es el caso de $!ango' @ue utili4a un &atrn ar@uitectnico denominado I<= Lmodel-vie,-tem&lateM' basado en I<C Lmodel-vie,-controllerM &ero @ue &rescinde del motor de >ste* es decir' del controlador. 5tro -rame,or. mu robusto tambi>n' es 8eb2: ' @uien se caracteri4a &or tener una curva de a&rendi4a!e menor @ue la de $!ango. #in embargo' &ara crear a&licaciones : thon con estos -rame,or.s' algunos re@uisitos deben ser tenidos en cuenta* :ara crear a&licaciones escalables mantenibles' @ue guarden un diseUo ar@uitectnico coherente' es im&rescindible tener un e7celente dominio de la &rogramacin orientada a ob!etos am&lios conocimientos sobre &atrones ar@uitectnicos &atrones de diseUoR Como todo marco de traba!o' &oseen sus &ro&ios m>todos as) como una sinta7is &seudo-lengua!e &ro&ios' los cuales demandan invertir un tiem&o considerable en a&render a utili4arlos. Es decir' no se re@uiere Ga&render a &rogramar un nuevo lengua!eH ni mucho menos Ga&render a &rogramar con ellosH' sino @ue &or el contrario' lo necesario es Ga&render a utili4arlosH Les como a&render a utili4ar un nuevo so-t,areM. D esto' insume much)simo tiem&o &ara @ue el a&rendi4a!e sea -ruct)-ero el a&rovechamiento del -rame,or.' bene-iciosoR #on -rame,or.s mu robustos' &ensados &ara el desarrollo de grandes a&licaciones. :or ello' debe considerarse la &osibilidad de &rescindir de ellos' cuando lo @ue se necesite' sea una a&licacin liviana' a @ue el consumo de recursos el rendimiento' no estarB com&ensado &or la robuste4 del desarrollo.
:ero mBs allB de todo lo anterior' la me!or -orma de entender un -rame,or.' es com&render el lengua!e en el @ue han sido desarrollados la -orma en la @ue >stos' han logrado llegar a resolver una necesidad* servir a&licaciones : thon a trav>s de la 8eb.
-n este cap2tulo, nos concentraremos en aprender, como servir aplicaciones Python en la *eb corriendo bajo +pache pero sin utili,ar un framewor$ ya 0ue el objetivo de este curso es entender el proceso de ra,onamiento para obtener la respuesta a -cmo resolver necesidades puntuales..
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
(2/
www.detodoprogramacion.com
=Hu> necesitamos?
En &rinci&io' necesitamos hacer @ue A&ache' incor&ore un so&orte &ara servir archivos : thon. :ara ello' necesitaremos habilitarle un mdulo' @ue brinde este so&orte. E7isten varios mdulos de A&ache @ue brindan so&orte &ara correr archivos : thon. %no de los mBs &o&ulares es el mdulo mod.python' @ue sin embargo' &resenta algunos &roblemas Ldescri&tos en htt&*++docs.& thon.org+release+2./+ho,to+,ebservers.htmlWmod& thonM @ue &ueden &revenirse' utili4ando el mdulo mod.Asgi Lhtt&*++docs.& thon.org+release+2./+ho,to+,ebservers.htmlWmod-,sgiM el cula utili4aremos en este curso.
cmo va a
$entro de este directorio' vamos a di5idir su ar,uitectura en dos partes* 1M $estinada al almacena!e de nuestra a&licacin : thon &ura LserB un directorio &rivado' no servidoM 2M $estinada a servir la a&licacin Ldirectorio &9blico servidoM en el cuBl solo almacenaremos archivos estBticos
mBdir 5ho*e5%o5cu()o2&%thon5t(un:5&%thon2Ye65mypythonapp mBdir 5ho*e5%o5cu()o2&%thon5t(un:5&%thon2Ye65public.html
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
(2)
www.detodoprogramacion.com
$entro de nuestro directorio *%&%thona&&' almacenaremos entonces' todos los mdulos &a@uetes de nuestra a&licacin : thon' mientras @ue en &u6lic;ht*l' estarBn todos los archivos estBticos serB el 9nico directorio al @ue se &ueda acceder mediante el navegador 8eb. A&rovecharemos este &aso' &ara crear una car&eta' destinada a almacenar los logs de errores accesos a nuestra 8eb A&&*
mBdir 5ho*e5%o5cu()o2&%thon5t(un:5&%thon2Ye65logs
Este archivo cont(olle( &% actuarB como un &seudo D(ontCont(olle(2' siendo el encargado de mane!ar todas las &eticiones del usuario' haciendo la llamada a los mdulos corres&ondientes seg9n la %(3 solicitada. $icho mdulo' solo se encargarB de de-inir una -uncin' @ue act9e con cada &eticin del usuario. Esta -uncin' deber7 ser una .unci&n =3B0 application 57lida. Esto signi-ica @ue* 1. $eberB llamarse application 2. $eberB recibir dos &arBmetros* en"iron' del mdulo os' @ue &rovee un diccionario de las &eticiones J==: estBndar otras variables de entorno' la -uncin start.response' de 8#63' encargada de entregar la res&uesta J==: al usuario.
def application(en"iron, start.response): # "enero la salida HT#L a mostrar al usuario out&ut < 'V&+Uien4enido a *i V6+,%thonB&&V56+111V5&+' # $nicio una res%uesta al navegador )ta(t;(e)&on)e(N200 OjN, [(NContent2$%&eN, Nte#t5ht*lh cha()et<utf28N)") # &etorno el contenido HT#L (etu(n out&ut
IBs adelante' veremos como crear un &pplication 'S() Controller' mucho mBs &otente.
2 -ront Controller :atrn de diseUo* htt&*++en.,i.i&edia.org+,i.i+?rontOControllerO&attern
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
(2'
www.detodoprogramacion.com
%na ve4 con-igurado nuestro <irtualJost* 1M Jabilitamos el sitio 8eb* sudo a2ensite python,Aeb 2M (ecargamos A&ache* sudo ser"ice apache2 reload 3M Jabilitamos el sitio en nuestro host* sudo nano MetcMhosts siguiente l)nea* 427.3.3.4 python,Aeb all) agregamos la
A &artir de ahora' si abrimos nuestro navegador 8eb e ingresamos la url htt&*++& thon-,eb veremos la -rase* Bienvenido a mi Python<pp.
Agregar un nue o hostname a nuestro 3etc3hosts nos permitir seguir tra!a"ando normalmente con nuestro localhost, sin 0ue nuestras aplicaciones Python interfieran con otras, ya sean we!s estticas en 564L o dinmicas en P5P u otro lengua"e.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
( ;
www.detodoprogramacion.com
Ahora' todos nuestros im&orts los &odremos hacer con el namespace absoluto' desde *%&%thona&&. :or e!em&lo*
f(o* *%&%thona&& *i;&aKuete i*&o(t *i;*odulo
Nuestra a&&' &odr)a &or e!em&lo' tener un &a@uete llamado )itioYe6. $entro de este &a@uete' &odr)a tener varios mdulos' corres&ondientes a cada una de las secciones de nuestro sitio. <ali>ndonos de la clave (EN%E#=O%(3 de environ' &odr)amos hacer un s,itch como el @ue sigue*
f(o* )%) i*&o(t &ath &ath a&&end(N5ho*e5eugenia56o((ado(5&%thon2Ye65N) f(o* *%&%thona&& )itioYe6 i*&o(t contacto, default def a&&lication(en4i(on, )ta(t;(e)&on)e): peticion / en"iron71RE[OES$.OR(1: if peticion.startsAith01Mcontacto15: out&ut < contacto fo(*ula(io() elif peticion.startsAith01Mgracias15: out&ut < contacto g(acia)() el)e: out&ut < default default;&age() )ta(t;(e)&on)e(N200 OjN, [(NContent2$%&eN, Nte#t5ht*lh cha()et<utf28N)") (etu(n out&ut
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
( (
www.detodoprogramacion.com
%mportante: siempre, tras hacer un cam!io a tu aplicacin, debes reiniciar +pache para que los cambios se vean reflejados de manera correcta# sudo ser"ice apache2 restart
Al ingresar a htt&*++& thon-a&&+contacto' el contenido mostrado serB el retornado &or la -uncin fo(*ula(io() del mdulo contacto del &a@uete )itioYe6 #i en cambio' ingresBramos en htt&*++& thon-a&&+gracias' ver)amos el contenido retornado &or la -uncin g(acia)() del mismo mdulo. D si la %(3 solicitada no -uese ni una ni otra' siem&re se mostrarB el contenido retornado &or la -uncin default;&age() del mdulo default del &a@uete )itioYe6
6en en cuenta 0ue ningn print de tu app ser tenido en cuenta. 6odas las funciones de tu app, tendrn 0ue hacer un return del contenido 0ue desees mostrar al usuario, para 0ue el Application ='>7 (ontroller, se encargue de entregarlos a ='>7 y ste, de mostrarlos al usuario.
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
( 2
www.detodoprogramacion.com
14
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
www.detodoprogramacion.com
Pa0uetes necesarios
:ara &oder enviar e-mail desde nuestro servidor Lu ordenador localM' en &rimer lugar' es necesario contar con un *!< L<ail "ranspor 5gent o GAgente de trans&orte de correoHM. %no de los I=A mBs &o&ulares &ara sistemas %N3P-"i.e' es sin dudas' el -amoso sendmail. :ara de!ar nuestro servidor u ordenador local' listo &ara enviar mensa!es de correo electrnico a trav>s de 3nternet' solo serB necesario entonces' instalar )end*ail*
)udo a&t2get in)tall )end*ail
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
( %
www.detodoprogramacion.com
''' I ((e*itente, de)tinata(io, a)unto, *en)a3e) t(%: )*t& < smtplib.S*$P01localhost15 )*t&.sendmail0remitente2 destinatario2 email5 &(int 'Co((eo en4iado' e#ce&t: &(int '''C((o(: el *en)a3e no &udo en4ia()e Co*&(ue6e Kue )end*ail )e encuent(a in)talado en )u )i)te*a'''
3m&ortamos el mdulo smt&lib. "uego' de-inimos las variables necesarias &ara el env)o del mensa!e Lremitente' destinatario' asunto mensa!e -en -ormato J=I"-M*
(e*itente < 'He)de gnucita Ve6ahit@*e*6e( f)f o(g+' de)tinata(io < '0a*a de Gnucita Veugenia6ahit@g*ail co*+' a)unto < 'C2*al /$0^ en4iado de)de ,%thon' *en)a3e < '''/ola1V6(5+ V6(5+ C)te e) un V6+e2*ailV56+ en4iando de)de V6+,%thonV56+ '''
D reali4amos el env)o*
)*t& )end*ail((e*itente, de)tinata(io, e*ail)
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
( 4
www.detodoprogramacion.com
Curso Python para Principiantes Eugenia Bahit ,,,.eugeniabahit.com+cursos2012 Com&arte el conocimiento* Creative Commons Atribucin-NoComercial-Com&artir3gual 3.0
( 8
www.detodoprogramacion.com
Juegos, Revistas, Cursos, Software, Sistemas Operativos, Antivirus y ms Gratis para el Conocimiento...! www.detodoprogramas.com Vistanos y comprubalo
Material para los amantes de la Programacin Java, C/C++/C#,Visual.Net, SQL, Python, Javascript, Oracle, Algoritmos, CSS, Desarrollo Web, Joomla, jquery, Ajax y Mucho Mas www.detodoprogramacion.com Visitanos