From 96a3420e37fe164063ffee310bd96c2e8168b4b2 Mon Sep 17 00:00:00 2001 From: Austin McKinley Date: Tue, 27 Sep 2016 12:02:05 -0700 Subject: [PATCH 1/4] adding restorable state to Deck objects --- deuces/deck.py | 36 +++++++++++++++++++++++------------- test/test_deck.py | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 13 deletions(-) create mode 100644 test/test_deck.py diff --git a/deuces/deck.py b/deuces/deck.py index 2b296d6..cff169c 100644 --- a/deuces/deck.py +++ b/deuces/deck.py @@ -1,30 +1,40 @@ -from random import shuffle +from random import shuffle, random from card import Card + class Deck: """ - Class representing a deck. The first time we create, we seed the static + Class representing a deck. The first time we create, we seed the static deck with the list of unique card integers. Each object instantiated simply - makes a copy of this object and shuffles it. + makes a copy of this object and shuffles it. + + The state of a deck is defined by the random float [0.0, 1.0) used to seed + the shuffle() operation, combined with the number of cards that have + already been drawn. """ _FULL_DECK = [] - def __init__(self): - self.shuffle() + def __init__(self, seed=None, num_drawn=0): + if not seed: + seed = random() + self.seed = seed + self.shuffle(seed) + + self.num_drawn = 0 + if num_drawn: + self.draw(num_drawn) - def shuffle(self): + def shuffle(self, seed): # and then shuffle self.cards = Deck.GetFullDeck() - shuffle(self.cards) + shuffle(self.cards, lambda: seed) def draw(self, n=1): + self.num_drawn += n if n == 1: return self.cards.pop(0) - cards = [] - for i in range(n): - cards.append(self.draw()) - return cards + return [self.cards.pop(0) for _ in range(n)] def __str__(self): return Card.print_pretty_cards(self.cards) @@ -36,7 +46,7 @@ def GetFullDeck(): # create the standard 52 card deck for rank in Card.STR_RANKS: - for suit,val in Card.CHAR_SUIT_TO_INT_SUIT.iteritems(): + for suit, val in Card.CHAR_SUIT_TO_INT_SUIT.iteritems(): Deck._FULL_DECK.append(Card.new(rank + suit)) - return list(Deck._FULL_DECK) \ No newline at end of file + return list(Deck._FULL_DECK) diff --git a/test/test_deck.py b/test/test_deck.py new file mode 100644 index 0000000..bc8255b --- /dev/null +++ b/test/test_deck.py @@ -0,0 +1,33 @@ +import unittest + +from deuces.deuces import Deck + + +class TestDeck(unittest.TestCase): + def test_shuffle(self): + d1 = Deck(seed=0.1) + d2 = Deck(seed=0.1) + + self.assertEquals(d1.draw(), d2.draw()) + self.assertEquals(1, d1.num_drawn) + self.assertEquals(1, d2.num_drawn) + + def test_predrawn(self): + d1 = Deck(seed=0.1) + d2 = Deck(seed=0.1, num_drawn=2) + self.assertEquals(0, d1.num_drawn) + self.assertEquals(2, d2.num_drawn) + + d1.draw() + d1.draw() + self.assertEquals(2, d1.num_drawn) + + self.assertEquals(d1.draw(), d2.draw()) + + def test_multi_draw(self): + d1 = Deck(seed=0.1) + d2 = Deck(seed=0.1) + + self.assertEquals(d1.draw(3), d2.draw(3)) + self.assertEquals(3, d1.num_drawn) + self.assertEquals(3, d2.num_drawn) From 3106d5c1c4f6204845139f39457f1eae703a7eae Mon Sep 17 00:00:00 2001 From: Austin McKinley Date: Thu, 25 May 2017 14:14:24 -0700 Subject: [PATCH 2/4] test --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ba6f80f..97ebd4e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ Deuces ======== - +blah blah A pure Python poker hand evaluation library [ 2 ❤ ] , [ 2 ♠ ] From f911cde7dd6ee72335c757e228cd8817b233492a Mon Sep 17 00:00:00 2001 From: Austin McKinley Date: Thu, 25 May 2017 14:18:20 -0700 Subject: [PATCH 3/4] test --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 97ebd4e..e604629 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,5 @@ Deuces ======== -blah blah A pure Python poker hand evaluation library [ 2 ❤ ] , [ 2 ♠ ] From 2f8501b7ca2b865fea337b85401e91fb8d462e1c Mon Sep 17 00:00:00 2001 From: Austin McKinley Date: Thu, 25 May 2017 14:21:03 -0700 Subject: [PATCH 4/4] test --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e604629..97ebd4e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ Deuces ======== +blah blah A pure Python poker hand evaluation library [ 2 ❤ ] , [ 2 ♠ ]