# Author: James Tam # Version: June 4, 2022 import random COLUMN_NUMBERING = " 0 1 2 3 4 5 6 7 8 9" ''' New learning objective: two parallel lists (state of one affects the other). ''' # CONSTANTS SIZE = 10 EMPTY = " " ERROR = "!" MONEY = "$" ''' @ display @ parameters: two references to a pair of lists of 2D character @ return: nothing ''' def display(list1,list2): r = -1 c = -1 HORIZONTAL_GRID = " -" * SIZE r = 0 #For each list: Number each column print("%s\t%s" %(COLUMN_NUMBERING,COLUMN_NUMBERING)) while (r < SIZE): c = 0 #For each list: print a line of dashes before each row print("%s\t%s" %(HORIZONTAL_GRID,HORIZONTAL_GRID)) while (c < SIZE): #For list1: print a vertical bar before each element print("|%s" %(list1[r][c]), end="") c = c + 1 c = 0 #Printed complete row of list 1, add final vertical bar print("|", end = "") #Finished printing a row of list1, add a tab separator before #printing out the corresponding row of list2 print("\t", end="") while (c < SIZE): #For list1: print a vertical bar before each element print("|%s" %(list2[r][c]), end="") c = c + 1 #Printed complete row of list 2, add final vertical bar, move to next line print("|") r = r + 1 print("%s\t%s" %(HORIZONTAL_GRID,HORIZONTAL_GRID)) ''' @ generateElemement @ a random number argument (precondition 1<=number<=100) @ returns a string of length one (an element to populate world ''' def generateElement(randomNumber): element = ERROR if ((randomNumber >= 1) and (randomNumber <= 75)): element = EMPTY elif ((randomNumber >= 75) and (randomNumber <= 100)): element = MONEY else: element = ERROR return(element) ''' @ initialize() @ no parameters @ returns a fully initialized randomly generated world ''' def initialize(): world = [] r = -1 c = -1 randomNumber = -1 newElement = ERROR for r in range (0,SIZE,1): tempRow = [] world.append(tempRow) # Add in new empty row for c in range (0,SIZE,1): randomNumber = random.randrange(1,101) element = generateElement(randomNumber) tempRow.append(element) # Add new element to row end return(world) ''' @ parallelState() @ Parameter: a reference to a 2D list of char @ returns a 2D list @ Learning: Implementing two parallel lists. How to have one list's state @ can affect another list. Creates the elements of the 2nd parallel list as @ state is paralleled. ''' def parallelState(list1): r = -1 c = -1 list2 = [] r = 0 while (r < SIZE): c = 0 list2.append([]) while (c < SIZE): #Creates the list element as the state is paralelled. if (list1[r][c] == EMPTY): list2[r].append(0) elif (list1[r][c] == MONEY): list2[r].append(1) c = c + 1 r = r + 1 return(list2) # MAIN EXECUTION POINT def start(): list1 = [] list2 = [] list1 = initialize() list2 = parallelState(list1) display(list1,list2) start()