18/19 Debugging 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)
print ship_row
print ship_col

turn = 0
for turn in range(4):
    guess_row = int(raw_input("Guess Row: "))
    guess_col = int(raw_input("Guess Col: "))

    if guess_row == ship_row and guess_col == ship_col:
      print "Congratulations! You sunk my battleship!"
      if (guess_row < 0 or guess_row > 4) or (guess_col < 0 or guess_col > 4):
         print "Oops, that's not even in the ocean."
      elif(board[guess_row][guess_col] == "X"):
        print "You guessed that one already."
         print "You missed my battleship!"
    if turn == 3:
            print "Game Over"
      board[guess_row][guess_col] = "X"

      print (turn + 1)

When i do a guess that is not on the board i get the message correctly saying it is not in the ocean, but it then gives me a traceback saying the index is not in range. im guessing because it is trying to put the X somewhere that isnt on the board, but i cant figure out how to stop it trying to put an X only for this condition


this else clause:

         print "You missed my battleship!"

should update the board, given here you have done all verification needed (on the board and not guessed before)


Thanks, i moved board[guess_row][guess_col] = “X” and indented it so it was inside that else cause and it works i think


Do you also understand why it works?


becuase that was the only condition that needed to actually amend to board? before all of them were trying too?


no, your original code has a problem, that a board update could be reached, even when shot wasn’t on the board, and that shouldn’t happen


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