17. A Real Win


#1



I'm struggling a lot with this exercise, particularly the theory. I've done some copying to to try and understand better but it's difficult. If somebody could give me advice in laymen terms that would be excellent.

So I'm struggling on the break / indentation and can't seem to grasp it properly.


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)

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

# Everything from here on should go in your for loop!
# Be sure to indent four spaces!

for turn in range(4):
    print "Turn " , str(turn + 1)
    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 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)


#2

to be honest, copying only makes things worse, not better

This comments give a big hint:

# Everything from here on should go in your for loop!
# Be sure to indent four spaces!

it means, everything from here on (till end of file) should be indented so its inside the for loop, this is currently your loop + loop content:

for turn in range(4):
    print "Turn " , str(turn + 1)
    guess_row = int(raw_input("Guess Row:"))
    guess_col = int(raw_input("Guess Col:"))

i see more code after it? indent it, so its inside the loop

if you need more help, post an updated version of your code


#3

can anyone help me with this? error response: break is outside the loop

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!"
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)
for turn in range(4):
print "Turn", turn + 1

if turn == 3:
   print "Game Over"

#4

you seem to have deleted this comments:

# Everything from here on should go in your for loop!
# Be sure to indent four spaces!

look where they are in coldweb code, everything from there on should go in the loop


#5

So from my understanding by looking at my code: the if and else statements aren't indented in the for loop?


#6

the if and else statements aren't indented so they are in the for loop, then you understand correctly :slight_smile:


#7

If they aren't indented would they not be in the for loop?


#8

exactly, python uses indention to determine nesting (what inside a loop, function and so on)


#9

Hey guys, I read through your comments, but I still can't figure out what I'm doing wrong. Can you help me out :)?


#10

look at the comments on line 26 and 27


#12

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