Python 3.x 确定范围内的所有项目是否等于特定值

Python 3.x 确定范围内的所有项目是否等于特定值,python-3.x,list,range,tic-tac-toe,Python 3.x,List,Range,Tic Tac Toe,这个问题与使用python的tic-tac-toe问题有关:假设我有一个列表-my_-list=['X','O','X','O','X','-','O','X','X']。我想确定范围(0,2)或范围(3,5)或范围(6,8)==X中的所有项目到目前为止,我尝试了以下操作,但出现语法错误: my_list = ['X', 'O', 'X', 'O', 'X', '-', 'O', 'X', 'X'] for i in range(0, 3): if all(board[i]) == '

这个问题与使用python的tic-tac-toe问题有关:假设我有一个列表-
my_-list=['X','O','X','O','X','-','O','X','X']
。我想确定
范围(0,2)或范围(3,5)或范围(6,8)==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')

问题确实源于在第二行设置范围,但我也觉得我没有正确使用
all
功能。你能说明我的错误吗?旁注:我还想检查索引
项[0,3,6]
[1,4,7]
[2,5,8]
-“列”以及对角线索引
[0,4,8]
[6,4,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')

在决定胜利者时,您没有考虑所有获胜组合。 我将要使用的方法可以用来以一种通用的方式生成获胜的组合网格。即使您希望扩展,这也会有所帮助

我的解决方案使用包。如果尚未安装,请安装它

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]]

范围(0,1,2)
不包括数字0,1和2。请参见。编辑范围。很抱歉,我是Python新手,对此感到困惑。请在循环中添加一个
print(I)
。这应该有助于看出这不起作用。好的,我再次编辑以使用
if-all(board[I])==“X”:print('X是赢家”)
它运行但不打印语句。我是否错误地使用了
all
?@jcbridwe
如果全部(电路板中的单元为'X'):…
all
any
函数检查iterable的真实性。