0% encontró este documento útil (0 votos)
66 vistas12 páginas

Programación Básica en Python

El documento presenta una serie de artículos sobre programación básica en Python, enfocándose en el desarrollo del juego Tres en Raya. Se abordan aspectos fundamentales del lenguaje, incluyendo su sintaxis, características, y dominios de aplicación, además de ofrecer ejemplos prácticos. La serie culminará con temas avanzados como la programación de aplicaciones web y el uso de Python en el desarrollo de software libre.

Cargado por

Johan Silva
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOC, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
66 vistas12 páginas

Programación Básica en Python

El documento presenta una serie de artículos sobre programación básica en Python, enfocándose en el desarrollo del juego Tres en Raya. Se abordan aspectos fundamentales del lenguaje, incluyendo su sintaxis, características, y dominios de aplicación, además de ofrecer ejemplos prácticos. La serie culminará con temas avanzados como la programación de aplicaciones web y el uso de Python en el desarrollo de software libre.

Cargado por

Johan Silva
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOC, PDF, TXT o lee en línea desde Scribd

****SECCIN: DISEO ****TTULO: Programacin bsica en Python: desarrollo del juego de Tres en Raya en modo te to ****AUTOR: Diego !

"# de I$i%a &"# de 'rta"a ****PROFESIN: Pro(esor del de$artamento de Ingenier)a del So(t*are de la (acultad de Ingenier)a de la +ni,ersidad de Deusto -ESIDE. ****ENTRADILLA:En la serie de cuatro art)culos /ue a/u) comen"amos describiremos el lenguaje de $rogramacin Python# Para ilustrar sus ,irtudes desarrollaremos un juego de tres en raya0 /ue seg1n transcurra esta serie ir haci2ndose cada ,e" ms so(isticado# Pasar de ser un sim$le juego con inter(a" en modo te to0 a tener una inter(a" gr(ica0 y de 2ste a ser una a$licacin *eb /ue accede a una base de datos# ****LADILLO: Introduccin En este $rimer art)culo nos dedicaremos a introducir la sinta is de Python y a iniciarnos en la $rogramacin orientada a objetos a tra,2s de Python# En un segundo art)culo hablaremos de las (acilidades $ro,istas $or Python $ara la $rogramacin de inter(aces gr(icas y la seriali"acin de datos a (icheros# En la tercera entrega e $licaremos las bondades de Python $ara la $rogramacin de a$licaciones *eb con acceso a bases de datos# 3inalmente0 concluiremos la serie en una cuarta entrega hablando de la $rogramacin de 45! en Python y describiendo sus $rimos hermanos 6ython e IronPython# Python0 el otro lenguaje de $rogramacin libre /ue em$ie"a con 7P8 y /ue no es ni Perl ni P9P0 (ue creado $or &uido ,an Rossum -htt$:::***#$ython#org:;guido:. en <==<# Dio este nombre al lenguaje ins$irado $or el $o$ular gru$o cmico britnico 5onty Python# &uido cre Python durante unas ,acaciones de na,idad en las /ue -al $arecer. se estaba aburriendo# ****SUBLADILLO: 9ola 5undo en Python >omo con cual/uier otro lenguaje de $rogramacin0 comencemos el a$rendi"aje de Python con el ms sim$le de los ejem$los: ****CDIGO: print "Hola !n"o" # "Hola !n"o" En este $rimer e tracto de cdigo ya $odemos obser,ar la sim$licidad de Python# Probablemente este es el ejem$lo del $rograma ?hola mundo@ ms sencillo /ue jams has ,isto# !a sentencia print im$rime una cadena de caracteres a consola# !as cadenas de caracteres en Python se $ueden denotar bien entre comillas dobles o comillas sim$les0 $or ejem$lo 'Hola mundo'# Atese /ue los comentarios de l)nea se indican con el s)mbolo #0 mientras /ue los blo/ues de cdigo $ueden comentarse entre """ y """# ****LADILLO: >aracter)sticas de Python Tras ,er el $rimer e tracto de cdigo en Python 0 enumeremos sus $rinci$ales caracter)sticas: Sintaxis elegante, minimalista y densa: En Python todo a/uello innecesario no hay /ue escribirlo - ;0 {0 }0 \n.# 'dems como ,eremos $ocas l)neas de cdigo re,ierten en mucha (uncionalidad# Moderno: So$orta objetos y estructuras de datos de alto ni,el tales como cadenas de caracteres -strings.0 listas y diccionarios# Multi-paradigma: En ,e" de (or"ar a los $rogramadores a ado$tar un $aradigma de $rogramacin 1nico0 Python $ermite el uso de $rogramacin orientada a objetos0 $rogramacin estructurada o $rocedural e incluso $rogramacin (uncional# Organizado y extendible: Dis$one de m1lti$les (ormas de organi"ar cdigo tales como (unciones0 clases0 mdulos0 y $a/uetes# Si hay reas /ue son lentas se $ueden reem$la"ar $or $lugins en > o >BB0 siguiendo la 'PI $ara e tender o em$otrar Python en una a$licacin# Interpretado: Ao es necesario declarar constantes y ,ariables antes de utili"arlas y no re/uiere $aso de com$ilacin:linCage# !a $rimera ,e" /ue se ejecuta un scri$t de Python se com$ila y genera bytecode /ue es luego inter$retado# Python es dinmico0 encuentra errores de uso de ti$os de datos en tiem$o de ejecucin y usa un recolector de basura $ara la gestin de memoria# Multiplataforma: Python genera cdigo intero$erable0 /ue se $uede ejecutar en m1lti$les $lata(ormas -ms a1n /ue 6a,a.# 'dems0 es $osible embeber Python dentro de una 6D50 como ,eremos en la cuarta entrega de esta serie# Open source: Ra"n $or la cual la librer)a de mdulos de Python -htt$:::docs#$ython#org:lib:lib#html. contiene un sin()n de mdulos de utilidad y sigue creciendo continuamente#

