12. Bad Aim [Code is apparently super fickle]



Sometimes I will put it my guess for row and my guess for col and it runs the code, other times it gets stuck on line 33 which is this line: board [guess_row][guess_col] = 'X'

and yes, I passed exercise 12 where this line ran just fine, but now, with no changes to it, it's not running correctly anymore.

It says my list index is out of range. Not sure how to make sense of that.

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

# Write your code below!
if guess_row == ship_row and guess_col == ship_col:
    print "Congratulations! You sank my battleship!" 
    print "You missed my battleship!"
    board [guess_row][guess_col] = 'X'
    print 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."
    print "You missed my battleship!"


It seems I can guess any guesses for row and column <=4. If I guess a row or column of 5 or greater, I get the error: "Indexerror: List index out of range."

Has something to do with my lists but this shouldn't be the case, as any guess of 6 or higher should return the message "Oops, that's not even in the ocean." Help!


And what's the highest index of a size 5 list?


4, but that doesn't explain why it wasn't printing the "oops" part.


What's the lowest integer that satisfies the condition for "oops that's not in the ocean"?

not in range(5)
5 is not in that range, so, it should print

But your code crashes before the condition is executed. If the code crashes before running to end then .. it doesn't run to end and something will have been skipped.


except it isnt.......................................if i guess 4 and then 4, it still doesnt give me the right "oops" part.


4, 4 is in the ocean though, so it shouldn't tell you it's not


exactly so...how to fix it?


fix what


Nevermind. I fixed it yesterday on my own anyways. Now i'm stuck on part 16.


If you're talking about the crash, then read the error message and move/remove/fix the line that is crashing.

if hit
elif outside
else miss