18. To your Battle Stations! Data_type function doesn't work


#1



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


The loop doesn't stop. Even if the data type is integer, it keeps asking for a different input.


Hello everyone!

I wanted to add a simple data test function to the game which would ask player to choose the numbers of a row and a colomn one more time if the data type is different from integer.


from random import randint

board = []

for x in range(5):
    board.append(["O"] * 5)

def print_board(board):
    for row in board:
        print " ".join(row)

print "Let's play Battleship!"
print_board(board)

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

def random_col(board):
    return randint(0, len(board[0]) - 1)
    
def data_test():   
    a = raw_input("Guess Row:")
    b = raw_input("Guess Col:")
    if type(a) == int and type(b) == int:
        guess_row = int(a)
        guess_col = int(b)
    elif type(a) != int or type(b) != int:
        print "Are you sure you know how to play this game? Try to guess THE NUMBER of a row and THE NUMBER of a colomn in. Other characters ain\'t gonna work. Maybe try one more time?"  
        data_test()    

ship_row = random_row(board)
ship_col = random_col(board)
print ship_row
print ship_col

for turn in range(4): 
    data_test()
    print "Turn", turn + 1
    if guess_row == ship_row and guess_col == ship_col:
        print "Congratulations! You sunk my battleship!"
        break
    else:
        if (guess_row < 0 or guess_row > 4) or (guess_col < 0 or guess_col > 4):
            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!"
            board[guess_row][guess_col] = "X"
            print_board(board)
        if turn == 3:
            print "Game Over"


#2

Save that for your own time. Not in the unit and not in Q&A. What you are doing is exploratory and should be discussed in the Corner Bar, AFTER you succesfully complete this unit and pass. Not before.

Stick to instructions for best results. Don't try to improve upon the code for your own indulgence until you are through with this unit.


#4

Hey mtf,

Sorry for making a mistake and thank you for an advice. I will try to
finish the course first and in the future I will check two times the right
section before I post something.


#5

raw_input returns a string. To test of it is an int you can use if a.isdigit():

Or you could use a try except:

try:
    guess_row = int(a)
except ValueError:

#6

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