Python

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

2019-04-16  本文已影响4人  DKider

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

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循环。这也是支持的,相当于两层循环。这比用循环初始化列表,要快很多。

上一篇 下一篇

猜你喜欢

热点阅读