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.

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