2017-03-14 1 views
2

Python으로 전함 게임을 할 때 사용합니다. 내 함수는 사용자의 '추측'입력을 확인하여 무한한 유효성 검사를 반복합니다. 10x10 격자에서 'a10'형식으로 추측하고 싶습니다. 그것을 발견 않습니다 - -하지만 오류가 인쇄 오류 문 끝없는 루프를 반환하는 사용자가 잘못된 값을 추측Python의 유효성 검사를 끝내지 마십시오

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 

경우 다음과 같이 내가 유효성 검사를하기 위해 구축 한 검증 기능입니다.

은 유효성 검사 기능은 내 게임의 부분 사용되는 곳 : 내가 진술하는 동안 두 가지를 가지고 있기 때문에 될 수 있으면

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") 

확실하지? 여기에 정말로 붙어있어 모든 지침을 이해할 수 있습니다. 감사.

***************** 8 편집 - 실제로 그 값을 전달하지 않고 추측을 포함하는 기능을 변경했습니다. 입력 문에서하지만 여전히 같은 문제가 발생합니다.

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 

그냥 이런 식으로 전화 :

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() 
+0

'true :'def validate_guess (self, guess) :'는 의미가없는 것처럼 보입니다. '추측'은 함수에 전달하는 인수입니다. 함수의 아무 것도 함수를 수정하거나 재정의하지 않기 때문에 함수가 실행되는 동안 동일한 값을 유지합니다. 수표를 통한 첫 번째 전달에서 '반환'진술에 도달하기위한 조건을 충족시키지 못하면 절대 안됩니다. 'while' 루프는 동일한, 실패한, 유효성 검사를 반복해서 수행합니다. – roganjosh

+0

가능한 첫 번째 입력이 유효하지 않은 경우 다른 사용자에게 입력하라는 메시지가 표시 될 수 있습니다 (http://stackoverflow.com/questions/9609213/prompt-the-user-to-input-something-else-if-the- 첫 번째 - 입력 - 무효) – Prune

+0

고마워요 - 당신이 무엇을 말하는 지 이해할 것 같아요 - 내가 편집 한 코드 (위에 표시된) 함수에 입력 문을 포함하도록 -하지만 여전히 같은 오류가 발생. –

답변

2

사용자가 잘못된 값을 입력 할 때, 당신은 당신이 다시 확인하기 전에 새로운 입력을 얻을 수 있고, validate_guess내. here을 참조하십시오.

함수에서 오류 코드 (True/False?)를 반환하거나 입력이 유효 할 때까지 함수 루프를 반환하십시오. 함수의 하단에 새로운 입력에 대한 명령을 추가하는 한편 루프를 추가하면됩니다.

+0

흠 - 좋아요. 함수 내에서 (변수를 추측하지 않고) 입력 문을 추가 했는데도 여전히 같은 문제가 발생했습니다. 편집 된 코드는 –

+0

아입니다. 신경 쓰지 마라. 나는 while 문 안에 입력 문을 넣지 않았다. 도와 주셔서 감사합니다. –

관련 문제