15. Play It, Sam


#1

So, the code works, however when it comes to making your guess it goes into a loop where it asks for guesses endlessly. Help?

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!
guess_row = int(raw_input("Guess Row:"))
guess_col = int(raw_input("Guess 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 + 1) here!
    print "Turn", turn + 1
    print_board(board)

#2

Hi,

first of all, you should delete these lines, because it's double, you ask for the guesses in the for-loop already

Now, you have a for-loop and ask for the guesses 4 times, before checking if it hit the ship or not:

Indent everything under the guess_row and guess_col under the for-loop, to actually check after every guess, if it hit the ship or not and so on.

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!"
        break #to stop the loop if you hit the ship instead of guessing again
    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 "Turn", turn + 1
    print_board(board)

Hope it helped you :slightly_smiling:


#3

That loop break made all the difference, thank you! They don't get you to add that feature in till lesson 17. However we like to test our code at the end of each lesson :smile:


#4
You should put print(turn + 1) in all if/elif/else statements:

if guess_row == ship_row and guess_col == ship_col:
            print "Parabens, voce afundou meu couracado!"
            break
        else:
            if (guess_row < 0 or guess_row > 4) or (guess_col < 0 or guess_col > 4):
                print "Oops, isso nao e nem mesmo no oceano."
                print (turn + 1)
            elif(board[guess_row][guess_col] == "X"):
                print "Voce ja tentou esse."
                print (turn + 1)
            else:
                print "Voce errou meu couracado!"
                board[guess_row][guess_col] = "X"
                print (turn + 1)
            # Exiba aqui (turn + 1)!
            print (turn + 1)
            print_board(board)

#5

yes that is right - all code must must be hard structured

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 + 1) here!
    print "Turn", (turn + 1)
    print_board(board)

it`s worked !
thank you !