Help with Lists & Functions project Battleship!

python

#1

https://www.codecademy.com/courses/learn-python/lessons/battleship/exercises/to-your-battle-stations?action=lesson_resume

I am trying to improve the game. When the user guesses coordinates that they have already guessed before, I want the turn counter to stay the same.

I tried putting turn -= 1 after the elif statement checking to see if the user had already made the guess. The turn counter still increments and eventually reaches game over, although it doesn’t trigger the “Game Over” text.

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

# Everything from here on should go in your for loop!
# Be sure to indent four spaces!
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!"
    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."
      turn -= 1
    else:
      print "You missed my battleship!"
      board[guess_row][guess_col] = "X"
      if turn == 3:
        print("Game Over")
    # Print (turn + 1) here
    print "Turn", turn
    turn += 1

    print_board(board)

https://www.codecademy.com/courses/learn-python/lessons/battleship/exercises/to-your-battle-stations?action=lesson_resume


#2

changes made to the loop iterator (turn) won’t stick, given the loop assign the next value from range list to the loop iterator. so doing turn -= 1 and turn +=1 has no effect

If you want to achieve this, use a while loop


#3

Then why does turn eventually reach 3 and cause game over?


#4

well, range() produces a list, when the loop is finished running over the list, the loop exits


#5

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