Versión modificada (y desactualizada) disponible en [1] más algo de formateo PEP8