Tic Tac Toe

class player:

def __init__(self, name, choice = ""):
    self.player = name
    self.choice = choice

def get_name(self):
    return self.player

def get_choice(self):
    return self.choice

def set_choice(self, choice):
    self.choice = choice

def has_choice(self):
    return self.choice != None

class Tictactoe:

def __init__(self, player = None):
    self.grid = ["" for i in range(9)]
    self.player = player
    self.win_comb = [0,1,2],[3,4,5],[6,7,8],[0,4,8],[2,4,6],[0,3,6],[1,4,7],[2,5,8]
    self.moves = 9


def printgrid(self):
    print("\n")
    print("\t     |     |")
    print("\t  {}  |  {}  |  {}".format(self.grid[0],self.grid[1],self.grid[2]))
    print('\t_____|_____|_____')

    print("\t     |     |")
    print("\t  {}  |  {}  |  {}".format(self.grid[3],self.grid[4],self.grid[5]))
    print('\t_____|_____|_____')

    print("\t     |     |")

    print("\t  {}  |  {}  |  {}".format(self.grid[6],self.grid[7],self.grid[8]))
    print("\t     |     |")
    print("\n")


def check(self):
    moves = 9
    winner = ""
    while 0 <= moves:
        for list in self.win_comb:
            x_count, o_count = 0, 0
            for i in list:
                if self.grid[i] == "X": x_count += 1
                
                if self.grid[i] == "O": o_count += 1

                if x_count == 3:
                    winner = "X"
                    break

                if o_count == 3:
                    winner = "O"
                    break
        moves -= 1
    print(winner)
    return winner


def valid_place(self, user_input):
    return True if self.grid[user_input] == "" else False


def place(self,user_input,value):
    if self.valid_place(user_input):
        self.grid[user_input] = value
    else:
        print("Spot already taken!!!!")
        self.moves += 1


def main(self, player):
    self.player = player
    curr_val = player[0].get_choice()

    while 0 < self.moves:
        self.printgrid()
        if self.check() == self.player[0].get_choice():
            print("Winner :"+ self.player[0].get_name())
            break
        if self.check() == self.player[1].get_choice():
            print("Winner :"+ self.player[1].get_name())
            break
        try:
            try:
                print(f"Tries: {self.moves}")
                user_input = int(input("place 1-9 in the grid: "))
            except ValueError:
                print("input a number")
                continue
            if isinstance(user_input, int):
                user_input -= 1
                self.place(user_input, curr_val)
                if curr_val == "X": curr_val = "O"
                else: curr_val = "X"
                self.moves -= 1
            else:
                raise ValueError
        except IndexError or ValueError:
            print(" Input number : less then or equal to 9")
    count = 0
    for i in self.grid:
        if i == "X":
            count += 1
        
        if i == "O":
            count += 1

    if count == len(self.grid):
        print("Draw")

    return


def get_move(self):
    return self.moves

if name == “main”:

game = Tictactoe()
players = []
for i in range(2):
    name = input("Name:")
    players.append(player(name)) 

while True:
    try:
        user_input = input(f"{players[0].get_name()} Chosse between 'X' or 'O' !\n").upper()
        if user_input not in ["X","O"]:
            raise ValueError
        else:
            players[0].set_choice(user_input)
            if user_input == "X":
                players[1].set_choice("O")
                break
            else:
                players[1].set_choice("X")
                break
    except ValueError:
        print("Wrong input!!")

print(""+players[0].get_name()+" :"+players[0].get_choice())
print(""+players[1].get_name()+" :"+players[1].get_choice())
game.main(players)