De propsito general: Puedes $rogramar en Python toda a$licacin y de cual/uier ti$o /ue $uedes hacer con >E o 6a,a#

****SUBLADILLO: Peculiaridades sintcticas Python $resenta unas di(erencias sintcticas notables con res$ecto a otros lenguajes de $rogramacin# +sa tabulacin -o es$aciado. $ara mostrar una estructura de blo/ues# Se tabula una ,e" $ara indicar el comien"o de blo/ue y se desFtabula $ara indicar el (inal del blo/ue# 'dems0 Python no usa el s)mbolo 7 ;8 $ara indicar el (inal de una sentencia sino sim$lemente un retorno de carro# El cuadro ?>:6a,a ,s# Python@ com$ara un e tracto de cdigo en >:6a,a con otro de cdigo en Python# Obs2r,ese /ue las $eculiaridades sintcticas de Python traen consigo una reduccin de los caracteres utili"ados y l)neas de cdigo# 'dems0 como e(ecto lateral0 estas $eculiaridades sintcticas obligan a di(erentes $rogramadores a escribir el cdigo del mismo modo# Ao hace (alta de(inir manuales de re(erencia de $rogramacin0 $ara asegurarte /ue todos los $rogramadores /ue inter,ienen en un $royecto utili"an las mismas con,enciones# >omo nota $ositi,a0 comentar /ue la mayor)a de las $alabras cla,es utili"adas $or Python coinciden con las usadas en > o 6a,a# ****TABLA:>:6a,a ,s Python Cdigo en C/ a!a Cdigo en "yt#on
i$ %&' ( i$ %)' ( $*%'+ , $-%'+ , i$ &: i$ ): $*%' $-%'

****SUBLADILLO: Dominios de a$licacin de Python Todo ingeniero de so(t*are0 como buen artesano0 deber)a dominar ,arios lenguajes de $rogramacin# Es in,iable concebir /ue con un solo lenguaje de $rogramacin $odemos lle,ar a cabo todo ti$o de desarrollos# 9ay a$licaciones o $arte de ellas /ue se adecuarn ms a las caracter)sticas de un lenguaje de $rogramacin /ue otro# En este a$artado ,amos a resaltar las situaciones en las cuales deber)amos considerar el uso de Python y en cuales otras lo deber)amos desde%ar# Python0 al ser un lenguaje de scri$ting e inter$retado no es adecuado $ara la $rogramacin de bajo ni,el o de sistemas# Por ejem$lo0 la $rogramacin de dri,ers y Cernels0 dado /ue Python al ser de demasiado alto ni,el0 no tiene control directo sobre memoria y otras reas de bajo ni,el# Tam$oco es adecuado $ara a$licaciones /ue re/uieren una alta ca$acidad de com$uto0 tal es el caso de sistemas de $rocesamiento de imgenes# Pare este ti$o de a$licaciones el ?,iejo@ > o >BB0 o como no el cdigo ensamblador0 nunca $odrn ser su$erados# Python es ideal0 sin embargo0 como lenguaje G$egamentoG $ara combinar ,arios com$onentes juntos0 $ara lle,ar a cabo $rototi$os de sistemas0 $ara la elaboracin de a$licaciones cliente *eb o con inter(a" gr(ica0 el desarrollo de sistemas distribuidos o la $rogramacin de tareas cient)(icas0 en las /ue hay /ue simular y $rototi$ar r$idamente# Python ha sido utili"ado $ara desarrollar muchos grandes $royectos de so(t*are como el ser,idor de a$licaciones Ho$e0 el sistema de com$articin de (icheros 5net o $arte de la im$lementacin de &oogle# 'ctualmente0 Python es uno de los tres lenguajes de $rogramacin /ue se usan en la (rame*orC de desarrollo de ser,idores de a$licaciones libres !'5P -!inu '$ache 5ySI! y Python0 Perl o P9P.# ****LADILLO: Programando en Python +na ,e" conocidas las caracter)sticas de Python es momento de em$e"ar a usarlo# Para ello habremos de descargar una ,ersin del mismo -actualmente J#K#K. de la seccin do*nloads del $ortal de Python -htt$:::***#$ython#org.0 mostrado en la 3igura <# !a instalacin $ara Lindo*s es tan sencilla como hacer doble clic en el ejecutable bajado# Para !inu 0 $odremos usar los r$ms dis$onibles en -htt$:::***#$ython#org:J#K#K:r$ms#html.# El comando /ue te $ermitir su instalacin ser algo similar a:
rpm -iv [Link]

****SUBLADILLO: 5odos de $rogramacin

Python se $uede usar de dos modos di(erentes: interacti,amente o en modo scri$t# Para arrancar Python en modo interacti,o todo lo /ue se necesita es ejecutar en una consola de comandos - cmd en Lindo*s o xterm en !inu . el int2r$rete de Python0 esto es0 el ejecutable python# +na ,e" arrancado el int2r$rete $odrs introducir cual/uier sentencia en Python# !a (igura J muestra dos sesiones interacti,as de Python# En la $rimera se ha codi(icado el ejem$lo ?hola mundo@ mostrado con anterioridad# Para salir del int2r$rete se ha $ulsado Ctrl- # Para reali"ar lo mismo en +AI4 deber)amos haber $ulsado Ctrl-!# 'lternati,amente0 se $odr)an haber usado las dos sentencias mostradas en la segunda sesin interacti,a de la (igura J# !a $rimera im$orta el mdulo "y" -ms detalles luego. y la segunda ejecuta el m2todo #$it%&de ese mdulo0 /ue hace /ue el hilo de ejecucin del $rograma (inalice# Para utili"ar Python en modo scri$t0 se guardan las sentencias del $rograma en un (ichero y luego se ejecuta el mismo escribiendo python <[Link]># Por ejem$lo0 en +AI4 $odr)amos hacer lo siguiente $ara crear el (ichero holamundo#$y y luego ejecutarlo:
. /at 0 1ola2!n"o3p) #45!6r57in58n9 p)t1on print "H8llo :orl"" Ctrl;D . p)t1on 1ola2!n"o3p) H8llo :orl" Atese /ue la sentencia #'(u"r()in(#nv python

se usar)a en entornos +AI4 $ara indicar al sistema /ue el inter$rete Python se deber)a utili"ar $ara ejecutar un (ichero /ue tenga atributos de ejecucin# En Lindo*s es ignorada# ****SUBLADILLO:Sentencias y blo/ues Para reali"ar un $rograma 1til es necesario agru$ar gru$os de sentencias en unidades lgicas o blo/ues# Recuerda /ue en Python las sentencias se delimitan $or el salto de l)nea y los blo/ues se indican $or tabulacin /ue sigue a una sentencia acabada en 7:8# Por ejem$lo0 el siguiente blo/ue de cdigo contiene la com$aracin de una ,ariable con un ,alor /ue im$rime di(erentes mensajes seg1n el resultado de su e,aluacin#
# 7lo<!83p) na28 = "Di8>o*" # a6i>na/i?n "8 9alor a 9aria7l8 i$ na28 == "Di8>o": print "A!pa Di8>o" 8l68: print "@A!iBn 8r86C" print "DNo 8r86 Di8>o4" @A!iBn 8r86C DNo 8r86 Di8>o4

