From b54c22a1b8cee3fc53d1473cb38ca46eb179b4c3 Mon Sep 17 00:00:00 2001 From: "lijun.S" Date: Tue, 4 Dec 2018 19:17:31 +0800 Subject: [PATCH] personal edit on 01-data-model --- 01-data-model/frenchdeck.py | 6 +++-- 01-data-model/frenchdeck_run.py | 44 +++++++++++++++++++++++++++++++++ 01-data-model/vector2d.py | 8 +++++- 01-data-model/vector2d_run.py | 16 ++++++++++++ 4 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 01-data-model/frenchdeck_run.py create mode 100644 01-data-model/vector2d_run.py diff --git a/01-data-model/frenchdeck.py b/01-data-model/frenchdeck.py index 47a0d05..4a84aad 100644 --- a/01-data-model/frenchdeck.py +++ b/01-data-model/frenchdeck.py @@ -2,13 +2,15 @@ Card = collections.namedtuple('Card', ['rank', 'suit']) + 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] + self._cards = [ + Card(rank, suit) for suit in self.suits for rank in self.ranks + ] def __len__(self): return len(self._cards) diff --git a/01-data-model/frenchdeck_run.py b/01-data-model/frenchdeck_run.py new file mode 100644 index 0000000..dd23ca7 --- /dev/null +++ b/01-data-model/frenchdeck_run.py @@ -0,0 +1,44 @@ +from random import choice +from frenchdeck import FrenchDeck, Card + +beer_card = Card('7', 'diamonds') +beer_card + +deck = FrenchDeck() +len(deck) + +deck[:3] + +deck[1::2] + +Card('Q', 'hearts') in deck + +Card('Z', 'clubs') in deck + +for card in deck: + print(card) + +for card in reversed(deck): + print(card) + +for n, card in enumerate(deck, 1): + print(n, card) + + +choice(deck) + + +suit_values = dict(spades=3, hearts=2, diamonds=1, clubs=0) + + +def spades_high(card): + rank_value = FrenchDeck.ranks.index(card.rank) + return rank_value * len(suit_values) + suit_values[card.suit] + + +spades_high(Card('2', 'clubs')) +spades_high(Card('A', 'spades')) + + +for card in sorted(deck, key=spades_high): + print(card) diff --git a/01-data-model/vector2d.py b/01-data-model/vector2d.py index 178f498..a2c45c3 100644 --- a/01-data-model/vector2d.py +++ b/01-data-model/vector2d.py @@ -1,7 +1,7 @@ from math import hypot -class Vector: +class Vector: def __init__(self, x=0, y=0): self.x = x self.y = y @@ -9,9 +9,15 @@ def __init__(self, x=0, y=0): def __repr__(self): return 'Vector(%r, %r)' % (self.x, self.y) + def __neg__(self): + return Vector(-self.x, -self.y) + def __abs__(self): return hypot(self.x, self.y) + def __lt__(self, other): + return (self.x > other.x) and (self.y > other.y) + def __bool__(self): return bool(abs(self)) diff --git a/01-data-model/vector2d_run.py b/01-data-model/vector2d_run.py new file mode 100644 index 0000000..c5afef6 --- /dev/null +++ b/01-data-model/vector2d_run.py @@ -0,0 +1,16 @@ +from vector2d import Vector + +v1 = Vector(2, 4) +v2 = Vector(1, 2) +print(v1 + v2) + +v = Vector(3, 4) +print(abs(v)) + +print(v * 2) + +print(v is True) + +print(-v) + +print(v1 < v2)