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
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