私はポーカーハンドをランク付けするプログラムを作成しています。ランク付けする前にカードの番号の値で各手を分類して、それを簡単にしたいが、並べ替えをするのに問題がある。個々の文字列ではなく、self.deck内のすべての文字を並べ替えます。Sorted()関数は私が望むようにしていません
from random import *
class Carddeck:
def __init__(self, deck=[], hand=[]):
self.deck=deck
self.hand=hand
numbers=['01','02','03','04','05','06','07','08','09','10','11','12']
suits=['heart','spade','diamond','club']
for each in numbers:
for every in suits:
deck.append(str(Card(each,every)))
def __repr__(self):
return str(self.deck)
def shuffle(self):
shuffle(self.deck)
return self.deck
def dealcards(self,n):
if len(str(self.deck))>n:
self.hand=str(self.deck[0:n])
self.deck = self.deck[n:]
elif len(self.deck)==n:
self.hand=str(self.deck[0:n])
deck=[]
self.deck=deck
numbers=['01','02','03','04','05','06','07','08','09','10','11','12']
suits=['heart','spade','diamond','club']
for each in numbers:
for every in suits:
self.deck.append(Card(each,every))
else:
x=len(self.deck)
self.hand=self.deck
self.deck=[]
numbers=[1,2,3,4,5,6,7,8,9,10,11,12]
suits=['heart','spade','diamond','club']
for each in numbers:
for every in suits:
self.deck.append(Card(each,every))
y=n-x
self.hand+=str(self.deck[0:y])
self.deck=self.deck[y-1-3:]
class Pokerhand(Carddeck):
def newHand(self,hand):
self.dealcards(5)
def __repr__(self):
return str(self.hand)
def rank(self):
self.hand=sorted(self.hand)
return self.hand
>>> x=Carddeck()
>>> x.shuffle()
['01 diamond', '05 heart', '03 club', '05 spade', '09 club', '02 diamond', '03 diamond', '08 diamond', '01 heart', '07 diamond', '11 diamond', '05 club', '02 club', '07 club', '10 club', '01 club', '04 club', '04 heart', '12 club', '11 club', '03 heart', '02 heart', '09 diamond', '08 heart', '06 diamond', '12 spade', '04 diamond', '07 heart', '10 diamond', '12 heart', '09 heart', '08 spade', '07 spade', '03 spade', '02 spade', '08 club', '10 heart', '01 spade', '12 diamond', '11 heart', '06 heart', '06 club', '10 spade', '09 spade', '04 spade', '05 diamond', '06 spade', '11 spade']
>>> y=Pokerhand()
>>> y.newHand(x)
>>> y
['01 diamond', '05 heart', '03 club', '05 spade', '09 club']
>>> y.rank()
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', "'", "'", "'", "'", "'", "'", "'", "'", "'", "'", ',', ',', ',', ',', '0', '0', '0', '0', '0', '1', '3', '5', '5', '9', '[', ']', 'a', 'a', 'a', 'b', 'b', 'c', 'c', 'd', 'd', 'd', 'e', 'e', 'h', 'i', 'l', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'u']
あなたのカードを 'key'引数と比較する方法や、' Card'に '__cmp __()'を実装する方法を 'sorted()'に伝える必要があります。 –
[ソートHOWTO](https://docs.python.org/3/howto/sorting.html)... ['' '__lt __()' ''メソッド(https:// docs。 python.org/3/reference/datamodel.html#object.__lt__) - '' 'ソートルーチンは、2つのオブジェクトを比較するときに__lt __()を使用することが保証されています。だから、__lt __()メソッドを定義することで、クラスに標準のソート順を追加するのは簡単です: '' '。 – wwii
これは、カードに文字列を使用しない理由の1つです。それらを(2c、2d、2h、2s、3c、3d ... Ks、Ac、Ad、Ah、As)を表す0から51までの整数で表すだけです。そうすれば、自然数を並べ替えて比較することができます。 –