Aprender a pensar como un programador Python

Page 170

144

Clases y funciones

def incremento(hora, segundos): hora.segundos = hora.segundos + segundos if hora.segundos >= 60: hora.segundos = hora.segundos - 60 hora.minutos = hora.minutos + 1 if hora.minutos >= 60: hora.minutos = hora.minutos - 60 hora.horas = hroa.horas + 1 La primera l´ınea realiza la operaci´on b´asica, las restantes tratan con los casos especiales que vimos antes. ¿Es correcta esta funci´on? ¿Qu´e ocurre si el par´ametro segundos es mucho mayor que sesenta? En tal caso, no es suficiente con acarrear una vez; debemos seguir haci´endolo hasta que segundos sea menor que sesenta. Una soluci´on es sustituir las sentencias if por sentencias while: def incremento(hora, segundos): hora.segundos = hora.segundos + segundos while hora.segundos >= 60: hora.segundos = hora.segundos - 60 hora.minutos = hora.minutos + 1 while hora.minutos >= 60: hora.minutos = hora.minutos - 60 hora.horas = hroa.horas + 1 Ahora esta funci´on es correcta, pero no es la soluci´on m´as eficiente. Como ejercicio, reescriba esta funci´ on de modo que no contenga tantos bucles. Como un segundo ejercicio, reescriba incremento como una funci´ on pura, y escriba una funci´ on que llame a ambas versiones.

13.4.

¿Qu´ e es mejor?

Todo lo que se pueda hacer con modificadores puede hacerse tambi´en con funciones puras. En realidad, algunos lenguajes de programaci´on s´olo permiten funciones puras. Hay ciertas evidencias de que los programas que usan funciones puras son m´as r´apidos de desarrollar y menos propensos a los errores que


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.