!a ejecucin del $rograma anterior mediante el comando python

)lo*u#.py

generar)a la siguiente salida:

****SUBLADILLO:Identi(icadores !os identi(icadores sir,en $ara nombrar ,ariables0 (unciones y mdulos# Deben em$e"ar con un carcter no num2rico y contener letras0 n1meros y 7M8# Python es sensible al uso de may1sculas y min1sculas en identi(icadores# !as siguientes son $alabras reser,adas y no se $ueden utili"ar como identi(icadores: and0 #li+0 glo)al0 or0 a""#rt0 #l"#0 i+0 l#n0 pa""0 )r#a,0 #$-#pt0 import0 print0 -la""0 #$#-0 in0 rai"#0 -ontinu#0 +inally0 i"0 r#turn0 d#+0 +or0 lam)da0 try0 d#l0 +rom0 not0 .hil## E isten unos cuantos identi(icadores es$eciales con $re(ijo // $ara ,ariables y (unciones /ue corres$onden a s)mbolos im$l)citamente de(inidos: __name__ nombre de (uncin

__doc__

documentacin sobre una (uncin constructor de una clase

__init__()

__del__() destructor de una clase ****SUBLADILLO:Dariables y Ti$os de datos Para declarar una ,ariable en Python solamente es necesario darle un nombre y asignarle un ,alor# !a ,ariable es del ti$o del ,alor asignado# Por de(ecto las ,ariables son locales y accesibles solamente dentro del blo/ue de cdigo donde han sido declaradas0 $ara acceder a ,ariables globales0 es necesario $receder el nombre de la ,ariable con el identi(icador glo)al# Si no se /uiere asignar ning1n ,alor a una ,ariable0 se le $uede asignar el ,alor 0on#0 e/ui,alente a null en 6a,a#

$um%ricos Python de(ine los siguientes ti$os num2ricos: integer0 long integer0 (loatingF$oint0 y com$le # Sobre los ,alores num2ricos se $ueden a$licar los mismos o$eradores /ue en 6a,a o >BB0 esto es0 10 -0 20 ( y 3 -resto.# Su uso se ilustra en los siguientes comandos escritos en modo interacti,o:
000 & = E 000 int %&' # /on9i8rt8 & a 8nt8ro E 000 lon>%&' # /on9iBrt8lo a lon> EL 000 $loat%&' # a $loat E3F 000 /o2pl8& %EG 3-' %EHF3-I'

Strings Python so$orta las cadenas de caracteres /ue son delimitadas $or un $ar de N o G# Dos strings juntos se$arados $or un es$acio se unen0 y los se$arados $or comas a$arecen se$arados $or un es$acio#
000 print "Hola" "IJi>o" # i2pri28 HolaIJi>o 000 print "Hola"G "IJi>o" # i2pri28 Hola IJi>o

Se utili"an los mismos cdigos de esca$e /ue en > y 6a,a# Por ejem$lo0 $ara im$rimir una nue,a l)nea utili"ar)amos print '\n'# !as cadenas de caracteres cuyos caracteres es$eciales no /ueremos /ue sean inter$retados se indican con el $re(ijo 7r8 de ra*# !as cadenas de caracteres son objetos en Python a los cuales se les $ueden a$licar algunas de las (unciones $rede(inidas $or Python0 como l#n0 /ue de,uel,e el n1mero de elementos en una secuencia o los m2todos /ue de(ine tales como upp#r $ara con,ertir a may1sculas y +ind $ara encontrar un subFcadenas en una cadena0 entre otros muchos# Para ms in(ormacin tanto sobre la clase String como cual/uier otro clase o mdulo de Python es recomendable re,isar la documentacin de la librer)a estndar de Python -htt$:::docs#$ython#org:lib:lib#html.0 cuya tabla de contenidos se muestra en la (igura K# ' continuacin mostramos algunas sentencias /ue hacen uso de strings#
000 000 000 KLA 000 -Q 000 R* 000 KLa l8n%KLa 9i"a 86 2!/1o 28Ior /on P)t1on3L' ME KLa 9i"a 86 2!/1o 28Ior /on P)t1on3L3!pp8r%' NIDA ES UCHO EOOR CON PPTHONL "La 9i"a 86 2!/1o 28Ior /on P)t1on"3$in"%"P)t1on"' "La 9i"a 86 2!/1o 28Ior /on P)t1on"3$in"%KP8rlL'

KLa 9i"a 86 2!/1o 28Ior /on P)t1onL3r8pla/8%KP)t1onLG KO)t1onL' 9i"a 86 2!/1o 28Ior /on O)t1onL El carcter 738 re$resenta al o$erador de (ormateo de cadenas0 /ue se usa de una manera muy similar a los (ormateadores en > $ara la sentencia print+0 tales como d $ara decimal0 + $ara (loat o0 $ $ara he adecimal# 000 pro9in/ia = KSla9aL 000 "La /apital "8 T6 86 T6" T %pro9in/iaG "NitoriaRGa6t8iU"' KLa /apital "8 Sla9a 86 NitoriaRGa6t8iUL

&ol%anos !as constantes booleanas de(inidas $or Python son de,uel,e uno de esos dos ,alores# 'istas +na lista re$resenta una secuencia dinmica /ue $uede crecer0 y est inde ada $or un entero /ue comien"a con el ,alor O# Python de(ine el o$erador 7 :8 u o$erador de rodajas /ue $ermite indicar dando el )ndice inicial y (inal (ragmentos de una lista o string -lista de caracteres. a recu$erar# +na lista es una clase de(inida $or Python y $or tanto tiene m2todos $ara a%adir - add. o insertar -in"#rt. ,alores# Para borrar un elemento se utili"a la (uncin $rede(inida del#
000 28686 = V"En8ro"G "F87r8ro"W 4ru#

5al"##

El resultado de una condicin siem$re

000 print 28686VFW En8ro 000 286863app8n"%" arUo"' 000 print 28686V*:-W VXF87r8roXW 000 "8l 28686VFW 000 28686 VXF87r8roXG X arUoXW

(uplas !as tu$las son como las listas0 $ero no se $ueden modi(icar# Son con,enientes cuando /ueremos de,ol,er ,arios ,alores como resultado de in,ocar a una (uncin# Se de(inen con el o$erador -6 $or ejem$lo: %762& Diccionarios !os diccionarios son arrays asociati,os o ma$as0 inde ados $or una cla,e en ,e" de un )ndice num2rico# !a cla,e $uede ser cual/uier objeto Python0 aun/ue normalmente es una tu$la# >omo se trata de una clase de(ine una serie de m2todos /ue $odemos in,ocar tales como ha"/,#y# El o$erador in se utili"a $ara com$robar si un elemento (orma $arte de una secuencia#
000 2)"i/t = ("alt!ra" : "28"ia"G "1a7ili"a"" : "int8r28"ia", 000 print 2)"i/t (Xalt!raX: X28"iaXG X1a7ili"a"X: Xint8r28"iaX, 000 print 2)"i/tV"1a7ili"a""W int8r28"ia 000i$ 2)"i/t31a6YZ8)%Xalt!raX': 000 print XNo"o 8n/ontra"oX No"o 8n/ontra"o 000 i$ Xalt!raX in 2)"i/t: 000 print XNo"o 8n/ontra"oX No"o 8n/ontra"o

****SUBLADILLO:>ontrol de (lujo Condicionales !a sentencia i+ se utili"a $ara la de(inicin de condiciones y $uede ir seguida de ,arias $artes #li+ y una #l"## En Python los o$eradores bol2anos de(inidos son: or0 and y not# !os o$eradores relacionales de(inidos son 880 90 : y 8#
< = E 1 = [ " = M i$ < \ 1: print "pri28r t86t pa6a"o" 8li$ "\1: print "68>!n"o t86t pa6a"o" 8l68: print "t8r/8r t86t pa6a"o" 000 p)t1on /on"i/ional3p) pri28r t86t pa6a"o

&ucles Para la de(inicin de bucles $odemos usar el o$erador +or o .hil## +or se utili"a $rinci$almente $ara iterar sobre los miembros de una secuencia: listas0 tu$las o diccionarios# +or se utili"a a menudo con la (uncin $rede(inida rang#0 /ue crea una secuencia descrita $or %;"tart6< #nd ;6"t#p<&0 donde los cam$os "tart y "t#p son o$cionales# "tart es O y "t#p es < $or de(ecto#
000 $or & in ran>8%*G[': 000 print & 000 * - M E

!a sentencia while es otra sentencia de re$eticin# Se utili"a $ara ejecutar un blo/ue de cdigo hasta /ue una condicin sea (alsa# !a sentencia break se utili"a a menudo dentro de un bucle .hil# y sir,e $ara salir del bucle#
000 r8pl) = Xr8pit8X 000 ]1il8 r8pl) == Xr8pit8X: 333 print XHolaX 333 r8pl) = ra]Yinp!t%XIntro"!/8 "r8pit8" para 1a/8rlo "8 n!89o: X' 333 Hola Intro"!/8 "r8pit8" para 1a/8rlo "8 n!89o: a"i?6 000

****SUBLADILLO:3unciones +na (uncin se declara usando la $alabra cla,e d#+0 seguida del nombre de la (uncin y entre $ar2ntesis una lista de argumentos# !os argumentos si corres$onden a ti$os num2ricos0 bol2anos o strings se $asan $or ,alor y si corres$onden a secuencias $or re(erencia# ' una (uncin se le $ueden asignar $armetros $or de(ecto0 $reasignado un ,alor a cada $armetro de una (uncin# Por ejem$lo:
"8$ 2)$!n/%aG7=-': 6!2 = a H 7 r8t!rn 6!2 print 2)$!n/%-' # "89!8l98 8l 9alor E

' una (uncin se le $uede $asar un n1mero ,ariable de argumentos -argumento con $re(ijo 2. y argumentos basados en $alabras cla,e no $rede(inidas -argumento con $re(ijo 22.:
"8$ t86tAr>Li6t6Y*%*ar>6G **Z]ar>6': print Kar>6:LG ar>6 print KZ]ar>6:LG Z]ar>6 t86tAr>Li6t6Y*%KaaaLG K777LG ar>*=K///LG ar>-=K"""L'

/ue ,isuali"ar)a:
ar>6: %KaaaLG K777L' Z]ar>6: (Kar>*L: K///LG Kar>-L: K"""L,

****SUBLADILLO:>lases !as clases en Python son creadas usando la sentencia -la""# +na clase contiene una coleccin de m2todos# >ada m2todo contiene como $rimer $armetro -"#l+. /ue hace re(erencia a la instancia de la clase0 es e/ui,alente al thi" de >BB o 6a,a# Python so$orta m1lti$le herencia de clases# E iste un so$orte limitado $ara ,ariables $ri,adas0 usando una t2cnica llamada name mangling# Todo identi(icador de la (orma //"pam es te tualmente reem$la"ado $or /-la""nam#//"pam# Sin embargo, el identificador todav a podr a !er accedido por c"di#o $%e %!a la in!tancia de la cla!e mediante /-la""nam#//"pam# &l li!tado ' m%e!tra %n !imple e(emplo de herencia. ****LISTADO *: +n sim$le ejem$lo de herencia

# /la68618r8n/ia3p) /la66 Ba6i/: "8$ YYinitYY%68l$G na28': 68l$3YYna28 = na28 "8$ 61o]%68l$': print KBa6i/ RR na28: T6L T 68l$3YYna28 /la66 Sp8/ial%Ba6i/': # 8ntr8 parBnt86i6 la /la68 7a68 "8$ YYinitYY%68l$G na28G 8"i7l8': Ba6i/3YYinitYY%68l$G na28' 68l$3YY!pp8r = na283!pp8r%' 68l$3YY8"i7l8 = 8"i7l8 "8$ 61o]%68l$': Ba6i/361o]%68l$' print KSp8/ial RR !pp8r na28: T63L T 68l$3YY!pp8rG i$ 68l$3YY8"i7l8: print "ItL6 8"i7l83" 8l68: print "ItL6 not 8"i7l83" "8$ 8"i7l8%68l$': r8t!rn 68l$3YY8"i7l8 o7I* = Ba6i/%K anUanaL'

o7I*361o]%' print K=K * MF o7I- = Sp8/ial%KNaranIaLG *' o7I-361o]%' print o7I-3YBa6i/YYna28 print o7I-3YY!pp8r # lanUar^ !na 8&/8p/i?n

****SUBLADILLO:E ce$ciones >ada ,e" /ue un error ocurre se lan"a una e ce$cin0 ,isuali"ndose un e tracto de la $ila del sistema# !a ejecucin de la 1ltima sentencia del ejem$lo anterior $roducir)a:
Tra/87a/Z %2o6t r8/8nt /all la6t': Fil8 "/la68618r8n/ia3p)"G lin8 -_G in C print o7I-3YY!pp8r Attri7!t8Error: Sp8/ial in6tan/8 1a6 no attri7!t8 KYY!pp8rL

Para ca$turar una e ce$cin se usa #$-#pt y $ara lan"ar una e ce$cin se usa rai!e# Se $ueden crear e ce$ciones $ersonali"adas creando una nue,a clase /ue deri,e de la clase =untim#>rror de(inida $or Python# El siguiente (ragmento ilustra el uso de e ce$ciones#
# 8&/8p/ion3p) tr): $1=op8n%"n8]3t&t"G "r"' 8&/8pt IOErrorG 8: print 8 . p)t1on 8&/8p/ion3p) VErrno -W No 6!/1 $il8 or "ir8/tor): Kn8]3t&tL

****SUBLADILLO:5dulos !as librer)as de m2todos y clases se agru$an en Python en mdulos# +n mdulo es una coleccin de m2todos o clases en un (ichero /ue acaba en #$y# El nombre del (ichero determina el nombre del mdulo en la mayor)a de los casos# Para usar un mdulo se usa la sentencia import :nom)r#-modulo9 /ue hace /ue un mdulo y su contenido sean dis$onibles $ara su uso# 'lternati,amente se $uede usar la sentencia from
<nombre-mod%le> import <elemento! a importar !eparado! contenido># Por ejem$lo0 un mdulo se $odr)a de(inir como: # 2o"!lo3p) "8$ on8%a': print "in on8" "8$ t]o %/': print "in t]o" por coma! o ) para todo el

Este modulo se usar)a como sigue# Atese la di(erencia /ue e iste entre el uso de la clusula +rom:
000 i2port 2o"!lo 000 2o"!lo3on8%-' in on8 000 $ro2 2o"!lo i2port * 000 on8%-' in on8 000

import

y la

+n conjunto de mdulos $uede agru$arse como una unidad re$resentada $or un $a/uete# Re(erimos al lector a la Python !ibrary Re(erente $ara encontrar ms detalles sobre cmo crear un $a/uete# ****LADILLO:Desarrollando tu $rimera a$licacin Para $oner en $rctica la sinta is del lenguaje Python ,amos a desarrollar una sim$le im$lementacin del juego de tres en raya# '$arte de $ermitirnos jugar contra la m/uina0 este juego re/uiere /ue el jugador se autenti(i/ue antes de jugar y adems guarda estad)sticas en memoria sobre las $artidas ganadas0 $erdidas o em$atadas $or cada jugador# Por el momento la m/uina usa un algoritmo sencill)simo $ara la eleccin de la casilla a tachar $or la m/uina0 la elige de manera aleatoria# En $r imas entregas de esta serie discutiremos algoritmos mejores basados en inteligencia arti(icial# El listado J muestra la clase =#gi"tro?ugador#" /ue es utili"ada $ara mantener las estad)sticas de las $artidas de los jugadores# ****LISTADO -: !a clase Registro6ugadores

# i2port6 para to"a la apli/a/i?n i2port o6 i2port 6)6 i2port ran"o2 $ro2 t)p86 i2port * /la66 R8>i6troO!>a"or86: "8$ YYinitYY%68l$': 68l$3YYI!>a"or86 = (X6olopX:X6olopX, 68l$3YY86ta"i6ti/a6 = (X6olopX:VFG FG FW, # I!>a"or R0 V>ana"o6G 82pata"o6G p8r"i"o6W "8$ r8>i6trarO!>a"or%68l$G I!>a"orG /la98': i$ l8n%tri2%I!>a"or'' == F or l8n%tri2%/la98'' == F: rai68 "Lo6 /a2po6 I!>a"or ) /la98 no p!8"8n 86tar 9a/io6" i$ 68l$3YYI!>a"or8631a6YZ8)%I!>a"or': rai68 "O!>a"or " H I!>a"or H " )a 1a 6i"o r8>i6tra"o4" 68l$3YYI!>a"or86VI!>a"orW = /la98 68l$3YY86ta"i6ti/a6VI!>a"orW = VFG FG FW "8$ lo>in%68l$G I!>a"orG /la98': i$ not 68l$3YYI!>a"or8631a6YZ8)%I!>a"or': rai68 "O!>a"or " H I!>a"or H " no r8>i6tra"o4" i$ not 68l$3YYI!>a"or86VI!>a"orW == /la98: rai68 "Cla98 "8 I!>a"or " H I!>a"or H " 86 in9ali"a" r8t!rn Tr!8 "8$ r8>i6trarNi/toria%68l$G !68rNa28': 68l$3YY86ta"i6ti/a6V!68rNa28WVFW H= * "8$ r8>i6trarE2pat8%68l$G !68rNa28': 68l$3YY86ta"i6ti/a6V!68rNa28WV*W H= * "8$ r8>i6trarP8r"i"a%68l$G !68rNa28': 68l$3YY86ta"i6ti/a6V!68rNa28WV-W H= * "8$ >8tE6ta"i6ti/a6%68l$G !68rNa28': r8t!rn 68l$3YY86ta"i6ti/a6V!68rNa28W

El constructor de =#gi"tro?ugador#" de(ine dos atributos $ri,ados de ti$o diccionario /ue guardan los jugadores registrados -"#l+.//@ugador#". y las estad)sticas de las $artidas -"#l+.//#"tadi"ti-a".# Se carga un solo jugador con nombre de usuario '"olop' y contrase%a '"olop'0 e iniciali"amos las estad)sticas $ara el jugador '"olop'0 con la lista ;A.A6A< /ue indica /ue el usuario no ha ganado0 ni em$atado0 ni $erdido ning1n juego toda,)a# !a clase =#gi"tro?ugador#" de(ine el m2todo r#gi"tar?ugador /ue $ermita registrar los detalles de login de un nue,o jugador# Si ya e iste un usuario con el nombre de usuario $asado0 se lan"a una e ce$cin y si no se crea una nue,a entrada en el atributo "#l+.//@ugador#"# El m2todo login $ermite la autenticacin de un usuario0 y en caso de $ro,eerse un nombre de usuario o cla,e errneas se lan"a una e ce$cin# Por su $arte0 los m2todos re#i!trar*ictoria0 re#i!trar&mpate y re#i!trar+erdida sir,en $ara modi(icar el atributo !elf.__e!tadi!tica! con los resultados de las $artidas de cada jugador# 3inalmente el m2todo g#t>"tadi"ti-a" de,uel,e una lista con los resultados obtenidos $or un jugador# ****LISTADO M: >onstructor de la clase 6uegoTresEnRaya
/la66 O!8>oTr86EnRa)a: "8$ YYinitYY%68l$G r8>i6troG !68rNa28G pa66]or"': 68l$3YYr8>i6tro = r8>i6tro tr): 68l$3YYr8>i6tro3lo>in%!68rNa28G pa66]or"' 8&/8pt E&/8ptionG 8: print XPro7l82a6 r8aliUan"o lo>in: XG 832866a>8%' 6)638&it%F' # Con6tant86 "8 la /la68 # /o27ina/ion86 >ana"ora6 8n M 8n ra)a 68l$3YY/o27iGana"ora6 = V VFG*G-WG VMGEG[WG V`GQG_WG VFGMG`WG V*GEGQWG V-G[G_WG VFGEG_WG V-GEG`W W

