常用Python的内建模块(collections)、魔术方法(__getitem__ 与 __len__ )构建纸牌
-
常用内建模块 collections、base64、struct、hashlib、itertools、XML、HTMLParser
collections集合类:namedtuple、deque、defaultdict、OrdereDict、Counter
namedtuple是一个函数,创建一个自定义tuple对象,并且规定tuple元素的个数,并且可以用属性,而不是索引来引用tuple的某个元素
import collections Card = collections.namedtuple('Card',['rank','suit'])
根据Card 写出4种花色、13个数,一共52张纸牌----FrenchDeck类
class FrenchDeck: ranks = [str() for n in range(2,11)] + list('JQKA') suits = 'spades diamods clubs hearts'.split() 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]
__init__为构造函数,在实例化对象后,对象中_cards将有52张纸牌,并且是元组类型的
__len__为长度魔法方法,在实例化对象后,实列化出的对象可计数或者计算长度
__getitem__为迭代魔法方法,在实列化对象后,实例化出的对象可迭代
# 实列化对象 deck deck = FrenchDeck() # 对象deck可计数 print(len(deck)) # 对象deck可迭代 for card in deck: print(card) # 对象deck可反迭代 for card in reversed(deck): print(card)
按照常规将纸牌排序,2最小、A最大、黑桃最大、红桃次之、方块再次、梅花最小
# 字典suit_values表示花色的大小 suit_values = dict(spades=3, hearts=2, diamods=1, clubs=0) def spades_high(card): rank_value = FrenchDeck.ranks.index(card.rank) return rank_value * len(suit_values) + suit_values[card.suit] for card in sorted(deck,key=spades_high): print(card)
2. 魔法方法(使用原则)