19.6. La clase Golfista

Como ejemplo de un objeto con una definición inusual de prioridad, vamos a
implementar una clase llamada Golfista que mantiene los nombres y puntua-
ciones de golfistas. Como es habitual, empezamos por definir __init__ y __str__:

   1: class Golfista:
   2:     def __init__(self, nombre, puntos):
   3:         self.nombre = nombre
   4:         self.puntos = puntos
   5:     def __str__(self):
   6:         return "%-16s: %d" % (self.nombre, self.puntos)

 


__str__ usa el operador de formato para poner los nombres y las puntuaciones
en bonitas columnas.
A continuación definimos una versión de __cmp__ en la que la puntuación mas
baja tiene la prioridad mas alta. Como siempre, __cmp__ devuelve 1 si self es
\mayor que" otro, -1 si self es \menor que" otro, y 0 si son iguales.




   1: class Golfista:
   2: ...
   3:     def __cmp__(self, otro):
   4:         if self.puntos < otro.puntos: return 1 # menos es mas
   5: if      self.puntos > otro.puntos: return -1
   6:         return 0

 


Ya estamos listos para probar la cola priorizada con la clase Golfista:



   1: >>> tiger = Golfista("Tiger Woods", 61)
   2: >>> cabr = Golfista("Angel Cabrera", 72)
   3: >>> ola = Golfista("J.M. Olazabal", 69)
   4: >>> cp = ColaPriorizada()
   5: >>> cp.inserta(tiger)
   6: >>> cp.inserta(cabr)
   7: >>> cp.inserta(ola)
   8: >>> while not cp.estaVacia(): print cp.quita()
   9: Tiger Woods : 61
  10: J.M. Olazabal : 69
  11: Angel Cabrera : 72

 


Como ejercicio, escriba una implementación del TAD Cola Prio-
rizada usando una lista enlazada. Deber³a usted mantener la lista
ordenada de modo que la eliminación sea una operación de tiempo
constante. Compare el rendimiento de esta implementación con la
implementación con la lista de Python.

0