14. Test Run - Accounting for blank or non-int inputs


Hi, all. What is the best way to account for any blank or non-int input (string, alphanumeric, etc.) for guess_row and guess_col?

This is the error message with any non-int input:

Traceback (most recent call last):
  File "python", line 22, in <module>
ValueError: invalid literal for int() with base 10: '1 1'

My current 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)


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!")
    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.")
        print ("You missed my battleship!")
        board[guess_row][guess_col] = "X"

Any help would be greatly appreciated!


Hi @arcwhiz60917 ,

This is line 22 ...

guess_row = int(raw_input("Guess Row:"))

The int built in function raises an error if you try to convert a value to an int, if that conversion cannot be performed. If you enter the string, "1 1", as input, it cannot be converted to an int.



Thank you so much for pointing this out. It makes perfect sense now!