Danger, Will Robinson! ; Aren't you subsetting a string?


#1


https://www.codecademy.com/en/courses/python-beginner-en-4XuFm/1/2?curriculum_id=4f89dab3d788890003000096#


After defining print_board(board), isn't board converted into a list? Because when we print board we see no square brackets. Tested the type on an external IDE and it gives me a string.
Which brings me to:
board[int(guess_row)][int(guess_col)] = "X"
How can you subset board with rows and columns if board is a string.


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

# Write your code below!
if guess_row == ship_row and guess_col == ship_col:
    print "Congratulations! You sank my battleship!"
else:
    print "You missed my battleship!"
    board[int(guess_row)][int(guess_col)] = "X"
    print print_board(board)


#2

your board is a list:

board = []

we use print_board function which will make the board look like a string but only to display the board nicely to the user, but the board stays a list


#3

Ok i realized my misunderstanding. Thanks for clearing that up

Another question then,
shouldn't it be
board[int(guess_row) -1][int(guess_col) -1] = "X"

since index starts at 0?


#4

the exercise doesn't, but yes, it would be nice.

but then subtract one from when you prompt the user, so you if in range (which checks if shot is in the board) works correctly


#5

Ok thank you very much!


#6

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