Ich habe das folgende Stück Code in Python, es organisiert (Gruppierung) Spielkarten von ihren Reihen. Ich habe das auf alte Schule gemacht, aber ich bin mir sicher, dass es einen besseren Weg gibt, da Python tatsächlich für solche Dinge berühmt ist. Wie kann ich das gleiche auf kürzere und eleganter Weise machen? HierVerbessern Python-Code - wie Listenelemente durch ihre Eigenschaftswerte gruppieren
ist die Methode Code:
def gatherRanks(self, hand):
self.value1 = []
self.value2 = []
self.value3 = []
self.value4 = []
card1 = hand.cards[0]
self.value1.append(card1)
card2 = hand.cards[1]
if card2.rank == card1.rank:
self.value1.append(card2)
else:
self.value2.append(card2)
card3 = hand.cards[2]
if card3.rank == card1.rank:
self.value1.append(card3)
elif card3.rank == card2.rank:
self.value2.append(card3)
else:
self.value3.append(card3)
card4 = hand.cards[3]
if card4.rank == card1.rank:
self.value1.append(card4)
elif card4.rank == card2.rank:
self.value2.append(card4)
elif card4.rank == card3.rank:
self.value3.append(card4)
else:
self.value4.append(card4)
card5 = hand.cards[4]
if card5.rank == card1.rank:
self.value1.append(card5)
elif card5.rank == card2.rank:
self.value2.append(card5)
elif card5.rank == card3.rank:
self.value3.append(card5)
elif card5.rank == card4.rank:
self.value4.append(card5)
Die Idee hinter dieser Methode ist es, Gruppenkarten von ihren Rängen (nicht passt). Ich entschied mich auch, 4 Selbstvariablen zu haben, weil es einfacher zu benutzen ist als die Liste. Der Grund ist ganz einfach: Hände später herausfinden. Mit Karten von Reihen gruppiert kann ich dann einfach die Figur überprüfen, zum Beispiel:
#(checking if hand is a Trip)
def isThreeOfKind(self, hand):
self.gatherRanks(hand)
return len(self.value1)==3 or len(self.value2)==3 or len(self.value3)==3
und so weiter, jede Kontrolle eine Frage der von 1 bis 3 Zeilen Code (außer Gerade die Schleife erfordert).
Wenn Ihre aktuelle Version funktioniert und Sie wollen einfach, es zu verbessern, 'CodeReview' ist der richtige Ort für Sie. http://codereview.stackexchange.com/ –
Wenn der Rang von card5 nicht dem Rang einer anderen Karte entspricht, wird er nicht an eine Ihrer 4 Listen angehängt, ist das beabsichtigt? –
Im Anschluss an Rawings Kommentar vermute ich, dass Sie Karten nach ihrer Farbe und nicht nach ihrem Rang gruppieren sollten. Und ja, es gibt effizientere Möglichkeiten, so etwas zu tun. –