18. To Your battle Stations!


#1

Ok, everytime I run the code, If i were to guess the location of the ship wrong it prints this out:
O O O O O
O O O O O
O O O O O
O O O O O
O O O O O
Guess Row: 1
Guess Col: 2
You guessed that one already.
You guessed that one already.
You guessed that one already.
You guessed that one already.
Game Over
O O O O O
O O O O O
O O O O O
O O O O O
O O O O O
turn 4

What can I do to fix this?

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_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)

guess_row = int(raw_input("Guess Row: "))
guess_col = int(raw_input("Guess Col: "))

for turn in range(4):
  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 missed my battleship!"
  	else:
			print "You guessed that one already."
    	(board[guess_row][guess_col] == "X")
if turn == 3:
	 print "Game Over"

print_board(board)
print 'turn', turn + 1

#2

There are several problems with your code. For starters, the code that prompts the user for input is not inside the loop, so the user is only prompted once, and this input is then used multiple times by the loop. The user should have the opportunity to enter a new guess each iteration of the loop.

if the user then misses, we update the guessed spot with X. So this line of code:

elif board[guess_row][guess_col] == "X":

check if the user doesn’t guess the same coordinates again. Yet you print:

print "You missed my battleship!"

which isn’t the right message


#3

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