16.6. La clase ManoDeLaMona

Una mano para jugar a La Mona requiere ciertas capacidades que están mas allá de las que posee una Mano. Definiremos una nueva clase ManoDeLaMona, que hereda de Mano y nos proporciona un metodo adicional denominado eliminaCoincidencias:

   1: class ManoDeLaMona(Mano):
   2:     def eliminaCoincidencias(self):
   3:         cant = 0
   4:         cartasOriginales = self.cartas[:]
   5:         for carta in cartasOriginales:
   6:             empareja = Carta(3 - carta.palo, carta.valor)
   7:             if empareja in self.cartas:
   8:                 self.cartas.remove(carta)
   9:                 self.cartas.remove(empareja)
  10:                 print "Mano %s: %s con %s" % (self.nombre,carta,empareja)
  11:                 cant = cant + 1
  12:         return cant

 

 

Comenzamos por hacer una copia de la lista de las cartas, de tal manera que podamos recorrer la copia mientras vamos quitando cartas de la lista original.


Como self.cartas se modifica en el bucle, no vamos a querer usarla para controlar el recorrido. ¡Python puede quedar realmente confundido si se recorre una lista que esta cambiando!


Para cada carta de la mano, averiguamos cual es la carta que concordara con ella y la buscamos. La carta que concuerda tiene el mismo valor y el otro palo del mismo color. La expresión 3 - carta.palo transforma un Trébol (palo 0) en una Pica (palo 3) y un Diamante (palo 1) en un Corazón (palo 2). Verifique por su cuenta que las operaciones opuestas también funcionan. Si la carta que concuerda esta en la mano, ambas se eliminan.


El siguiente ejemplo demuestra el uso de eliminaCoincidencias:




   1: >>> print mano
   2: La mano de hugo contiene
   3: As de Picas
   4: 2 de Diamantes
   5: 7 de Picas
   6: 8 de Treboles
   7: 6 de Corazones
   8: 8 de Picas
   9: 7 de Treboles
  10: Raina de Treboles
  11: 7 de Diamantes
  12: 5 de Treboles
  13: Sota de Diamantes
  14: 10 de Diamantes
  15: 10 de Corazones
  16: >>> mano.eliminaCoincidencias()
  17: Mano hugo: 7 de Picas con 7 de Treboles
  18: Mano hugo: 8 de Picas con 8 de Treboles
  19: Mano hugo: 10 de Diamantes con 10 de Corazones

Debe usted notar que no existe un metodo __init__ para la clase ManoDeLaMona.


Lo heredamos de Mano.

0