13.01.2015 Views

Booklet A4/A5 - PET: Python Entre Todos - Python Argentina

Booklet A4/A5 - PET: Python Entre Todos - Python Argentina

Booklet A4/A5 - PET: Python Entre Todos - Python Argentina

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Primer solución “no dinámica” 43<br />

elif servicio == "B":<br />

self.accion1_en_B()<br />

elif servicio == "C":<br />

self.accion1_en_C()<br />

elif servicio == "D":<br />

self.accion1_en_D()<br />

def accion1_en_A(self):<br />

#codigo de la accion 1 en el servicio A<br />

def accion1_en_B(self):<br />

#codigo de la accion 1 en el servicio B<br />

def accion1_en_C(self):<br />

#codigo de la accion 1 en el servicio C<br />

def accion1_en_D(self):<br />

#codigo de la accion 1 en el servicio D<br />

No puedo negarlo, la separación en varios métodos ayuda un poco a la legibilidad y<br />

mantenibilidad. Consideremos esa parte como resuelta y correcta, nos olvidamos de<br />

los métodos “accionX_en_Y”. Pero tenemos todavía esto:<br />

def accion1(self, servicio):<br />

if servicio == "A":<br />

self.accion1_en_A()<br />

elif servicio == "B":<br />

self.accion1_en_B()<br />

elif servicio == "C":<br />

self.accion1_en_C()<br />

elif servicio == "D":<br />

self.accion1_en_D()<br />

Esto es lo que sigue sin gustarme. ¿Por qué Porque seguimos teniendo el problema de<br />

los ifs horribles desparramados por todos lados. Seguimos teniendo que mantener esas<br />

40 líneas de código que solo sirven para elegir el código a ejecutar. Mi opinión es que<br />

debería poder hacerse de otra forma.<br />

<strong>Python</strong> <strong>Entre</strong> <strong>Todos</strong> (número 1, Agosto 2010) — http://revista.python.org.ar<br />

26 ¿Cómo tienen que ser los tests<br />

a ¤r 2 2 +b ¤r 2 +c =0<br />

Además, dados los valores y queremos encontrar los valores de a, b y c. Sabemos<br />

que:<br />

(x¡r 1 ) ¤(x¡r 2 ) =ax 2 +bx +c =0<br />

Todo esto son cosas de matemática que vimos en el colegio. Ahora veamos un código<br />

que cumple eso:<br />

import math<br />

class NoEsFuncionCuadratica(Exception):<br />

pass<br />

class NoExistenRaicesReales(Exception):<br />

pass<br />

def buscar_raices(a, b, c):<br />

""" Toman los coeficientes a, b y c de una función cuadrática y busca<br />

sus raíces. La función cuadrática es del estilo:<br />

ax**2 + b x + c = 0<br />

Va a devolver una tupla con las dos raíces donde la primer raíz va a ser<br />

menor o igual que la segunda raíz.<br />

"""<br />

if a == 0:<br />

raise NoEsFuncionCuadratica()<br />

discriminante = b * b - 4 * a * c<br />

if discriminante < 0:<br />

raise NoExistenRaicesReales()<br />

raiz_discriminante = math.sqrt(discriminante)<br />

primer_raiz = (-1 * b + raiz_discriminante) / (2 * a)<br />

segunda_raiz = (-1 * b - raiz_discriminante) / (2 * a)<br />

# min y max son funciones de python<br />

<strong>Python</strong> <strong>Entre</strong> <strong>Todos</strong> (número 1, Agosto 2010) — http://revista.python.org.ar

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!