namedtuple库的使用
Named tuples assign meaning to each position in a tuple and allow for more readable, self-documenting code. They can be used wherever regular tuples are used, and they add the ability to access fields by name instead of position index.
import collections
from random import choice
card = collections.namedtuple('Card', ["rank", "suit"])
#定义一个类FrenchDeck
class FrenchDeck:
ranks = [str(n) for n in range(2, 11)] + list('JQKA')
suits = 'spades diamonds 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]
suit_values = dict(spades=3, hearts=2, diamonds=1, clubs=0)
def spades_high(card):
rank_values = FrenchDeck.ranks.index(card.rank)
return rank_values*len(suit_values) + suit_values[card.suit]
if __name__ == '__main__':
# beer_card = card('7', 'diamonds')
# print(beer_card)
deck = FrenchDeck()
print(len(deck))
print(choice(deck))
print(deck[12::13])
for card in deck:
print(card, end="\n")
for card in reversed(deck):
print(card, end="\n")
for card in sorted(deck, key=spades_high):
print(card)