import random
board = ["-", "-", "-",
"-", "-", "-",
"-", "-", "-"]
currentPlayer = "X"
winner = None
gameRunning = True
# game board
def printBoard(board):
print(board[0] + " | " + board[1] + " | " + board[2])
print("---------")
print(board[3] + " | " + board[4] + " | " + board[5])
print("---------")
print(board[6] + " | " + board[7] + " | " + board[8])
# take player input
def playerInput(board):
inp = int(input("Select a spot 1-9: "))
if inp >= 1 and inp <= 9 and board[inp-1] == "-":
board[inp-1] = currentPlayer
else:
print("Oops player is already at that spot.")
# check for win or tie
def checkHorizontal(board):
global winner
if board[0] == board[1] == board[2] and board[1] != "-":
winner = board[0]
return True
elif board[3] == board[4] == board[5] and board[3] != "-":
winner = board[3]
return True
elif board[6] == board[7] == board[8] and board[6] != "-":
winner = board[6]
return True
def checkRow(board):
global winner
if board[0] == board[3] == board[6] and board[0] != "-":
winner = board[0]
return True
elif board[1] == board[4] == board[7] and board[1] != "-":
winner = board[1]
return True
elif board[2] == board[5] == board[8] and board[2] != "-":
winner = board[2]
return True
def checkDiag(board):
global winner
if board[0] == board[4] == board[8] and board[0] != "-":
winner = board[0]
return True
elif board[2] == board[4] == board[6] and board[2] != "-":
winner = board[2]
return True
def checkTie(board):
global gameRunning
if "-" not in board:
printBoard(board)
print("It is a tie!")
gameRunning = False
def checkWin():
if checkDiag(board) or checkHorizontal(board) or checkRow(board):
print(f"The winner is {winner}")
# switch the player
def switchPlayer():
global currentPlayer
if currentPlayer == "X":
currentPlayer = "O"
else:
currentPlayer = "X"
def computer(board):
while currentPlayer == "O":
position = random.randint(0, 8)
if board[position] == "-":
board[position] = "O"
switchPlayer()
# check for win or tie again
while gameRunning:
printBoard(board)
playerInput(board)
checkWin()
checkTie(board)
switchPlayer()
computer(board)
checkWin()
checkTie(board)
Hey, Bryan. I would add a while loop in the playerInput function that will only break once a valid input has been entered. I would also change the printed statement to say something like “Invalid spot” to cover both scenarios where the input is out or range or the space is already occupied.
def playerInput(board):
while True:
inp = int(input("Select a spot 1-9: "))
if inp >= 1 and inp <= 9 and board[inp-1] == "-":
board[inp-1] = currentPlayer
break
else:
print("Invalid spot.")