12. Bad Aim. Passed it but not giving me "Oops" message only error


#1


Whenever I try to test the code for the message "Oops that's not even in the ocean" I get a red error code.

When I do enter a guess that is in bounds I get something like this which doesn't make much sense to me

O O O O O
O O O O O
O O O O O
O O O O O
O O O O O
Guess Row: 2
Guess Col: 3
2
1
O O O O O
O O O O O
O O O X O
O O O O O
O O O O O
You missed my battleship!
O O O O O
O O O O O
O O O X O
O O O O O
O O O O O
None

The X's don't seem to be in a place corresponding with the guess or the actual answer

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:
    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."
    else:
        print "You missed my battleship!"
        board[guess_row][guess_col] = "X"
        print_board(board)

#2

When you type in for example
Guess row: 3
Guess col: 3

And it prints both values in 4 and 4 it is because in python counting starts at zero not at 1.


#3

i also have this same problem. everytime i try to test an out of bounds colum or row it just shows me an error message saying:
Traceback (most recent call last):
File "python", line 32, in
IndexError: list index out of range


#4

the code should be like this:

else:
if 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)

remove the statement before the nested if in else statement, the tutorial didn't asked to do so but we want nested if statement to run when we go out of bounds and not this:

else:
board[guess_row][guess_col] = "X"
print_board(board)

to run as board has no position to set as "X" when we go out of bounds and it returns with error