2016-04-10 9 views
0

私は以下のような手を得ることができるpythonでポーカープログラムを作りようとしています。私がしたいことは、手を並べ替えることであり、Trueの場合はtrueを返します。私はそれが王室のフラッシュであればまっすぐであるかどうかを知る必要があります。どのようにポーカー(リスト)の手を並べ替えて、それがストレートかロイヤルフラッシュかを検出するにはどうすればいいですか?

hand=['Jc','2h','6d','Th','Kd'] 

def has_straight(hand): 

    if hand[4][0] >hand[3][0] and hand[3][0]>hand[2][0] and hand[2][0]>hand[1][0] and hand[1][0]>hand[0][0]: 
     return True 
    else: 
     return False 

hand.sort() 

print (has_straight(hand)) 

ソートする必要があると戻り、それがロイヤルフラッシュ残念ながら

+1

どのように4枚のカードでストレートにすることができますか? – Signal

+1

@Signal:ノンポーカープレーヤーのストレートです。 – zondo

+0

文字列は、手を検出しようとするときに表示されるように、カードを表すためのひどい方法です。それで、 "isStraight()"関数は、まず "J"> "T"、 "Q"> "J"などのように手を並べ替える必要があります。次にホイール(2345A)を特殊ケースに入れなければなりません。 –

答えて

2

ストレートおよび/またはである場合には、エースがより良い手を生産するものに応じて、高いまたは低いことができます。私は最初にそれらを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) 
関連する問題