Game Over - understand it?


#1



https://www.codecademy.com/courses/python-beginner-en-4XuFm/2/2?curriculum_id=4f89dab3d788890003000096


Again, I'd like to understand what happens here. It prints:

Let's play Battleship!
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
1
0
Turn 1
Guess Row: 2
Guess Col: 1
You missed my battleship!
O O O O O
O O O O O
O X O O O
O O O O O
O O O O O
Turn 2
Guess Row: 3
Guess Col: 3
You missed my battleship!
O O O O O
O O O O O
O X O O O
O O O X O
O O O O O
Turn 3
Guess Row: 4
Guess Col: 4
You missed my battleship!
O O O O O
O O O O O
O X O O O
O O O X O
O O O O X
Turn 4
Guess Row: 5
Guess Col: 5
Oops, that's not even in the ocean.
Game Over
O O O O O
O O O O O
O X O O O
O O O X O
O O O O X
None


That's four turns, even though I add an if to check if it has three turns and then print Game Over. Even though I have written
print ("Game Over") I also tried print "Game Over" with the same result.

Is it just the thing how Python counts or is something wrong with the code? It's says okay and I can go on, but I am not satisfied.


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

# Everything from here on should go in your for loop!
# Be sure to indent four spaces!
for turn in range(4):
    print "Turn",turn+1
    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"
        if turn == 3:
            print ("Game Over")
    # Print (turn + 1) here!
        print_board(board)


#2

Your if checks the value of the variable, turn. When it has the value, 3, that is actually the fourth turn, since the variable starts with the value 0. The game is designed, however, so that the output labels the turns as numbered with 1, 2, 3, and 4, because it is nicer for the player to think of the turns as numbered beginning with 1 instead of with 0.

Some users have also suggested that the rows and columns should be numbered beginning with 1 instead of with 0. That might also be nicer, and with some recoding, that could also be accomplished. However, it would be best to wait until the final exercise to attempt that.


#3

Ok, then. I have nothing to worry about. Great.. Thanks for clarifying.


#4