我正在尝试用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))
如果是直线和/或皇家同花顺,则需要分类并返回
最佳答案
不幸的是,ace值可以高也可以低,这取决于产生更好牌的方法。最初,我将它们的值为14,但是当我进入直道时会处理低一点的A。首先,将卡片转换为数字的功能。我使用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)
现在,处理直道。首先,我们检查一下是否有一张A(由于该牌的总值为14,所以它始终是最后一手牌)。如果有一张王牌,而手牌中最低(第一张,排序时)的牌是两张,则我们假设该王牌是低牌(因为这是构造直线的唯一方法),并检查剩余的牌是否完整直行。否则,ace会自动变高,因此我们检查每张卡的值是否比前一张高:
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))
现在我们已经完成了艰苦的工作,接下来继续进行皇家同花顺。皇家同花顺既是同花顺又是同花顺,其中最高的牌是ace:
def is_royal_flush(hand):
hand = sorted(hand, key=to_number)
return hand[-1][0] == 'A' and is_straight(hand) and is_flush(hand)
关于python - 在python中如何排序一手扑克(列表)并检测出是同花顺还是同花顺,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36525890/