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 + 112: 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 CorazonesDebe usted notar que no existe un metodo __init__ para la clase ManoDeLaMona.
Lo heredamos de Mano.
Comentarios
Publicar un comentario