1 import json 2 from collections import namedtuple 3 4 Card = namedtuple('Card', ['rank', 'suit']) # rank 牌面的大小 suit牌面的花色 5 6 7 class FranchDeck: 8 ranks = [str(n) for n in range(2, 11)] + list('JQKA') # 2-A 9 suits = ['红心', '方板', '梅花', '黑桃'] 10 11 def __init__(self): 12 self._cards = [Card(rank, suit) for rank in FranchDeck.ranks 13 for suit in FranchDeck.suits] 14 15 def __len__(self): 16 return len(self._cards) 17 18 def __getitem__(self, item): 19 return self._cards[item] 20 21 def __setitem__(self, key, value): 22 self._cards[key] = value 23 24 def __str__(self): 25 return json.dumps(self._cards, ensure_ascii=False) 26 27 28 deck = FranchDeck() 29 print(deck) 30 # [["2", "红心"], ["2", "方板"], ["2", "梅花"], ["2", "黑桃"], ["3", "红心"], 31 # ["3", "方板"], ["3", "梅花"], ["3", "黑桃"], ["4", "红心"], ["4", "方板"], 32 # ["4", "梅花"], ["4", "黑桃"], ["5", "红心"], ["5", "方板"], ["5", "梅花"], 33 # ["5", "黑桃"], ["6", "红心"], ["6", "方板"], ["6", "梅花"], ["6", "黑桃"], 34 # ["7", "红心"], ["7", "方板"], ["7", "梅花"], ["7", "黑桃"], ["8", "红心"], 35 # ["8", "方板"], ["8", "梅花"], ["8", "黑桃"], ["9", "红心"], ["9", "方板"], 36 # ["9", "梅花"], ["9", "黑桃"], ["10", "红心"], ["10", "方板"], ["10", "梅花"], 37 # ["10", "黑桃"], ["J", "红心"], ["J", "方板"], ["J", "梅花"], ["J", "黑桃"], 38 # ["Q", "红心"], ["Q", "方板"], ["Q", "梅花"], ["Q", "黑桃"], ["K", "红心"], 39 # ["K", "方板"], ["K", "梅花"], ["K", "黑桃"], ["A", "红心"], ["A", "方板"], 40 # ["A", "梅花"], ["A", "黑桃"]] 41 42 print(deck[10]) # 索引为10 的 Card(rank='4', suit='梅花') 43 from random import choice # choice 依赖于len 44 print(choice(deck)) 45 print(choice(deck)) 46 47 from random import shuffle # 洗牌,shuffle依赖于setitem 48 shuffle(deck) 49 print(deck[10])