To your battle stations!


after going through my code and debugging it, i realised that if the guessed row or column were out of the range it doesnt let the player continue even though it displays "oops, thats not even in the ocean" instead it stops everything and displays:

Traceback (most recent call last):
File "python", line 40, in
IndexError: list index out of range

line 40 is: board[guess_row][guess_col] = "X"

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!"

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!
for turn in range(4):
    print "Turn", turn + 1
    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!"
        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."
            print "You missed my battleship!"
        board[guess_row][guess_col] = "X"

if turn ==3 :
    print "Game Over"


this line:

board[guess_row][guess_col] = "X"

is indented correctly, it should be in the else clause which also prints: you missed my battleship

by not doing this, updating the board with a X for a incorrect can still occur even though the shot is not on the board


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