FAQ: Learn Python - Battleship - Test Run

#1

This community-built FAQ covers the “Test Run” exercise in Codecademy’s lessons on Python.

Join the Discussion. We Want to Hear From You!

Agree with a comment or answer? Like () to up-vote the contribution!

Want to take the conversation in a totally different direction? Join our wider discussions.

Found a bug? Report it!

Have a question about your account, billing, Pro, or Pro Intensive? Reach out to our support team!

None of the above? Find out where to ask other questions here!

#2

Other FAQs

• This list will contain other frequently asked questions that aren’t quite as popular as the ones above.
• This FAQ is built and maintained by you, the Codecademy community – help yourself and other learners like you by contributing!

Not seeing your question? It may still have been asked before – try () in the top-right of this page. Still can’t find it? Ask it below by hitting the reply button below this post ().

#3

I´m trying to run this code and it only allows me to guess one time, imagine I press 1 in guess_row I would be guessing the place 1x1 but not anything else. What did I do wrong??

``````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)
print ship_row
print ship_col
guess_row = int(raw_input("Guess Row: "))
guess_col = int(raw_input("Guess Col: "))

if guess_row == ship_row and guess_col == ship_col:
print "Congratulations! You sank my battleship!"
else:
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."
else:
print "You missed my battleship!"
board[guess_row][guess_col] = "X"
print_board(board)
``````
1 Like
#4

nothing seems wrong, adding a loop to allow multiple guesses is the next exercise, so should just continue with the course

1 Like
#5

I’m having a similar issue (exact same code as miguelinera), which persists even into the next step where we code in the turn limit, and isn’t resolved by the end of the lesson. The issue is that the console won’t take two raw inputs. Once you input your row selection after being prompted "Guess Row: " and press enter, the console prints the text "Guess Col: " with no option for input, followed by execution of the subsequent code. If you print the guess_row and guess_col variables, they both have the value that was passed into the "Guess Row: " raw input. It seems like the console is passing a single raw input into both variables.

#6

what if you run your code on repl.it? Does it work there?

#7

I tried reloading the lesson and the code now works as intended; it also works in repl.it. Not sure what the issue was. Anyway, thanks for the help!

#8

Its a small bug, and on occasion it comes back to hunt codecademy.

#9

Hey, I wonder if it’s possible to make the input ‘1’ count as the first row/column and what should be changed in the code?

#10

given lists are a fundamental part of the python programming language, i wouldn’t fiddle with lists or index concept. Instead, manipulate the user input

1 Like
#11

I know this is probably not needed, but how would I check to see if the raw_input is an integer?

#12

given the program otherwise crashes, its certainly useful. There are multiple ways to achieve this. python has a method for it, you could also handle the exception. Google is your friend.

1 Like
#13

So, could anyone tell me how to respond to special characters? When I run the code and enter characters such as apostrophes and backslashes it returns syntax errors. I understand why, but does anyone have a suggestion to fix this.

Here is my 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)
print ship_row
print ship_col
guess_row = int(raw_input("Guess Row: "))
guess_col = int(raw_input("Guess Col: "))

if guess_row == ship_row and guess_col == ship_col:
print "Congratulations! You sank my battleship!"
else:
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."
else:
print "You missed my battleship!"
board[guess_row][guess_col] = "X"
print_board(board)
``````
#14

the problem is that the `int()` function will throw an exception for anything that can’t be converted to integer, so you have two options:

verifying that the string consists of digits (python has a method for this)
or handling the exception