14. Test Run - index error, out of range


#1



https://www.codecademy.com/en/courses/python-beginner-en-4XuFm/1/5?curriculum_id=4f89dab3d788890003000096

Traceback (most recent call last):
File "python", line 28, in <module>
IndexError: list index out of range

Line 28 is elif board[guess_row][guess_col] == "X":.

It's not supposed to have that error, and instead just print "Oops, that's not even in the ocean." I'm pretty sure the problem is not the "Oops..." part, it's the first elif part that isn't being understood. Dunno what to do.

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)

print_board(board)

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

def random_col(board):
    return randint(0, len(board) - 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:"))

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

I already looked through this, but I am still highly confused.


#2

Can't see the problem right off, but would suggest change the order of the middle two elif'`s so the range is tested first.


#3

I have no idea why, but this worked. Thanks!


#4

It worked because the range was tested first, so that an out of range value is trapped before running into 'you guessed that already' which is dependent upon correct range values for the two indexes of board.