I have the following code for a basic TicTacToe game. When playing the code does not break out of the while loop even when the winner is True and the length of used numbers is less than 9. I tried debugging it with breakpoints and the debugger indicates the breakpoint is hit, but the while loop persists.
def TicTacToe():
    #options available 
    nums = [0,1,2,3,4,5,6,7,8,9]
    used = []
    
    #winner winner chicken dinner combinations
    
    
    #board 
    def board():
        print(f" {nums[0]}  |  {nums[1]}  |  {nums[2]}  ")
        print("----|-----|----")
        print(f" {nums[3]}  |  {nums[4]}  |  {nums[5]}  ")
        print("----|-----|----")
        print(f" {nums[6]}  |  {nums[7]}  |  {nums[8]}  ")
    
    # def progress(): 
        
    
        # return wwcd
    
    def round(player = "X"):
        print(used)
        winner = False
        
        while len(used) < 9 and winner == False:
            print(len(used))
            
            if player == "X":
                
                board()
                selected = int(input("Select number on the board to place X: "))
                if selected in nums and selected not in used:
                    used.append(selected)
                    nums[selected] = "X"
                    
                    
                    
                       
                    if (nums[0] == "X" and nums[1] == "X" and nums[2] == "X") or (nums[3] == "X" and nums[4] =="X" and nums[5] =="X") or (nums[6] == "X" and nums[7] =="X" and nums[8] =="X") or (nums[0] == "X" and nums[4] =="X" and nums[8] =="X") or (nums[6] == "X" and nums[4] =="X" and nums[2] =="X") or (nums[0] == "X" and nums[3] =="X" and nums[6] =="X") or (nums[1] == "X" and nums[4] =="X" and nums[7] =="X") or (nums[2] == "X" and nums[5] =="X" and nums[8] =="X"): 
                            board()
                            print("Congradulations X, you win!")
                            winner = True
                            break
                            
                            
                            
                            
                            
                    else:
                        print('O turn now')
                        round("O")
            elif player == "O":
                board()
                selected = int(input("Select number on the board to place O: "))
                if selected in nums and selected not in used:
                    used.append(selected)
                    nums[selected] = "O"
                    
                    
                        
                    if (nums[0] == "O" and nums[1] == "O" and nums[2] == "O") or (nums[3] == "O" and nums[4] =="O" and nums[5] =="O") or (nums[6] == "O" and nums[7] =="O" and nums[8] =="O") or (nums[0] == "O" and nums[4] =="O" and nums[8] =="O") or (nums[6] == "O" and nums[4] =="O" and nums[2] =="O") or (nums[0] == "O" and nums[3] =="O" and nums[6] =="O") or (nums[1] == "O" and nums[4] =="O" and nums[7] =="O") or (nums[2] == "O" and nums[5] =="O" and nums[8] =="O"): 
                            board()
                            print("Congradulations O, you win!")
                            winner = True
                            print('Hit, Winner found')
                            
                            
                            
                            
                    else:
                        round()
                        
                
                
            
    round()
    
TicTacToe()
 
    