2017-12-22 39 views
-1

이 질문은 파이썬을 사용한 tic tac 발가락 문제와 관련이 있습니다. 목록이 있다고 가정 해 봅시다 - my_list = ['X', 'O', 'X', 'O', 'X', '-', 'O', 'X', 'X'].범위의 모든 항목이 특정 값과 같은지 확인

my_list = ['X', 'O', 'X', 'O', 'X', '-', 'O', 'X', 'X'] 

for i in range(0, 3): 
    if all(board[i]) == 'X': 
     print('X is the winner') 
    elif all(board[i]) == 'Y': 
     print('Y is the winner') 
문제는 정말로 두 번째 줄에 범위를 설정에서 유래하지만,

나는 또한 I 느낌 : 나는 구문 오류를 range(0, 2) or range(3, 5) or range(6, 8) == X의 모든 항목은 지금까지 내가 다음을 시도 여부를 결정하지만 싶어 all 기능을 올바르게 사용하고 있지 않습니다. 여기 내 실수를 비춰 줄 수 있니? 부가 메모 : 인덱스 items[0, 3, 6], [1, 4, 7][2, 5, 8] - 대각선 인덱스 [0, 4, 8][6, 4, 2]과 마찬가지로 "열"이 모두 특정 값인지 확인하고 싶습니다. 우승자 인덱스 목록

+1

'범위 (0, 1, 2) ('숫자 0, 1로 구성하지 않고, 2. [워드 프로세서] 참조 https://docs.python.org/3/library/ stdtypes.html # typesseq-range). – user2357112

+0

범위를 편집했습니다. 죄송합니다. Python을 처음 접해 혼란에 빠지게되었습니다. – jcbridwe

+0

'print (I) in the loop'을 추가하십시오. 이것은 이것이 작동하지 않는 것을 보는 것을 도울 것입니다. –

답변

2

명시 적으로 작동합니다 우승자를 결정할 때

my_list = ['X', 'O', 'X', 'O', 'X', '-', 'O', 'X', 'X'] 

winner_indices = [[0, 1, 2], [3, 4, 5], [6, 7, 8], 
        [0, 3, 6], [1, 4, 7], [2, 5, 8], 
        [0, 4, 8], [6, 4, 2]] 

no_winner = True 
for indices in winner_indices: 
    selected = [my_list[index] for index in indices] 
    for party in ['X', 'O']: 
     if all(item == party for item in selected): 
      print('{} is the winner'.format(party)) 
      no_winner = False 
if no_winner: 
    print('nobody wins') 
-1

당신은 모든 우승 조합을 고려하지 않습니다. 내가 사용하려고하는 접근법은 일반적인 방법으로 우승 한 조합 그리드를 생성하는 데 사용할 수 있습니다. 확장하려는 경우에도 도움이 될 수 있습니다.

내 솔루션에는 numpy 패키지가 사용됩니다. 아직 설치하지 않은 경우 설치하십시오.

import numpy as np 
from itertools import chain 

#Define size of your grid 
n_dim = 3 

#Input list from players 
my_list = ['X', 'O', 'X', 'O', 'X', '-', 'O', 'X', 'X'] 

#Generate a n_dim*n_dim grid and reshape it in rows and columns 
grid = np.arange(n_dim*n_dim).reshape(n_dim, n_dim) 

#Get all rows and columns out from the grid as they all are winning combinations 
grid_l = list(chain.from_iterable((grid[i].tolist(), grid[:,i].tolist()) for i in range(n_dim))) 

#Get the forward diagonal 
grid_l.append(grid.diagonal().tolist()) 

#Get reverse diagonal 
grid_l.append(np.diag(np.fliplr(grid)).tolist()) 

#Check if any player's combination matches with any winning combination 
result = [i for i in grid_l if all(my_list[k] == 'X' for k in i) or all(my_list[k] == 'O' for k in i)] 
#result [[0,4,8]]