트랙
/
Python
Python
/
연습 문제
/
틱택토의 상태
틱택토의 상태

틱택토의 상태

쉬움

지침

이 연습 문제에서는 틱택토 게임의 상태를 판별하는 프로그램을 구현해요. (이 게임은 "noughts and crosses" 또는 "Xs and Os"라고도 해요.)

게임은 3×3 격자에서 진행돼요. 플레이어는 번갈아 가며 격자에 X와 O를 놓아요. 게임은 한 플레이어가 표시 세 개를 가로, 세로, 또는 대각선으로 나란히 놓아서 이기거나, 격자가 모두 채워지면 끝나요.

이 연습 문제에서는 X가 먼저 시작한다고 가정해요.

주어진 게임이 어떤 상태인지 판별하는 것은 여러분의 몫이에요.

가능한 게임 상태는 세 가지예요:

  • 게임이 ongoing이에요.
  • 게임이 draw로 끝났어요.
  • 게임이 win으로 끝났어요.

주어진 게임판이 유효하지 않으면 적절한 오류를 발생시켜요.

게임판이 다음 조건에 해당하면 유효하지 않아요:

  • 올바른 순서로 수를 두었을 때 나올 수 없는 게임판인 경우 (X가 먼저 시작한다는 걸 기억해요).
  • 게임이 이미 끝난 이후에도 계속 둔 경우.

예시

진행 중인 게임

   |   |
 X |   |
___|___|___
   |   |
   | X | O
___|___|___
   |   |
 O | X |
   |   |

무승부

   |   |
 X | O | X
___|___|___
   |   |
 X | X | O
___|___|___
   |   |
 O | X | O
   |   |

승리

   |   |
 X | X | X
___|___|___
   |   |
   | O | O
___|___|___
   |   |
   |   |
   |   |

유효하지 않은 경우

턴 순서가 잘못된 경우
   |   |
 O | O | X
___|___|___
   |   |
   |   |
___|___|___
   |   |
   |   |
   |   |
승리한 뒤에도 계속 진행한 경우
   |   |
 X | X | X
___|___|___
   |   |
 O | O | O
___|___|___
   |   |
   |   |
   |   |

예외 메시지

때로는 예외를 발생시켜야 할 때도 있어요. 이때는 오류의 원인이 무엇인지 알려 주는 의미 있는 오류 메시지를 항상 포함해야 해요. 그러면 코드를 더 읽기 쉽게 만들고 디버깅에도 큰 도움이 돼요. 오류 원인이 특정 타입이라고 확실히 아는 상황이라면 내장 오류 타입 중 하나를 골라 발생시켜도 되지만, 그래도 의미 있는 메시지는 꼭 포함해야 해요.

Tic Tac Toe의 올바른 게임은 한 플레이어가 이기면 끝나요. 두 플레이어가 모두 승리 상태에 있다면, 이 연습 문제는 raise 문을 사용해 풀이에서 ValueError를 "던지는" 것을 기대해요. 한 플레이어가 연속으로 두 번 수를 두는 것으로 판정되거나, 두 번째 수를 두도록 배정받았는데 첫 번째 수를 두는 경우에도 코드는 ValueError를 던져야 해요.

메시지를 담아 ValueError를 발생시키려면, 메시지를 exception 타입의 인자로 작성해요:

# Example when player O goes before player X.
raise ValueError("Wrong turn order: O started")

# Example when player X goes twice.
raise ValueError("Wrong turn order: X went twice")

# Example when player X wins AND player O wins.
raise ValueError("Impossible board: game should have ended after the game was won")

테스트는 오류 메시지가 정확히 일치하는지 확인하므로, 기대하는 결과를 주의 깊게 읽어 봐요.

GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Python Exercism

틱택토의 상태 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Python 트랙을 개념 17개연습 문제 146개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.