"error: list index out of range". Even though I have taken care of it. Please help


#1



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


Oops, try again. Your code looks a bit off. Check the Hint if you need help! Your code threw the following error: list index out of range

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


Oops, that's not even in the ocean.


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[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

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


#2

Hi @arcsolver96905,

The problem is that you're performing this check too late ...

    if guess_row not in range(5) or guess_col not in range(5):

If the guess is not in the ocean, you shouldn't allow this to execute ...

    board[guess_row][guess_col] = "X"

#3

I have done the you suggested and I got the result right. I mean I did change the 'if:' into 'elif:' and put it before 'else:'

But the instructions shown :
01. Add a new if: statement that is nested under the else.

Doesn't that mean we need to add the 'if:' within the 'else:', which I did.
Is it a fault of the instructions text, or I understood in a different way.
Please help.


#4

Hi @arcsolver96905,

The instructions ask you to nest the blocks something like this ...

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

From your description of the changes that you made, it appears that you might now have something similar to the above.

However, provided that the logic is correct, there are other ways to write the code so that it performs correctly, even without its adhering strictly to the instructions. What is important here is for the code to avoid an attempt to place an "X" in a location within board that is out of bounds, and therefore at an invalid pair of indexes.


#5

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