2014-11-04 2 views
1

파이 그램과 numpy를 사용하는 Tic-Tac_Toe입니다. 나는 거의 모든 프로그램을 마쳤다. 승자가 있는지 찾는 방법을 이해하는 데 도움이 필요합니다. 모든 행, 열 또는 대각선의 합계가 3이면 승자가 발견됩니다.3x3 행렬의 모든 행, 열 및 대각선 합계 numpy

두 개의 3x3 행렬에 0이 채워져 있습니다. 그것들을 xPlayer와 oPlayer라고 부르 자. 행렬은 플레이어 x 또는 플레이어 o가 특정 위치에서 선택을 할 때마다 1로 채워집니다. 따라서 플레이어 x가 [0,0]을 선택하면 [0,0]에있는 행렬 위치는 1 값을 얻습니다. 행, 열 또는 대각선의 합계가 3이 될 때까지이 작업을 계속해야합니다. 행렬의 모든 위치가 1이면 승자가 없습니다.

승자를 찾는 데 도움이 필요합니다. 나는 파이썬에 정말 익숙하지 않기 때문에 매트릭스를 통한 인덱싱에 대해 많이 알지 못합니다. 어떤 도움이라도 대단히 감사하겠습니다!

편집 : 기본적으로, 어떻게 모든 행, 열의 요약을 찾을 수 있습니까, 그 중 어떤 설정 3.

답변

2

numpy에서 행렬을 색인화하려면 행렬 A의 행 y와 열 x를 참조하는 표기법 A [y, x]를 사용하십시오. 행렬에서 여러 값을 한꺼번에 선택하려면 standard 파이썬 목록 조각. 예를 들어 A의 가장 왼쪽 열을 선택하려면 A [:, 0]을 사용합니다. 귀하의 경우에는

, 당신은

sum(xPlayer[:,0]) 

이 xPlayer의 맨 위 행의 xPlayer의 가장 왼쪽 열의 합

sum(xPlayer[0,:]) 

을 계산하기 위해 할 수있는 컬럼의 합을 찾을 수 있습니다. 당신은 행과 열

에 걸쳐 합계를 계산하는 NumPy와 기능을 사용할 수 있습니다, 또는

xPlayer[0,0]+xPlayer[1,1]+xPlayer[2,2] 

: 대각선의 경우, 당신은 너무 대각선 중 하나가 될 것이다, 수동으로 배열 항목을 추가해야합니다

xPlayer.sum(0) 

각 열에서 행으로 합계를 계산하고

xPlayer.sum(1) 

각 행의 열 전체 합을 계산한다. 당신은 수동으로 인덱스를 지정하지 않고 대각선을 계산하기 때문에 다른 대각선의 왼쪽 상단 오른쪽 아래 대각선

sum(numpy.fliplr(xPlayer).diagonal()) 

에 대한

sum(xPlayer.diagonal()) 

수 있습니다.

편집 : 명확히하기 위해 numpy의 "arrays"에 적용됩니다.상기의 모든 조건은 여전히 ​​

arr = numpy.array(mat) 

또는 적절히 생성 행렬을 이용하여 배열로 변환 매트릭스 중 하나에 의해 "매트릭스"를 사용할 수있다. 후자의 경우 행렬은 모든 연산에 대해 동일한 모양을 갖지는 않습니다.

+0

와우 이것은 정말 쉽습니다. 나는 매우 어리 석다. 나는 깊이 찾아야했다. 당신의 도움을 주셔서 감사합니다 –

+1

'numpy의 행렬 인덱스 '는'numpy의'index * array *를 의미합니까? – ssm

-1

에 동일한 경우 대각선 확인하는 사람이 이겼는지 여부를 매 차례 검사에 부울. 예를 들어, x 턴이면, 그는 승리 한 동작을 수행하고, bool은 누군가가 승리했는지 확인하고, true를 반환하고, print out (플레이어가 턴 인 플레이어)을 반환합니다.) 이겼다! 그리고 끝내 게임.

+0

우승자는 모든 행, 열 또는 대각선의 합계에 의해 결정됩니다. 이 중 3 개가 있으면 승자가 선택됩니다. 당신이 말한 것을 구현할 수는 있지만 모든 행, 열 및 대각선의 합이 3과 같은지 확인하는 방법을 이해하는 데 도움이되지 않습니다. –

+0

도와 주려고 시도해 주셔서 감사합니다. – Tyler