13. Not Again! (Error with already guessed spot)

#1

13. Not Again!

My code behaves normally and doesn't give any error message. However, I've noticed that the way I wrote it, in case the guessed spot isn't the same as the actual ship spot, the code thinks that the guess has already been done, therefore printing the message "You guessed that one already!".
I know my error but I don't know how to fix it. Can anybody plz help me and make a suggestion?
Thank you in advance!

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:"))

board[guess_row][guess_col] = "X"

print ship_row
print ship_col

if (guess_row == ship_row) and (guess_col == ship_col):
print "Congratulations! You sank my battleship"

else:

if (guess_row not in range(5)) and (guess_col not in range(5)):
print "Oops, that's not even in the ocean."

elif board[guess_row][guess_col] == "X":
print "You guessed that one already."

else:
print "You missed my battleship!"
print_board(board)

#2

In this line:

board[guess_row][guess_col] = "X"

you mark the spot as "X".

And later you check if there is an "X" in this spot to determine if this spot was already guessed.

That is the problem.

#3

The above line should be written with "You missed my battleship", before printing the board.

#4

Wow, that was so obvious. These little mistakes are so annoying.

Thank you so much for your help @factoradic @mtf

#5

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