ストレートおよび/またはである場合には、エースがより良い手を生産するものに応じて、高いまたは低いことができます。私は最初にそれらを14と評価しますが、ストレートになると低いエースを扱います。まず、カードを番号に変換する機能。私は顔のカードの値をルックアップするためにdict
を使用:手をソート
FACE_CARDS = {'T': 10, 'J': 11, 'Q': 12, 'K': 13, 'A': 14}
def to_number(card):
if card[0].isnumeric():
return int(card[0])
else:
return FACE_CARDS[card[0]]
は今簡単です:
hand=['Jc','2h','6d','Th']
hand.sort(key=to_number)
print(hand)
# prints ['2h','6d','Th','Jc']
フラッシュの確認は他のすべてのカードの確認訴訟を作るのと同じくらい簡単です最初のカードのスーツに合ってください:
def is_flush(hand):
test_suit = hand[0][1]
return all(card[1] == test_suit for card in hand)
今、ストレートに対処する。まず、エースがあるかどうかをチェックします(ソートされたハンドの最後のカードは常に値14なので)。エースがあり、最下位(最初の、ソートされたとき)のカードが2つの場合、エースは低いと仮定します(それがストレートに構成できる唯一の方法です)。残りのカードがまっすぐ。そうしないと、ACEは自動的に高いので、私たちは、それぞれのカードの値が前回より1高いことを確認します
def is_straight(hand):
hand = sorted(hand, key=to_number)
if hand[-1][0] == "A" and hand[0][0] == "2":
# Check that the remaining cards complete the straight
return list(map(to_number, hand[1:-1])) == list(range(3, len(hand)+1))
# You can skip conversion to lists for Python 2
else:
return all(to_number(hand[i])+1 == to_number(hand[i+1]) for i in range(len(hand)-1))
今は難しい部分が行っていることを、私たちはロイヤルフラッシュの上に移動します。ロイヤルフラッシュはストレートでフラッシュで、最高のカードはエースです:
def is_royal_flush(hand):
hand = sorted(hand, key=to_number)
return hand[-1][0] == 'A' and is_straight(hand) and is_flush(hand)
どのように4枚のカードでストレートにすることができますか? – Signal
@Signal:ノンポーカープレーヤーのストレートです。 – zondo
文字列は、手を検出しようとするときに表示されるように、カードを表すためのひどい方法です。それで、 "isStraight()"関数は、まず "J"> "T"、 "Q"> "J"などのように手を並べ替える必要があります。次にホイール(2345A)を特殊ケースに入れなければなりません。 –