Bad Aim - The code doesn't do its job?


#1



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


I have completed this exercise, however when I enter something off the board it sends the error message File "python", line 32, in
IndexError: list index out of range
instead of actually doing what my code tells it to do and print "Oops, that's not even in the ocean."
When I enter something on the board it lets me continue onto the next lesson.
Have I done something wrong with my code? And if I have why did it let me pass onto the next lesson?
Please help.

Here is my code:

Replace this line with your code. 
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."


#2

I would recommend having that last if statement (the one that prints "Oops, that's not even in the ocean.") as an elif statement of the whole thing (between the if and the else statements).


#3

That worked. Thank you :relaxed:


#4

I guess the instruction is wrong after all.
"1.Add a new if: statement that is nested under the else."
I think they should fix this


#5

nah, it's correct.


#6

Here is my code
from random import randint

board = []
for i in range(5):
board.append(['O', 'O', 'O', 'O', 'O'])

def print_board(boards):
for item in boards:
print(" ".join(item))

print_board(board)

def random_row(boards):
return randint(0, len(boards) - 1)

def random_col(boards):
return randint(0, len(boards[0]) - 1)

ship_row = random_row(board)
ship_col = random_col(board)
for Turn in range(4):
print("Turn %d"%(Turn+1))
guess_row = int(raw_input("Guess Row:\n"))
guess_col = int(raw_input("Guess Col:\n"))
print(ship_row+1, ship_col+1)

if guess_col-1 == ship_col and guess_row-1 == ship_row:
    print("Congratulations! You sank my battleship!")
    print("Game over!!!")
    break
elif guess_row-1 not in range(5) or guess_col-1 not in range(5):
    print("Oops, that's not even in the ocean.")
elif board[guess_row - 1][guess_col - 1] == "X":
    print("You guessed that one already.")
else:
    print("You missed my battleship!")
    board[guess_row-1][guess_col-1] = "X"
    print_board(board)
    if Turn+1 == 0:
        print("Game over!!!")

Code in lesson not break loop when you guess position of ship


#7

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