68l$3YY2ar/aO!>a"or = XoX 68l$3YY2ar/a a<!ina = X&X # 2i827ro6 "8 la /la68 68l$3YY!68rNa28 = !68rNa28 # r8/or"a2o6 !68rna28 "8 I!>a"or 68l$3YY/a6illa6 ar/a"a6 = F 68l$3YY/a6ill8ro = VVNon8G Non8G Non8WG VNon8G Non8G Non8WG VNon8G Non8G Non8WW ran"o23688"%' # ini/iliUar 682illa n!28ro6 ran"o2

****LISTADO E: 52todos de ayuda de la clase 6uegoTresEnRaya

"8$ YY8l8>ir ar/a a<!ina%68l$': # 8liI8 /!al "8 la6 /a6illa6 no 68l8//iona"a6 1a) <!8 2ar/ar /a6illa ar/arIn"8& = ran"o23ran"int%FG _R68l$3YY/a6illa6 ar/a"a6' /a6illaNon8E&a2ina"a = F $or i in ran>8%M': $or I in ran>8%M': i$ not 68l$3YY/a6ill8roViWVIW an" /a6illaNon8E&a2ina"a /a6illa ar/arIn"8&: r8t!rn %iG I' 8li$ not 68l$3YY/a6ill8roViWVIW: /a6illaNon8E&a2ina"a H= * "8$ YY98rTa7l8ro%68l$': #/l8arY6/r88n%' print XananE6ta"o a/t!al "8 la parti"a:anX print "R"**M # i2pri28 *M 98/86 R $or i in ran>8%M': $ila = "b " $or I in ran>8%M': i$ 68l$3YY/a6ill8roViWVIW == Non8: $ila H= %XYX H " b "' 8l68: $ila H= %68l$3YY/a6ill8roViWVIW H " b "' print $ila print "R"**M print XanX

