美文网首页
扑克发牌

扑克发牌

作者: wshsdm | 来源:发表于2019-05-04 21:04 被阅读0次

    两个下划线结尾(例如__getitem__)。比如obj[key]的背后就是__getitem__方法,为了求得my_collection[key]的值,解释器实际上会调用my_collection.__getitem__(key),双下划线这种特殊方法也叫双下方法(dunder method)
    import collections

    from random import choice

    Card=collections.namedtuple('Card',['rank','suit'])

    class FrenchDeck:

        ranks=[str(n) for n in range(2,11)] +list('JQKA') #扑克的大小范围

        print(ranks)

        suits='spades diamods clubs hearts'.split()  # 黑桃,钻石,方块,红心

        print(suits)

        def __init__(self):

            self._cards=[Card(rank,suit) for suit in self.suits

                                        for rank in self.ranks]

        def __len__(self):

            return len(self._cards)

        def __getitem__(self, position):

            return self._cards[position]

        beer_card=Card('7','diamonds')  #实例一个扑克点

        print(beer_card)

    deck= FrenchDeck()  #创一个扑克对象deck

    print(len(deck))    #打印总共有多少张扑克

    print(deck[0])    #打印第一张牌 黑桃2

    print(deck[-1])    #打印最后一张牌 红心A

    print(choice(deck))  #随机抽取一张牌

    print(deck[:3])    #查看最上面三张  黑桃 2 ,3, 4

    print(deck[12::13]) #抽取索引为12的那张牌,然后每隔13张在抽取一张 正好是4个A

    # 实现了 __getitem__方法,这一摞牌变成了可迭代对象

    for card in deck:

        print(card)

    #反向迭代

    for card in reversed(deck):

        print(card)

    #判断某张牌实例是否存在这副牌中

    print(Card('Q','hearts') in deck)  #True

    print(Card('7','beasts') in deck)  #False

    #  比较扑克牌的大小2 最小、A 最大;同时还要加

    #  上对花色的判定,黑桃最大、红桃次之、方块再次、梅花最小。

    # 下面就是按照这个规则来给扑克牌排序的函数,梅花 2 的大小是 0,黑桃 A 是 51:

    suit_values=dict(spades=3,hearts=2,diamods=1,clubs=0)

    def spades_high(card):

        # 获取扑克的点数

        rank_value = FrenchDeck.ranks.index(card.rank)

        # 根据传入的牌的实例返回扑克0-51 之间的一个索引  例 黑桃A:12*4+3=51

        return rank_value * len(suit_values) + suit_values[card.suit]

    # 通过上面定义的函数对这幅牌进行 升序排序

    for card in sorted(deck, key=spades_high):

            print(card)

    相关文章

      网友评论

          本文标题:扑克发牌

          本文链接:https://www.haomeiwen.com/subject/yhifoqtx.html