Play it, Sam! Should this be happening?


#1



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


There are no error messages.


Should the code stop and allow the player to take another guess? Because as is, my code just goes right through all four turns using the first guess. Should this happen?


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!"
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", dturn + 1
        print_board(board)


#2

Your code isn't in a while loop or anything like that, so when you reach the end you're simply going to print the board 4 times and add 1 to dturn each time, not actually doing anything in terms of the game.

I would wrap the code in a while loop with the condition checking to see if dturn is less than 4, then add 1 at the end of the loop. The code will keep running until the variable dturn is equal to 4.


#3

I don't really understand how while loops work, and in any case I would prefer to stick with the programme, because I must be able to complete it by the examples demonstrated, otherwise they wouldn't be organised that way.


#4

Sorry, misunderstood!

Ok, so basically your for loop is in the wrong place. All of the logic that goes into guessing the position of the ship should be in that for loop. Everything under the comment that says:

# Everything from here on should go in your for loop!
# Be sure to indent four spaces!

Your code should really look like this underneath those comments (wrapped in the for loop):

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", dturn + 1
            print_board(board)

#5

@toplearner,

I saw where you put the code and that made sense, but the lesson seemed to not provide any direction on that. I am not clear on how to create the print statement or where to place that code. Also, I am able to enter 4 guesses, but only 1 "X" appears on the printed board after the guesses are submitted.


#6

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