==

"8$ YY1a)Gana"or%68l$': $or i in ran>8%l8n%68l$3YY/o27iGana"ora6'': a = 68l$3YY/o27iGana"ora6ViWVFW 7 = 68l$3YY/o27iGana"ora6ViWV*W / = 68l$3YY/o27iGana"ora6ViWV-W i$ 68l$3YY/a6ill8roVa5MWVaTMW an" 68l$3YY/a6ill8roV75MWV7TMW an" 68l$3YY/a6ill8roV/5MWV/TMW: i$ 68l$3YY/a6ill8roVa5MWVaTMW == 68l$3YY/a6ill8roV75MWV7TMW == 68l$3YY/a6ill8roV/5MWV/TMW: # 2ar/ar la6 /a6illa6 "8 la /o27ina/ion >ana"ora 8n 2a)!6/!la6 68l$3YY/a6ill8roVa5MWVaTMW = 68l$3YY/a6ill8roV75MWV7TMW = 68l$3YY/a6ill8roV/5MWV/TMW = 68l$3YY/a6ill8roV/5MWV/TMW3!pp8r%' r8t!rn Tr!8 r8t!rn Fal68

****LISTADO [: 52todo jugar de la clase 6uegoTresEnRaya


"8$ I!>ar%68l$': ]1il8 68l$3YY/a6illa6 ar/a"a6 \ c: # 2i8ntra6 8l !6!ario no intro"!/8 la6 /oor"8na"a6 "8 !na /a6illa no 68l8//iona"a ]1il8 Tr!8: /a6illaCoor"6 = %' # "8/lara !na 9aria7l8 "8 tipo t!pla 9a/ia ]1il8 Tr!8: tr): 6 = ra]Yinp!t%"E6/ri78 la /a6illa <!8 <!i8r86 2ar/ar 8ntr8 %*G *' ) %MG M'G 83I3 %-G*': "'

/a6illaCoor"6 = 89al%6' # int8rpr8ta la 8ntra"a /o2o !na t!pla i$ not t)p8%/a6illaCoor"6' i6 T!pl8T)p8: print XERROR: Intro"!/8 la6 /oor"8na"a6 8n 8l $or2ato %&G )'G "on"8 & 8 ) 86tan 8n 8l ran>o V*RMWX /ontin!8 7r8aZ 8&/8pt: print XERROR: Intro"!/8 la6 /oor"8na"a6 8n 8l $or2ato %&G )'G "on"8 & 8 ) 86tan 8n 8l ran>o V*RMWX & = /a6illaCoor"6VFW R * ) = /a6illaCoor"6V*W R * i$ & 0 - or ) 0 - or & \ F or ) \ F: print "ERROR: In"i/a in"i/86 "8 $ila ) /ol!2na 8ntr8 * ) M" i$ 68l$3YY/a6ill8roV&WV)W == Non8: 68l$3YY/a6ill8roV&WV)W = 68l$3YY2ar/aO!>a"or 68l$3YY/a6illa6 ar/a"a6 H= * 7r8aZ 8l68: print XERROR: Ca6illa )a 2ar/a"aX i$ 68l$3YY1a)Gana"or%': 68l$3YY98rTa7l8ro%' 68l$3YYr8>i6tro3r8>i6trarNi/toria%68l$3YY!68rNa28' print XRESULTADO: El !6!ario 1a >ana"oX r8t!rn i$ 68l$3YY/a6illa6 ar/a"a6 == c: 68l$3YY98rTa7l8ro%' 7r8aZ /a6illaIn"8& = 68l$3YY8l8>ir ar/a a<!ina%' 68l$3YY/a6ill8roV/a6illaIn"8&VFWWV/a6illaIn"8&V*WW = 68l$3YY2ar/a a<!ina 68l$3YY/a6illa6 ar/a"a6 H= * i$ 68l$3YY1a)Gana"or%': 68l$3YY98rTa7l8ro%' 68l$3YYr8>i6tro3r8>i6trarP8r"i"a%68l$3YY!68rNa28' print XRESULTADO: La 2a<!ina 1a >ana"oX r8t!rn 68l$3YY98rTa7l8ro%' 68l$3YYr8>i6tro3r8>i6trarE2pat8%68l$3YY!68rNa28' print XRESULTADO: Ha 1a7i"o 82pat8X 68l$3YYr8>i6tro3r8>i6trarE2pat8%68l$3YY!68rNa28' print XRESULTADO: Ha 1a7i"o 82pat8X

