Play it, Sam - to understand


#1



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


It doesn't. I'd like to understand.

Message is this:
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
0
0
Turn 1
Guess Row: 2
Guess Col: 2
Turn 2
Guess Row: 1
Guess Col: 3
Turn 3
Guess Row: 4
Guess Col: 4
Turn 4
Guess Row: 3
Guess Col: 2
You missed my battleship!
O O O O O
O O O O O
O O O O O
O O X O O
O O O O O
None


In the line before last, it says: Place code for turn + 1 here. To make it work I had to place it way before this line. In fact, right after the new for loop. Why is that instruction line at the wrong place?

Also, I have four guesses / turn to do. It print every single one out, but just one x in the ocean. Even though I tried four times, not a single shot but four shots. So, it misses three x's.


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"
    # Print (turn + 1) here!
    print_board(board)


#2

Hi @tetuo,

Regarding ...

    print "Turn",turn+1

... you wrote ...

Agreed. The instructions should be changed to specify that the number of the turn should be output at the beginning of the loop.

Much of your code is not included in the loop. You should increase the indentation of this line and all that follows it, so that it is made part of the loop ...

if guess_row == ship_row and guess_col == ship_col:

#3

Thanks. It works now.


#4