Advertisement
Guest User

tits

a guest
Sep 27th, 2013
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.16 KB | None | 0 0
  1. import unittest
  2. import random
  3. import itertools
  4.  
  5. class Deck:
  6.  
  7.     def __init__(self):
  8.         self.deck = self.build()
  9.  
  10.     def build(self):
  11.         deck = []
  12.         for x in range(2,15):
  13.             for y in ('c', 'd', 'h', 's'):
  14.                 if x == 10:
  15.                     z = 'T'
  16.                 elif x == 11:
  17.                     z = 'J'
  18.                 elif x == 12:
  19.                     z = 'Q'
  20.                 elif x == 13:
  21.                     z = 'K'
  22.                 elif x == 14:
  23.                     z = 'A'
  24.                 else: z = str(x)
  25.                 deck.append([z+y,x,y])
  26.         return deck
  27.  
  28. class Dealer:
  29.     deck = Deck().deck
  30.  #   def __init__(self):
  31. #        self.deck = Deck()
  32.     def shuffle(self):
  33.        random.shuffle(self.deck)
  34.  
  35.     def dealflop(self):
  36.         for x in range(3):
  37.             self.board.append(self.deck.pop())
  38.  
  39.     def dealin(self, player):
  40.         self.players.append(player)
  41.  
  42.     def deal(self):
  43.         for player in self.players:
  44.             player.hand.append(self.deck.pop())
  45.             player.hand.append(self.deck.pop())
  46.  
  47.     def who(self):
  48.         for player in self.players:
  49.             print player.name
  50.             print player
  51.             player.hand.append(self.deck.pop())
  52.             print player.hand
  53.          #   player.hand.append(random.randint(2,200)
  54.             #print player.hand
  55.  
  56. #cards is an a list of 2 cards
  57.     def evalpair(self, cards, board):
  58.         sevencards = [x[1] for x in board]
  59.         for card in cards:
  60.             sevencards.append(card[1])
  61. #        print 'sevencards:'
  62. #        print sevencards
  63.         uniques = set(sevencards)
  64.         paircount = {}
  65.         for x in list(uniques):
  66.             paircount[x] = sevencards.count(x)
  67. #        print uniques
  68. #        print paircount
  69.         high = [k for k, v in paircount.iteritems() if v == 1]
  70.         pair = [k for k, v in paircount.iteritems() if v == 2]
  71.         trips = [k for k, v in paircount.iteritems() if v == 3]
  72.         quads = [k for k, v in paircount.iteritems() if v == 4]
  73.         if len(pair) == 3:
  74.             pair.sort(reverse=True)
  75.             high.append(pair[2])
  76.             pair = pair[:2]
  77.         print 'pair array'
  78.         print pair
  79.         return [high, pair, trips, quads]            
  80.  
  81. #range takes list of tags and returns list of hands of full cards
  82.     def range(self, cards):
  83.         rangedeck = [x for x in self.deck if x[0] in cards]
  84.         return rangedeck
  85.  
  86. #takes list of list of tags and returns list of list of full cards
  87.     def rangehands(self, handlist):
  88.         hands = []
  89.         for hand in handlist:
  90.             hands.append(self.range(hand))
  91.         return hands
  92.  
  93. #cardremoval builds deck without certain cards, cards can be array or array of arrays
  94.     def cardremoval(self, cards):
  95.         if type(cards[0]) == list:
  96.             cards = itertools.chain(*cards)
  97.             cards = list(cards)
  98.         print 'im a flatcard list'
  99.         print cards
  100.         newdeck = [x for x in self.deck if x[0] not in cards]
  101.         return newdeck  
  102.  
  103. #hands is an array of two card tags, first convert to array of full card lists then eval
  104. #board is a list of tags
  105.     def flopzilla(self, hands, board):
  106.         results = []
  107.         hands = self.rangehands(hands)
  108.         print "fullhands"
  109.         print hands
  110.         board = self.range(board)
  111.         print board
  112.         print 'board'
  113.         for hand in hands:
  114.             x = self.evalpair(hand, board)
  115.             results.append(x[1])
  116. #        dead = [x[0] for x in board]
  117. #        for card in cards:
  118. #            dead.append(card[0])
  119. #            dead.append(card[1])
  120. #        newdeck = self.cardremoval(dead)
  121.         return results
  122.  
  123.     def allcards(self):
  124.         for x in self.deck:
  125.             print x
  126.  
  127. class Player:
  128.     def __init__(self, name="dud"):
  129.         self.name = name
  130.         self.hand = []
  131.  
  132.  
  133. class TestPoker(unittest.TestCase):
  134.  
  135.     def setUp(self):
  136.         self.dealer = Dealer()
  137.         self.jake = Player()
  138.         self.joe = Player()
  139.  
  140.     def test_count(self):
  141.         self.assertEqual(len(self.dealer.deck), 52)
  142.  
  143.     def test_shuffle(self):
  144.         self.deck = self.dealer.deck
  145.         self.val = [self.deck[0], self.deck[1]]
  146.         self.dealer.shuffle()
  147.         self.assertNotEqual(self.val, [self.deck[0], self.deck[1]])
  148.    
  149.     def test_dealflop(self):
  150.         self.dealer.dealflop()
  151.         self.assertEqual(len(self.dealer.board), 3)
  152.  
  153.     def test_deal(self):
  154.         self.dealer.dealin(self.jake)
  155.         self.dealer.dealin(self.joe)
  156.         self.dealer.deal()
  157.         self.assertEqual(len(self.dealer.deck), 48)  
  158.         self.assertEqual(len(self.jake.hand), 2)
  159.         self.assertEqual(len(self.joe.hand), 2)
  160.  
  161.     def test_dealin(self):
  162. #greg- teardown isnt run betweeen test_methods, its before whole class i think
  163.       #  self.dealer.dealin(self.jake)
  164.       #  self.dealer.dealin(self.joe)
  165.         self.assertEqual(len(self.dealer.players), 2)
  166.  
  167.     def test_range(self):
  168.         cards = ['As', '6d', '7c', '9h']
  169.         full = [['As', 14, 's'], ['6d', 6, 'd']]
  170.         newrange = self.dealer.range(cards)
  171. #        self.assertEqual(len(newrange), 2)
  172.  #       self.assertIn(full[0], newrange)
  173.   #      self.assertIn(full[1], newrange)
  174.         print newrange
  175. #
  176.     def test_CardRemoval(self):
  177.         remove = ['As', '6d']
  178.         x = self.dealer.cardremoval(remove)
  179.         self.assertNotIn(remove[0], x)
  180.         self.assertNotIn(remove[1], x)
  181.  
  182.     def tearDown(self):
  183.         self.dealer.players = []
  184.         self.dealer = None
  185.         self.jake = None
  186.         self.joe = None
  187.  
  188.  
  189. def db():
  190.     guy = Dealer()
  191.     guy.shuffle()
  192. #    joe = Player('joe')
  193. #    jake = Player('jake')
  194. #    guy.dealin(joe)
  195. #    guy.dealin(jake)
  196. #    guy.who()
  197. #    guy.deal()
  198. #    guy.dealflop()
  199. #    print 'player 1 ' , guy.players[0].hand    
  200. #    print 'player 2 ' , guy.players[1].hand    
  201. #    print ''
  202. #    print len(guy.players)    
  203. #    print guy.board
  204. ##    guy.evalpair(guy.players[0].hand)
  205. #    print guy.cardremoval(['As', '5c', '7s', 'Jh', '8c', '7c'])
  206. #    print guy.range([['As', '5c'], ['7s', 'Jh'], ['8c', '7c']])
  207. #    print 'above is range output'
  208. #    print guy.allcards()
  209. #    print guy.cardremoval(['As', '5c', '6d'])
  210.     cards = [['Ks', '4c'], ['3d', '5h'], ['8c', '5s']]
  211. #    cards = ['3d', '5s']
  212.     board = ['Ks', '3s', '5c']
  213. #    cards = guy.rangehands(cards)
  214.     print cards
  215. #    board = guy.range(board)
  216.     print board
  217. #    print "above is range"
  218.     print "flopzilla"
  219. #    moard = guy.rangehands(board)
  220. #    dards = guy.range(cards)
  221. #    print moard
  222. #    print dards
  223. #    print 'evalpair work?'
  224.     result = guy.flopzilla(cards,board)
  225.     pairs = []
  226.     for x in result:
  227.         if x != []:
  228.             pairs.append(x)
  229.     print 'pairs'
  230.     pairnum = float(len(pairs))
  231.     print 'range'
  232.     cardnum =  float(len(cards))
  233.     val = (pairnum/cardnum)
  234.     print val
  235.  
  236. if __name__ == '__main__':
  237. #    unittest.main()
  238.     db()
  239.  
  240.  
  241.  
  242. def finder(x):
  243.     length = len(x)
  244.     for i in range(length-2):
  245.         if x[i:i+3] == [1, 1, 1]:
  246.                print "found at ", i
  247.  
  248. #i think i wrote this to find straights but stopped
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement