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中被迭代的值