美文网首页Python
python-实现一堆有序的纸牌时的一些问题

python-实现一堆有序的纸牌时的一些问题

作者: DKider | 来源:发表于2019-04-16 20:17 被阅读4次

    我先给出源代码,大家看一下。

    import collections
    from random import choice
    
    Card = collections.namedtuple('Card', ['rank', 'suit'])
    
    
    class Deck:
        ranks = [str(n) for n in range(2, 11)] + list('JQKA')
        suit = '黑桃 红桃 方片 梅花'.split(' ')
    
        def __init__(self):
            self._card = [Card(rank, suit) for suit in self.suit for rank in self.ranks]
    
        def __len__(self):
            return len(self._card)
    
        def __getitem__(self, index):
            return self._card[index]
    
        def __str__(self):
            return str([str(x) for x in self._card])
    
    if __name__ == '__main__':
        card1 = Card('7', '红桃')
        print(card1)
        deck = Deck()
        print(deck)
        card_r = choice(deck)
        print(deck[:3])
        print(len(deck))
        print(deck[12::13])
        print(Card(rank='A', suit='方片') in deck)
    

    Deck是我们的纸牌类,一共52张。

    其中实现了len()、getitem()、str()方法。

    在我们实现getitem()后发现,Deck类自动有了切片的功能,而且,它还可以迭代。

    又因为迭代是隐性的,我们并没有实现contains,但是它却可以实现in运算,因为它是可迭代的。

    还有就是可以注意到:
    self._card = [Card(rank, suit) for suit in self.suit for rank in self.ranks]
    这一句使用的就是昨天讲的列表解析语法。不过使用了两个for循环。这也是支持的,相当于两层循环。这比用循环初始化列表,要快很多。

    相关文章

      网友评论

        本文标题:python-实现一堆有序的纸牌时的一些问题

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