fork download
  1. import string
  2.  
  3.  
  4. class Tile:
  5. """
  6. Class that allows for the creation of a tile. Initializes using an uppercase string of one letter,
  7. and an integer representing that letter's score.
  8. """
  9. def __init__(self, letter):
  10. #Initializes the tile class. Takes the letter as a string, and the dictionary of letter values as arguments.
  11. scrabble_letters = {"A": 1,
  12. "B": 3,
  13. "C": 3,
  14. "D": 2,
  15. "E": 1,
  16. "F": 4,
  17. "G": 2,
  18. "H": 4,
  19. "I": 1,
  20. "J": 8,
  21. "K": 5,
  22. "L": 1,
  23. "M": 3,
  24. "N": 1,
  25. "O": 1,
  26. "P": 3,
  27. "Q": 10,
  28. "R": 1,
  29. "S": 1,
  30. "T": 1,
  31. "U": 1,
  32. "V": 4,
  33. "W": 4,
  34. "X": 8,
  35. "Y": 4,
  36. "Z": 10}
  37. if len(letter) != 1:
  38. raise Exception("Must be only one character")
  39. if letter.isalpha():
  40. self.letter = letter.upper()
  41. else:
  42. raise Exception("This value must be a single letter")
  43. self.points = scrabble_letters[self.letter]
  44.  
  45.  
  46. def _letter(self):
  47. #Returns the tile's letter (string).
  48. return self.letter
  49.  
  50. def _points(self):
  51. #Returns the tile's score value.
  52. return self.points
  53.  
  54.  
  55.  
  56.  
  57. from random import shuffle
  58. import string
  59.  
  60.  
  61.  
  62.  
  63.  
  64. class TileBag:
  65. def __init__(self):
  66. self.tilebag = []
  67. self.fill_bag()
  68.  
  69. def full_bag(self, tile, count):
  70. for i in range(count):
  71. self.tilebag.append(Tile)
  72.  
  73. def fill_bag(self):
  74. self.full_bag(Tile("A"), 9)
  75. self.full_bag(Tile("B"), 3)
  76. self.full_bag(Tile("C"), 2)
  77. self.full_bag(Tile("D"), 4)
  78. self.full_bag(Tile("E"), 12)
  79. self.full_bag(Tile("F"), 2)
  80. self.full_bag(Tile("G"), 3)
  81. self.full_bag(Tile("H"), 2)
  82. self.full_bag(Tile("I"), 9)
  83. self.full_bag(Tile("J"), 1)
  84. self.full_bag(Tile("K"), 1)
  85. self.full_bag(Tile("L"), 4)
  86. self.full_bag(Tile("M"), 2)
  87. self.full_bag(Tile("N"), 6)
  88. self.full_bag(Tile("O"), 8)
  89. self.full_bag(Tile("P"), 2)
  90. self.full_bag(Tile("Q"), 1)
  91. self.full_bag(Tile("R"), 6)
  92. self.full_bag(Tile("S"), 4)
  93. self.full_bag(Tile("T"), 6)
  94. self.full_bag(Tile("U"), 4)
  95. self.full_bag(Tile("V"), 2)
  96. self.full_bag(Tile("W"), 2)
  97. self.full_bag(Tile("X"), 1)
  98. self.full_bag(Tile("Y"), 2)
  99. self.full_bag(Tile("Z"), 1)
  100.  
  101. def draw_tile(self):
  102. if len(self.tilebag) < 1:
  103. raise Exception("Cannot Draw From Empty Bag!")
  104. else:
  105. shuffle(self.tilebag)
  106. return self.tilebag.pop()
  107.  
  108. def is_empty(self):
  109. if (self.tilebag):
  110. return False
  111. else:
  112. return True
  113.  
  114. import unittest
  115. import string
  116.  
  117.  
  118. class TestTilePoints(unittest.TestCase):
  119. def setUp(self):
  120. a = Title("A")
  121. b = Title("b")
  122. c = Title("c")
  123. d = Title("d")
  124. e = Title("E")
  125. f = Title("f")
  126. g = Title("g")
  127. h = Title("h")
  128. i = Title("i")
  129. j = Title("j")
  130. k = Title("k")
  131. l = Title("l")
  132. m = Title("m")
  133. n = Title("n")
  134. o = Title("o")
  135. p = Title("p")
  136. q = Title("q")
  137. r = Title("r")
  138. s = Title("s")
  139. t = Title("T")
  140. u = Title("U")
  141. v = Title("v")
  142. w = Title("W")
  143. x = Title("x")
  144. y = Title("Y")
  145. z = Title("z")
  146.  
  147. def test_error_on_None(self):
  148. self.assertRaises( Exception, Tile(None))
  149.  
  150. def test_error_on_empty_string(self):
  151. self.assertRaises( Exception, Tile(""))
  152.  
  153. def test_letters(self):
  154. alphabets = string.ascii_lowercase
  155. for i in alphabets:
  156. self.assertEquals( Tile(i), Tile(i))
  157.  
  158. def test_error_on_non_letter(self):
  159. self.assertRaises( Exception, Tile(4))
  160.  
  161. def test_error_on_too_many_letters(self):
  162. self.assertRaises( Exception, Tile("WOAH"))
  163.  
  164. def test_one_point_tiles(self):
  165. self.assertEquals(1,a._points())
  166. self.assertEquals(1,e._points())
  167. self.assertEquals(1,i._points())
  168. self.assertEquals(1,o._points())
  169. self.assertEquals(1,n._points())
  170. self.assertEquals(1,r._points())
  171. self.assertEquals(1,t._points())
  172. self.assertEquals(1,l._points())
  173. self.assertEquals(1,s._points())
  174. self.assertEquals(1,u._points())
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
Success #stdin #stdout 0.04s 39120KB
stdin
Standard input is empty
stdout
Standard output is empty