14. Test Run


#1

So I tested two numbers that were out of range, but instead of the below defined error message printing, I got this:

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

Can anyone help me figure out why that is? Thank you in advance.

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)

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

print ship_row
print ship_col

if guess_row == ship_row and guess_col == ship_col:
    print "Congratulations! You sank my battleship!"
else:
    print "You missed my battleship!"
    board[guess_row][guess_col] = "X"
    print_board(board)
    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."
    else:
        print "You missed my battleship!"

#2

Because you're calling board[guess_row][guess_col] = "X" before your if statement that checks to see if the input is within the range of the array. You also have an extra "You missed my battleship!" You don't need to print that unless you are in range, and you didn't guess the right number.

if guess_row == ship_row and guess_col == ship_col:
    print "Congratulations! You sank my battleship!"
else:
    if guess_row not in range(0,5) or guess_col not in range(0,5):
        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_board(board)

#3

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