使用Python从一组7张扑克牌中返回包含一对的5张最佳牌

时间:2016-01-11 21:18:36

标签: python enums

我目前正在尝试在Python 2.7上使用Python的Enum模块来识别7手牌中的一对卡

import collections
import operator
import enum

Card = collections.namedtuple("Card", "rank suit")
#in the below hand there is a pair of fours. 
hand = [
    Card(rank=<Ranks.four: 3>, suit=<Suits.spades: 1>),
    Card(rank=<Ranks.nine: 8>, suit=<Suits.clubs: 3>),
    Card(rank=<Ranks.ten: 9>, suit=<Suits.spades: 1>),
    Card(rank=<Ranks.jack: 10>, suit=<Suits.diamonds: 4>),
    Card(rank=<Ranks.six: 5>, suit=<Suits.hearts: 2>),
    Card(rank=<Ranks.four: 3>, suit=<Suits.diamonds: 4>),
    Card(rank=<Ranks.two: 1>, suit=<Suits.clubs: 3>),
    ]

#My function
def is_pair():
    #count duplicate-numbers in `hand`
    ranks = collections.Counter(map(operator.attrgetter("rank"), hand))
    pair_card=[]
    if len(ranks) == 6:
        # get most common if there are individual counts
        # (so one is duplicated and not counted)
        pair_card = ranks.most_common(1)[0]6
    for i in hand:
        print i
    print pair_card
    print type(pair_card)

上面的代码会识别出一对,但是我希望它能够返回5张最佳牌,这将是一对牌加上三张牌(根据扑克规则)。所以我的问题是如何让上述功能从任何7张卡中返回任何一对,以及其他三张最高牌?

所以在这种情况下,所需的输出是:

output = [
    Card(rank=<Ranks.four: 3>, suit=<Suits.spades: 1>),
    Card(rank=<Ranks.nine: 8>, suit=<Suits.clubs: 3>),
    Card(rank=<Ranks.ten: 9>, suit=<Suits.spades: 1>),
    Card(rank=<Ranks.jack: 10>, suit=<Suits.diamonds: 4>),
    Card(rank=<Ranks.four: 3>, suit=<Suits.diamonds: 4>),
    ]

这就是说,去掉2个俱乐部和6个心脏。

1 个答案:

答案 0 :(得分:2)

您的Rank枚举是否也是int的子类?

如果是这样,只需订购旧卡并取最后三张。

如果没有,请添加订购:

def __lt__(self, other):
    if not isinstance(other, Rank):  # or self.__class__ instead of Rank
        return NotImplemented
    return self.value < other.value