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.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s