Works but doesn't give me another turn if guess is incorrect


#1

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)

# 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!"
    
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"
    for turn in range(4):
        print "Turn", turn + 1
        break
    
print_board(board)

I'm guessing there's something wrong with the for loop? Please help.


#2

It looks like you forgot to add in the for loop. Starting at the comment #Everything from here on should go in your for loop! you should have all of the code wrapped up in a for turn in range(0, 4): loop. Also remember to add a break after the user guesses correctly (in the first if statement).


#3

Do you mean like this?

# 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
        break
    
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."
        break
    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_board(board)

#4

You're close, but now the for loop only prints turn - 1. You have to indent everything underneath it to include it in the loop. You want everything in the loop because you want all of that code to execute for all 4 turns, unless the guess is correct. If the guess is correct, you want the loop to break. To do this, move the break underneath the print "Congratulations! You sunk my battleship!". You only want to break the loop if the user guessed correctly.


#5

Awesome, I get it now. Thank you so much!


#6

No problem :grinning: happy coding!