El listado K muestra la im$lementacin del constructor de la clase ?u#go4r#">n=aya0 /ue de(ine la lgica $rinci$al de la a$licacin# El constructor de esta clase recibe como $armetros una re(erencia al registro de jugadores0 el nombre de usuario y la cla,e del jugador /ue /uiere com$etir con la m/uina# El constructor en $rimer lugar guarda la re(erencia al registro en la ,ariable $ri,ada "#l+.//r#gi"tro y ,alida /ue los datos de autenti(icacin del jugador son correctos# ' continuacin0 declara las constantes "#l+.//-om)iBanadora" con las combinaciones ganadoras del juego0 "#l+.//mar-a?ugador con el carcter ,o, /ue indica la marca de un jugador y "#l+.//mar-aCa*uina con el ,alor ,x, /ue denota las casillas marcadas $or la m/uina# 3inalmente0 el contructor declara las ,ariables "#l+.//u"#r0am# donde memori"a el identi(icador del jugador0 "#l+.//-a"illa"Car-ada" donde cuenta cuantas casillas estn marcadas hasta el momento y el array bidimensional "#l+.//-a"ill#ro /ue recoge los ,alores marcados en cada casilla0 inicialmente ninguno# El listado P muestra los siguientes m2todos de ayuda de(inidos $or la clase ?u#go4r#">n=aya: //#l#girCar-aCa*uina0 //v#r4a)l#ro y //hayBanador# El m2todo //#l#girCar-aCa*uina hace uso del mdulo random $ara elegir de manera aleatoria una de las casillas no marcadas# El mdulo //v#r4a)l#ro ,isuali"a en modo te to el tablero# 3inalmente0 el m2todo //hayBanador determina si alguna de las combinaciones ganadoras ha sido alcan"ada# El listado Q muestra el 1nico m2todo $1blico (%#ar() /ue de(ine toda la lgica del juego de tres en raya entre un usuario y la m/uina# 'sume /ue el usuario siem$re comien"a# !a $artida no concluye hasta /ue se ha encontrado una combinacin ganadora o se han tachado las nue,e casillas del tablero# 5ientras el

