14/19 IndexError: string index out of range


#1
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:"))
  
board[guess_row]="X"
board[guess_col]="X"
print_board(board)

print ship_row
print ship_col

# Write your code below!
if guess_row==ship_row and guess_col==ship_col:
    print "Congratulations! You sank my battleship!"
else:
    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!"

I don't understand whats wrong and I believe there is something else wrong after I fix line 39.
Appreciate if anyone could help.
Thanks!


#2

Use print statements to find out what happens. Print out the length and the index used. Keep in mind that the first index is 0


#3

I fixed it after changing it to

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

#4

Hi, @webwhiz88928 ,

What is the purpose of these two lines?

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

Did you intend this instead?

board[guess_row][guess_col] = "X"

#5

Hello, I have ran your code and I got this.

Well your mistake is that you wrote:
board[guess_row]="X"
board[guess_col]="X"

Which is the reason that the board is:

O O O O O
O O O O O
X
X
O O O O O (on my numbers)

This gets rid of the O's in these rows where the "X" should go in:

O O O O O
O O O O O
O O O X O
O O O O O
O O O O O
So elif statement because it says:

board[guess_row][guess_col] =="X" t (board[2][3]=="X")

Thinks that X should be in this position where doesn't exists. So thats why you have this error. Hope this helps! :smile:


#6

thank you so much!!! :stuck_out_tongue:


#7

thank you so much for your detailed answer!! thats exactly the problem. <3


#8

Thats alright! :smile: