17. A Real Win


#1



File "python", line 44
Print "Turn ", turn + 1
^
SyntaxError: invalid syntax


I'm stuck because I don't know if there is a simple error with the syntax I'm using for print OR if it's a larger problem that I'm not aware of. Can someone please describe the issue so I can solve it?


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(0,4):
    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
    elif(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 (turn + 1) here!
        Print "Turn ", turn + 1
        print_board(board)
    if turn == 3:
        print "Game Over"


#2

Keywords are written in lowercase.

This code does not follow the instructions. What this indicates is that the code is copied. I hope you are learning something from this.


#3

`
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)

Everything from here on should go in your for loop!

Be sure to indent four spaces!

for turn in range(4):
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"
        turn = turn + 1
        if turn == 3:
            print "Game Over"
# Print (turn + 1) here!
    print "Turn", turn
    print_board(board)```

@mtf That was very helpful and I was able to get it. Since you want me to learn, why don't you help me understand something I was trying to add to the functionality of the game?

If you look at the revised code I have placed above, I have moved where turn should increase by one. My goal is to have the functionality where the turn only increases if a person missed the battleship. Right now, if I guess off the board, it still adds to the turn rather than making me try again.

To my understanding, since the turn + 1 is in the else statement, it should only fire when that else statement fires. But it isn't. Why not?


#4

It becomes disruptive to other learners when we stray off the lesson plan into projects of our own. That is why we are so insistent on learners staying within the instructions and following them to the letter. Afterward, once they pass the module, then we may explore. It is not our role to explain other people's code to learners. That is where the real learning begins, when you start researching and reading on your own.


#5

Fair enough. Thanks for pushing me along the path!


#6

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