usuario no introduce los datos de una casilla correctamente el m2todo itera sobre un bucle# Para recoger la entrada del usuario se utili"a la (uncin ra./"tring%:m#n"a@#9&# 'dems dado /ue se $retende /ue la entrada tenga el (ormato %$6 y&0 se e,al1a si los datos introducidos corres$onden a una tu$la0 mediante la (uncin #val /ue con,ierte un string al ti$o de datos re$resentado# 'dems se ,alida si el ,alor inter$retado corres$onde a una tu$la haciendo uso del m2todo typ# del mdulo typ#" y del o$erador i" /ue $ermite la com$aracin entre un ,alor y su ti$o: i+ not typ#%-a"illaCoord"& i" 4upl#4yp## 'dems en cada iteracin se com$rueba /ue el ,alor de la celda introducida est2 dentro del rango de ,alores ,alidos y adems no haya sido ya marcado# Des$u2s de /ue el usuario introdu"ca una casilla ,lida se e,al1a si ha ganado in,ocando el m2todo __hay-anador# Si es as) se registra la ,ictoria del usuario in,ocando "#l+.//r#gi"tro.r#gi"trarDi-toria%"#l+.//u"#r0am#&# Si toda,)a no se han marcado las nue,e casillas del tablero se $asa el turno a la m/uina0 eligi2ndose la casilla a marcar mediante la llamada al m2todo $ri,ado //#l#girCar-aCa*uina# ' continuacin0 se com$rueba si tras marcar la 1ltima casilla la m/uina ha ganado la $artida y si es as) se registra /ue el usuario la ha $erdido# >uando las casillas marcadas sean nue,e y no ha habido ning1n ganador se registrar el hecho de /ue el juego ha acabado en em$ate# ****LISTADO `: El blo/ue main
i$ YYna28YY == XYY2ainYYX: r8>i6tro = R8>i6troO!>a"or86%' I!8>o = O!8>oTr86EnRa)a%r8>i6troG 6)63ar>9V*WG 6)63ar>9V-W' I!8>o3I!>ar%' ]1il8 Tr!8: 6 = ra]Yinp!t%"@A!i8r86 I!>ar otra 98UC %6' o %n': "' i$ 636trip%'3lo]8r%' == X6X: I!8>o = O!8>oTr86EnRa)a%r8>i6troG X6olopXG X6olopX' I!8>o3I!>ar%' 8l68: print XGra/ia6 por I!>ar al tr86 8n ra)a4X print XE6ta"d6ti/a6 "8 I!8>o "8 6olop: 9i/toria6 %X 6tr%r8>i6tro3>8tE6ta"i6ti/a6%X6olopX'VFW' Ha X' R 82pat86 %X H 6tr%r8>i6tro3>8tE6ta"i6ti/a6%X6olopX'V*W' H a X' R "8rrota6 %X H 6tr%r8>i6tro3>8tE6ta"i6ti/a6%X6olopX'V-W' H X'X 7r8aZ

