PLAY IT SAM Bug Question


#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)
print ship_row
print ship_col

# Everything from here on should go in your 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 ",turn + 1 
            print_board(board)

This code works just fine however as i was running it in IDLE and i guessed the location if the ship on my second guess and i was given the congratulations statement, but then i was prompted to continue to make guesses until i reached 4. that is a logic problem. how would i place a while this is true do this but when false do this instead into my code to end the game on a correct guess?


#2

while CONDITION:
    do stuff

# now it's false, because the loop has ended
do other stuff

#3

By my question i obviously know what a while loop is and in principle how it is structured and what is is supposed to do. I was asking for help as to what form it should take in the code as it stands at this point. So...having clarified the issue at hand can you offer any real and meaningful insight. say like a while loop that will end the program? Or maybe a suggestion with substance that will lead to the right answer?


#4

Print turn should be under for loop ...this works..no need of while..I think..

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+1)

#5

i tryed your code and that doesn't change any conditions. It will still ask for input after you sink the ship. Thank you the the suggestion though it was wroth a try.


#6

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