4.16: Data Structures and 2D Lists
- Page ID
mainBoard = getRandomizedBoard() revealedBoxes = generateRevealedBoxesData(False)
getRandomizedBoard() function returns a data structure that represents the state of the board. The
generateRevealedBoxesData() function returns a data structure that represents which boxes are covered, respectively. The return values of these functions are two dimensional (2D) lists, or lists of lists. A list of lists of lists of values would be a 3D list. Another word for two or more dimensional lists is a
If we have a list value stored in a variable named spam, we could access a value in that list with the square brackets, such as
spam to retrieve the third value in the list. If the value at
spam is itself a list, then we could use another set of square brackets to retrieve a value in that list. This would look like, for example,
spam, which would retrieve the fifth value in the list that is the third value in
spam. Using the this notation of lists of lists makes it easy to map a 2D board to a 2D list value. Since the
mainBoard variable will store icons in it, if we wanted to get the icon on the board at the position (4, 5) then we could just use the expression
mainBoard. Since the icons themselves are stored as two-item tuples with the shape and color, the complete data structure is a list of list of two-item tuples. Whew!
Here’s an small example. Say the board looked like this:
The corresponding data structure would be:
mainBoard = [[(DONUT, BLUE), (LINES, BLUE), (SQUARE, ORANGE)], [(SQUARE, GREEN), (DONUT, BLUE), (DIAMOND, YELLOW)], [(SQUARE, GREEN), (OVAL, YELLOW), (SQUARE, ORANGE)], [(DIAMOND, YELLOW), (LINES, BLUE), (OVAL, YELLOW)]]
(If your book is in black and white, you can see a color version of the above picture at http://invpy.com/memoryboard.) You’ll notice that
mainBoard[x][y] will correspond to the icon at the (x, y) coordinate on the board.
Meanwhile, the "revealed boxes" data structure is also a 2D list, except instead of two-item tuples like the board data structure, it has Boolean values:
True if the box at that x, y coordinate is revealed, and
False if it is covered up. Passing
False to the
generateRevealedBoxesData() function sets all of the Boolean values to
False. (This function is explained in detail later.)
These two data structures are used to keep track of the state of the game board.