import random def build_board_random(row, col): a = [[ 0 for i in range(col)] for j in range(row)] for i in range(row): for j in range(col): a[i][j]=random.randint(0,1) return a def build_board_user(row, col): a = [[ 0 for i in range(col)] for j in range(row)] print("enter", row*col, "elements") for i in range(row): for j in range(col): a[i][j]=int(input("")) return a def printBoard(board, row, col): for i in range(row): print(board[i]) def copyBoard(board, row, col): new_board=[[ 0 for i in range(col)] for j in range(row)] for i in range(row): for j in range(col): new_board[i][j]=board[i][j] return new_board #WRONG SOLUTION: new_board = board def neigh(board, row, col, i, j): #finds and returns the number #of live organisms around the cell position i, j if(i==0 and j==0): #upper left corner count=board[i][j+1]+board[i+1][j+1]+board[i+1][j] elif(i==0 and j==col-1): #upper right corner count=board[i][j-1]+board[i+1][j-1]+board[i+1][j] elif(i==row-1 and j==0): #lower left corner count=board[i-1][j]+board[i-1][j+1]+board[i][j+1] elif(i==row-1 and j == col-1): #lower right corner count=board[i-1][j-1]+board[i-1][j]+board[i][j-1] elif(i == 0): #first row except corners count=board[i][j-1]+board[i][j+1]+board[i+1][j-1] count=count+board[i+1][j]+board[i+1][j+1] elif(i==row-1): #last row except corners count=board[i-1][j-1]+board[i-1][j]+board[i-1][j+1] count=count+board[i][j-1]+board[i][j+1] elif(j==0): #first column except corners count=board[i-1][j]+board[i-1][j+1]+board[i][j+1] count=count+board[i+1][j+1]+board[i+1][j] elif(j==col-1): #last column except corners count=board[i-1][j-1]+board[i-1][j]+board[i][j-1] count=count+board[i+1][j-1]+board[i+1][j] else: #middle location has all 8 neighbours count=board[i-1][j-1]+board[i-1][j]+board[i-1][j+1] count=count+board[i][j-1]+board[i][j+1] count=count+board[i+1][j-1]+board[i+1][j]+board[i+1][j+1] return count def all_neigh(board, row, col): #this function creates a 2-d list, with each #element equals to the number of live organisms of 2-d list scores. The #function returns a new list. neigh_list=[[ 0 for i in range(col)] for j in range(row)] for i in range(row): for j in range(col): neigh_list[i][j]=neigh(board, row, col, i, j) return neigh_list def make_new_board(oldBoard, row, col): new_board=[[ 0 for i in range(col)] for j in range(row)] neigh_list=all_neigh(oldBoard, row, col) # print("neigh_list") # printBoard(neigh_list, row, col) # print() for i in range(row): for j in range(col): if(oldBoard[i][j]==1 and neigh_list[i][j]<=1): new_board[i][j]=0 elif(oldBoard[i][j]==1 and (neigh_list[i][j]==3 or neigh_list[i][j]==2)): new_board[i][j]=1 elif(oldBoard[i][j]==0 and neigh_list[i][j]==3): new_board[i][j]=1 elif(oldBoard[i][j]==1 and neigh_list[i][j]>3): new_board[i][j]=0 else: new_board[i][j]=oldBoard[i][j] return new_board def play_game(board, row, col, max_time): for i in range(max_time): print("Board at Time" , i) printBoard(board, row, col) print() neigh_list=all_neigh(board,row, col) print("Neighbours at time", i) printBoard(neigh_list, row, col) print() new_board=make_new_board(board, row, col) board=copyBoard(new_board, row, col) def main(): board=build_board_random(4,5) # board=build_board_user(4,5) max_time=int(input("enter number of iterations ")) play_game(board, 4,5, max_time) main()