Battleship: Test Run -- Something wrong with my code. IT doesn't print "guessed already" if i re-use correct coordinates twice


Here is my code:

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!"
    # setting list elements of guess_col and guess_row to X
    #board[guess_row][guess_col] = "X" 
    if guess_row not in range(5) or 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."
        print "You missed my battleship!"
        board[guess_row][guess_col] = "X"

Now i entered once 2,2 coordinates and i successfully sank the ship. But i was expecting "you guessed that one already" next time on entering the same coordinates... But it didn't print out! instead i got only, you missed my battleship. Can anyone please tell me what am i doing wrong?


Hi @terablaster36796,

As of the Test Run exercise, you will not yet see the message "You guessed that one already.".

Each time you run the game, the board is recreated and a location for the ship is chosen randomly. In later exercises, after you have placed the guessing part of the game into a loop, you will see that message when you repeat a previous guess. You will also add code that ends the game when you correctly guess the location.


But if i uncomment this block then i see "you guessed this one already" always! :frowning:


You should not uncomment those lines of code. You can remove them instead. That is not the correct place in your code to add an "X" to the board.

You have this inner else block ...

        print "You missed my battleship!"
        board[guess_row][guess_col] = "X"

That is the block that places an "X" on the board when the player misses the battleship.

The original code that you posted runs correctly for the current exercise. You will make improvements to the game in upcoming exercises.


Thankyou very much! :slight_smile: