Bug Report


#1



This bug report is about the Bad Aim exercise from Battleship! (Python).
The problem is that it will consider the code correct while it isn't.
If you run the code above in the exercise you will pass but it will always show that you shoot out of the board ("Oops that's not even in the ocean.") even if you shoot in the board. I don't know what happens if you hit the ship.

When I ran the code for the first time and the "Oops" message popped I was expecting some kind of error like "The shot you took was inside the board but the code is showing the incorrect message. Please take a better look at 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

# Write your code below!
if guess_row == ship_row and guess_col == ship_col:
    print "Congratulations! You sank my battleship!"
else:
    if guess_row != range(5) or guess_col != range(5):
        print "Oops, that's not even in the ocean."
    else:
        print "You missed my battleship!"
        board[guess_row][guess_col] = "X"
        print_board(board)


#2

I found your problem:

if guess_row != range(5) or guess_col != range(5)

This bit is causing problems with the message that should print if the shot is out of range. When that section of code is replaced with:

guess_row < 0 or guess_row > 4 or guess_col < 0 or guess_col > 4:

the code works perfectly.


#3

Thanks! I was also suspecting that line could be it, but i think the problem still stands where the code is wrong but you still pass the exercise. It may not be very serious but it may confuse some users into using the "!=" in situations where "not in" is the correct term to use.