Hide... and seek!


This is the code:

from random import randint

board = []

for x in range(5):
  board.append(["O"] * 5)

def print_board(board):
  for row in board:
    print " ".join(row)

**def random_row(board):**
**  return randint(0, len(board) - 1)**

**def random_col(board):**
**  return randint(0, len(board[0]) - 1)**

ship_row = random_row(board)
ship_col = random_col(board)

guess_row = int(raw_input("Guess Row: "))
guess_col = int(raw_input("Guess Col: "))

So what I want to understand is why when we define the random_row function we type this

def random_row(board):
  return randint(0, len(board) - 1)

with len(board) - 1 without the square brackets and this

def random_col(board):
  return randint(0, len(board[0]) - 1)

with len(board[0]) - 1 with square brackets?

Because when we type list[index] is beacause we’re trying to have access to the element of that index, right?

So why do I want to access the element [0] of the board[] list?


Hi @paulo191,

board represents a rectangle consisting of rows and columns.

len(board) is the number of rows.

len(board[0]) is the number of elements within row 0, which is the number of columns. In actuality, all the rows actually have the same number of elements.

Since the Battleship! board is a special case of a rectangle, namely a square, the number of rows and columns turns out to be the same, and we could have used len(board) for both the number of rows and columns. However, if we modified the game to use a rectangular board that is not a square, we would need to use len(board[0]) to ensure that the number of columns was specified correctly, so we chose to do it that way here. The code is more robust this way, since such a modification of the dimensions of the board would be less likely to introduce a bug.

EDITED January 29, 2018 to add details to the explanation.


This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.