1 import collections 2 Card = collections.namedtuple('Card', ['rank', 'suit']) 3 #定义一个具名元组 第一个参数是元组的名字,第二个参数是一个字段名组成的列表 4 #Card._fields 获取字段名的列表 5 #Card._make(_data) 实例化一个具名元组 _data一个和fields长度相同的一个元组 6 #Card._asdict() 获得一个字典字段名 == 值 7 8 class FrenchDeck(object): 9 ranks = [str(n) for n in range(2, 11)] + list('JQKA') #获取所有牌列表2--A 10 suits = 'spades diamonds clubs hearts'.split() #获取花色列表 11 12 def __init__(self): 13 self._cards = [Card(rank, suit) for suit in self.suits 14 for rank in self.ranks] #获取组合列表 15 16 def __len__(self): 17 return len(self._cards) 18 19 def __getitem__(self, position): 20 return self._cards[position] 21 22 23 beer_card = Card('7', 'diamonds') #得到一个花色为diamonds,数值为7的牌 24 print(beer_card) 25 deck = FrenchDeck() 26 print(deck) #获取52张牌的集合 27 print(deck[0]) #打印第一张牌 28 suit_values = dict(spades=3, hearts=2, diamonds=1, clubs=0) 29 def spades_high(card): 30 rank_value = FrenchDeck.ranks.index(card.rank) #获取数值排序 31 return rank_value * len(suit_values) + suit_values[card.suit] #返回数值+花色的排序 32 33 for card in sorted(deck, key=spades_high): # 对卡牌做排序 然后循环 34 print(card) 35 36 37 38 # sorted方法: 39 sorted(deck,key=spades_high,reverse=True) 40 # deck可迭代对象 41 # reverse参数 排序规则为True是逆序 42 # key一个函数,函数的参数是deck中被迭代的值