12. Bad Aim (list index out of range)


I'm stuck at the 12th part of Battleship! and I can't figure out what's wrong.

The code works correctly for guesses inside the range of the board, but if the guesses are outside, it prints the "Oops, that's not even in the ocean." message then prints the error "Traceback (most recent call last):
File "python", line 36, in
IndexError: list index out of range"

(line 36 is ' board[guess_row - 1][guess_col - 1] = "X" '

from random import randint

board = []

for x in range(0, 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:"))

print ship_row
print ship_col

if guess_row == ship_row and guess_col == ship_col:
    print "Congratulations! You sank my battleship!"
    if guess_row not in range(5) or guess_col not in range(5):
        print "Oops, that's not even in the ocean."
        print "You missed my battleship!"
board[guess_row - 1][guess_col - 1] = "X"


that is because this line:

board[guess_row - 1][guess_col - 1] = "X"

should be indented in such a way that its inside else which also prints you missed my battle ship

Otherwise, you can still access the list with faulty indexes


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