Program seems to add "X" at random places in the grid


#1

I was under the assumption that the "X" was supposed to be added where the missed guess was, but it doesn't seem to be. When I run it, it passes and everything works, but the "X" replaces an "O" in a random row or column. Is this how the code is supposed to work? Is there any way to change it so that the "X" replaces the correct "O" based on the row and col inputs? My code is below:

from random import randint

board = []

for x in range(5):
    board.append(["O"] * 5)

def print_board(board):
    for row in board:
        print " ".join(row)

print "Let's play Battleship!"
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)
print ship_row
print ship_col

for turn in range(4):
    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 sunk my battleship!"
    else:
        if (guess_row < 0 or guess_row > 4) or (guess_col < 0 or guess_col > 4):
            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!"
            board[guess_row][guess_col] = "X"
    print "Turn", turn + 1
    print_board(board)

#2

Hey sebbirific,

Are you sure it's not working as expected?

When I run your code I get accurate results:

Guess Row: 1
Guess Col: 4
You missed my battleship!
Turn 1
O O O O O
O O O O X
O O O O O
O O O O O
O O O O O

The X below is in Row 1 and Column 4, just like I'd requested. I've run it a bunch of times and the plotting has been spot on. Don't forget the grid is 0 to 4.


#3

It's working now - I must have been tired. Thank you.