Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 42027ae

Browse files
committed
data model
1 parent 01fd5fe commit 42027ae

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

‎01-data-model/frenchdeck.py‎

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import collections
2+
from random import choice
3+
4+
5+
Card = collections.namedtuple('Card', ['rank', 'suit'])
6+
7+
8+
class FrenchDeck:
9+
ranks = [str(n) for n in range(2, 11)] + list('JQKA')
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')
24+
print(beer_card)
25+
26+
deck = FrenchDeck()
27+
print(len(deck))
28+
print(deck[0])
29+
print(deck[-1])
30+
31+
print(choice(deck))
32+
print(deck[:3])
33+
print(deck[12::13])
34+
35+
for card in deck:
36+
print(card)
37+
38+
for card in reversed(deck):
39+
print(card)
40+
41+
assert Card('Q', 'hearts') in deck
42+
43+
44+
suit_values = dict(spades=3, hearts=2, diamonds=1, clubs=0)
45+
46+
47+
def spades_high(card):
48+
rank_value = FrenchDeck.ranks.index(card.rank)
49+
return rank_value * len(suit_values) + suit_values[card.suit]
50+
51+
52+
for card in sorted(deck, key=spades_high):
53+
print(card)

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /