New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Unhelpful SyntaxError #90561
Comments
Here is my code: def inputPlayerLetter():
letter=''
while not (letter=="X" or letter=="O"):
print('Do you want to be X or O?')
letter=input.upper()
if letter =='X':
return['X','O']
else:
return['O','X']
def whoGoesFirst():
if random.randint(0,1) == 0:
return 'computer'
else:
return 'player'
def makeMove(board,letter,move):
board[move]=letter
def isWinner(bo,le):
return ((bo[7] == le and bo[8] == le and bo[9] == le) or
((bo[4] == le and bo[5] == le and bo[6] == le) or
((bo[1] == le and bo[2] == le and bo[3] == le) or
((bo[7] == le and bo[4] == le and bo[1] == le) or
((bo[8] == le and bo[5] == le and bo[2] == le) or
((bo[9] == le and bo[6] == le and bo[3] == le) or
((bo[7] == le and bo[5] == le and bo[3] == le) or
((bo[9] == le and bo[5] == le and bo[1] == le))
def getBoardCopy(board):
boardCopy=[]
for i in board:
boardCopy.append(i)
return boardCopy
def isSpaceFree(board,move):
return board[move] == ''
def getPlayerMove(board):
move=''
while move not in '1 2 3 4 5 6 7 8 9'.split() or not
isSpaceFree(board,int(move)):
print('What is your next move? (1-9)')
move=input()
return int(move)
def chooseRandomMoveFromList(board,movesList):
possibleMoves=[]
for i in movesList:
if isSpaceFree(board,i):
possibleMoves.append(i)
if len(possibleMoves) != 0:
return random.choice(possibleMoves)
else:
return None
def getComputerMove(board,computerLetter):
if computerLetter=='X':
playerLetter=='O'
else:
playerLetter=='X'
for i in range(1,10):
boardCopy=getBoardCopy(board)
if isSpaceFree(boardCopy,i):
makeMove(boardCopy,computerLetter,i)
if isWinner(boardCopy,playerLetter):
return i
move=chooseRandomMoveFromList(board, [1,3,7,9])
if move!=None:
return move
if isSpaceFree(board,5):
return 5
def isBoardFull(board):
for i in range(1,10):
if isSpaceFree(board,i):
return False
for i in range(1,10):
if isSpaceFree(board,i):
return False
return True
print('Welcome to Tic-Tac-Toe')
while True:
theBoard=[''] * 10
playerLetter, computerLetter=inputPlayerLetter()
turn=whoGoesFirst()
print('The ' + turn + ' will go first.')
gameIsPlaying=True
while gameIsPlaying:
if turn=='player':
drawBoard(theBoard)
move=getPlayerMove(theBoard)
makeMove(theBoard,playerLetter,move)
if isWinner(theBoard,playerLetter):
drawBoard(theBoard)
print('Hooray! You have won the game!')
gameIsPlaying=False
else:
if isBoardFull(theBoard):
drawBoard(theBoard)
print('The game is a tie!')
break
else:
turn='computer'
if isWinner(theBoard,computerLetter):
drawBoard(theBoard)
print('The computer has beat you! You lose.')
gameIsPlaying=False
else:
if isBoardFull(theBoard):
drawBoard(theBoard)
print('The game is a tie!')
break
else:
turn='player'
print('Do you want to play again! (yes or no)')
if not input().lower().startswith('y'):
break
On def getBoardCopy(board):, it says "SyntaxError:invalid syntax". I looked through the code and found nothing wrong. Why is this? |
This is not the appropriate place to ask for help in debugging your code. I suggest you ask on the python-list mailing list. The error is that you're missing a bunch of right parenthesis in the isWinner() function. I do think "Syntax Error" isn't the best error message, though. Here's a simplified reproducer: def f():
return ((1==2)
x Note that in 3.11 (the only other version I have handy), the error is: File "foo.py", line 2 I suspect that we won't fix this in old versions of python. |
[Numeric id's automatically get dropped from the nosy list: trying to add it back] |
[And I was unable to add the numeric id as nosy. Apologies to the OP, who probably will never see this! It's a bug in the bpo software.] |
For non-coredevs, 'not a bug' means not a bug in the CPython interpreter, as opposed to user code, which here has bugs. People asking questions (preferably in a more appropriate place) should read, for instance, A minimal reproducer is '('. In 3.9, the message is 'unexpected EOF while parsing'. It is not unusual for beginners to leave out the message when reporting an exception in text rather than copy-pasting the last few lines of the traceback (which indicates exactly where the error is caught). [bpo software should be rejecting number IDs] I sent an email to Hayden. |
Email bounced. |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: