Working on a battleship game in python. My function to check the user's 'guess' input in resulting in an endless validation loop. I want a guess in the format of 'a10' on a 10x10 grid. The validation function i have built to help validate is as follows:
  def validate_guess(self,guess):
        while True:
            if (len(guess)) in range(2, 4):
                if guess[0] not in 'abcdefghij' or guess[1:] not in '1,2,3,4,5,6,7,8,9,10':
                    print("Sorry the Grid is a 10x10 square you must enter a valid position.  Try again...")
                    continue
                else:
                    return guess
            else:
                if len(guess) < 2 or len(guess) > 3:
                    print("Oops!  That's too not the right amount of characters. Please try again...")
                    continue
If the user guesses an incorrect value--it does spot it--but the error is returning a never ending loop with the printed error statement.
This is the portion of my game where the validation function is being used:
while True:
        print("\n")
        # get guess from player one in coordinate form (example: a10)
        guess = input("{}'s turn to guess: ".format(player1.player))
        # strip characters from the guess input
        guess = guess.strip()
        # validate the guess
        guess = self.validate_guess(guess)
        # append the guess to a list for player 1
        player1.guesses.append(guess)
        # break down the coordinates into x and y variables
        x, y = ship1.split_guess(guess)
        # increment guesses
        guesses += 1
        # loop to assess whether, hit, miss or a won game
        if any(guess in ship for ship in grid2.play_two_board):
            print("HIT")
            grid2.print_guess_board(x, y, "h")
            for ship in grid2.play_two_board:
                try:
                    ship.remove(guess)
                    print(len(Board.play_two_board))
                    self.check_if_sunk(ship)
                    win = self.play_one_win_check(player1.player)
                    if win == 1:
                        print ("GAVE OVER!")
                        break
                except ValueError:
                    pass
        else:
            print("Miss!")
            grid2.print_guess_board(x, y, "m")
Not sure if it might be because i have two While statements? Just really stuck here would appreciate any guidance. Thanks.
*****************************8 edit --changed function to include the guess without actually passing it that value from the input statement but still getting same problem.
  def validate_guess(self):
        guess = input("Please enter a location:")
        while True:
            if len(guess) in range(2, 4):
                if guess[0] not in 'abcdefghij' or guess[1:] not in '1,2,3,4,5,6,7,8,9,10':
                    print("Sorry the Grid is a 10x10 square you must enter a valid position.  Try again...")
                    continue
                else:
                    return guess
            else:
                if len(guess) < 2 or len(guess) > 3:
                    print("Oops!  That's too not the right amount of characters. Please try again...")
                    continue
and just calling it like this:
while True:
        print("\n")
        # get guess from player one in coordinate form (example: a10)
        # guess = input("{}'s turn to guess: ".format(player1.player))
        # strip characters from the guess input
        # guess = guess.strip()
        # validate the guess
        guess = self.validate_guess()
 
     
    