我目前正在尝试在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个心脏。
答案 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