Test Run


if row and col is in range of 5 game is wirking well and code let me go further but if i put row and col out of range numbers i get this

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

This is the code , can someone explain what i did wrong ? and why my elif statement does not work ?

from random import randint

board = []

for x in range(0, 5):
    board.append(["O"] * 5)

def print_board(board):
    for row in board:
        print " ".join(row)


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:"))

print ship_row
print ship_col

if guess_col == ship_col and guess_row == ship_row:
    print "Congratulations! You sank my battleship!"
    print ("You missed my battleship!")
    board[guess_row][guess_col] = 'X'
    if guess_row not in range(5) or guess_col not in range(5):
        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!")


Test the range before any other checks (after the win).


About range :
if i change this

if guess_row not in range(5) or guess_col not in range(5):

with this

if (guess_row < 0 or guess_row > 4) or (guess_col < 0 or guess_col > 4):

the result is the same
even with

 (if guess_row != range(0, len(board) - 1)) or (guess_col !=  range(0, len(board[0]) - 1)):

if numbers are in range you get passed , the problems appear when i put numbers out of range


The range test should come first, right after the win, then check if guessed already, and then the check if it is a miss.


The important parts are the last 8 lines.
With this code you check if the user input sth. out of range, if he does, he will get the output: "Oops, that's not even in the ocean.". End of story.
With your code you first set board[guess_row][guess_col] = 'X' and then check if the user input sth. out of range. This means your error will occur always if the user inputted sth. out of range. The solution is, like mtf already stated, you need to check if the input is out of range FIRST. Just wanted to explain it to you in other words. I am at the same exercise
, had the same problem, but mtf´s answer just could help after some minutes of thinking and testing.