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.
Comentarios
Publicar un comentario