El listado R muestra el blo/ue de entrada del $rograma# Todo blo/ue /ue comience con i+ //nam#// 88 '//main//'E0 es e/ui,alente a un blo/ue main en > o 6a,a# El blo/ue main0 en $rimer lugar0 obtiene una re(erencia al registro# En (uturas entregas recu$eraremos ese registro bien de un (ichero o de una base de datos# Por el momento0 esto se consigue in,ocando al constructor de .e#i!tro/%#adore! /ue mantiene un diccionario en memoria con los jugadores registrados y otro con las estad)sticas de juego de los mismos# En segundo lugar0 el blo/ue main crea una instancia de la clase ?u#go4r#">n=aya0 $asando como re(erencia el registro obtenido y el nombre y contrase%a del jugador# Estos dos 1ltimos ,alores son recu$erados a $artir de los $armetros $asados en la in,ocacin del $rograma0 mediante la sentencia "y".argv;$<0 donde $ indica el orden del $armetro0 a$untando el )ndice A al nombre del scri$t# ' continuacin0 se $ermite /ue el usuario inicie una $artida llamando al m2todo @ugar%& de la instancia de ?u#go4r#">n=aya# 'l (inali"ar esta $artida se $regunta al usuario si /uiere seguir jugando y se re$ite este $roceso hasta /ue el usuario no res$onda !# 3inalmente0 antes de terminar el $rograma se muestran las estad)sticas de resultados de los en(rentamientos entre la m/uina y el usuario indicado# !a (igura P muestra una sesin del juego de tres en raya# ****LADILLO: Conclusin Este art)culo ha mostrado la sinta is del lenguaje Python y ha ilustrado su uso a tra,2s de la elaboracin de un sim$le juego de tres en raya# ' tra,2s de la elaboracin de este $e/ue%o $rograma hemos $odido com$robar la sim$licidad de Python y sus ca$acidades $ara elaborar de manera r$ida cual/uier tarea de $rogramacin /ue tengamos en mente# En la siguiente entrega de esta serie ,eremos como $ro$orcionar una inter(a" gr(ica a este juego y cmo mantener el registro de jugadores y sus estad)sticas en ,arios (icheros#

****FIG*3TIF: ****FIG-3TIF: ****FIGM3TIF: ****FIGE3TIF:

Pgina *eb Python#org Sesiones interacti,as en Python# Documentacin de la !ibrer)a de Python# Sesin de 6uego del Tres en Raya

También podría gustarte