Battleship, 17. A Real Win


#1

Hi, I am attempting to complete exercise 17 in 13: Battleship. I've made it this far with code included below and I'm attempting to insert the break where the instructions tell me to insert it. It seems that the indent on my break is incorrect. But I don't know where else that break would go. Please help. Thanks.

ERROR:
File "python", line 33
SyntaxError: 'break' outside loop


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:"))

if guess_row == ship_row and guess_col == ship_col:
    print "Congratulations! You sunk my battleship!"
    break
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!
for turn in range(4):
    print "Turn", turn + 1
print_board(board)
if turn == 3:
    print "Game Over"


#2

@mihayes ,

The break here is outside the loop ...

# 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:"))

if guess_row == ship_row and guess_col == ship_col:
    print "Congratulations! You sunk my battleship!"
    break

Farther down in the code is the loop header ...

for turn in range(4):

Note the comment, above, that indicates where the loop header should be located.


#3

There should be a loop for turns. As you can see, there is a comment in your code saying

# 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:"))

if guess_row == ship_row and guess_col == ship_col:
    print "Congratulations! You sunk my battleship!"
    break
else:
...

Which means you need to do a loop before guess_row and anything after it (and you'll have to indent those for them to be in the loop). Your break is in the correct spot. It's just that you don't even have loop to break from because you didn't create one for it.


#4

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.