次のコードをPythonで持っています。ランクでカードを整理(グループ化)しています。私は古い学校の方法でこれをやったが、Pythonがそのようなことで実際に有名であるため、より良い方法があると確信している。 私はどのように短くてエレガントな方法で同じことをすることができますか?ここでpythonコードの改善 - リスト要素をプロパティ値でグループ化する方法
は、メソッドのコードです:
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)
その方法の背後にある考え方は、自分のランク(ないスーツ)によってグループカードにあります。私は4つの自己変数を持つことに決めました。なぜなら、それはリストよりも使いやすいからです。 理由は非常に簡単です:後で手をつかむ。ランク別にグループ化され 有するカードIは、簡単に、例えば、図形を確認することができる: - (ループが必要ストレート除く)コードの3行
#(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
等は、すべてのチェックが1の問題です。
は、 'CodeReview'はあなたのための場所です。 http://codereview.stackexchange。com/ –
カード5のランクが他のカードのランクと一致しない場合、4つのリストのいずれにも追加されません。それは意図的なものですか? –
Rawingさんのコメントに続いて、私は自分の順位の代わりにスーツでカードをグループ化するべきだと思っています。そして、そういうことをするより効率的な方法があります。 –