我是python的初学者,正在尝试自学。我有一个井字游戏,现在我已经工作了一段时间,但我无法使它检测到纽带。我正在使用一个列表来存储值并使用列表理解来检测平局/获胜。问题是程序无法正确评估。在应返回True时返回False。
这是我检测领带的功能:
def tied():
nonlocal tie
if all([x in ['X', 'O'] for x in o_gb[0]] + [x in ['X', 'O']
for x in o_gb[1]] + [x in ['X', 'O'] for x in o_gb[2]]):
tie = True
即使列表中有X或O,它始终返回False列表。
这是我所有的代码:
import numpy as np
def ticTacToe():
x_win = False
o_win = False
tie = False
o_gb = [['_'for x in range(3)]for y in range(3)]
gb = np.array(o_gb).T
def win():
nonlocal x_win, o_win
if (all(x in ['X'] for x in gb[0]) or all(x in ['X']for x in
gb[1])or all(x in ['X'] for x in gb[2])):
x_win = True
if (all(x in ['O'] for x in gb[0]) or all(x in ['O'] for x in
gb[1])or all(x in ['O'] for x in gb[2])):
o_win = True
def win2():
nonlocal x_win, o_win
if (all(x in ['X'] for x in gb[:, 0]) or all(x in ['X']for x in
gb[:, 1]) or all(x in ['X'] for x in gb[:, 2])):
x_win = True
if (all(x in ['O'] for x in gb[:, 0]) or all(x in ['O']for x in
gb[:, 1]) or all(x in ['O'] for x in gb[:, 2])):
o_win = True
def win3():
nonlocal x_win, o_win
if (all(x in ['X'] for x in np.diag(gb)) or all(x in ['X'] for x
in np.diag(np.fliplr(gb)))):
x_win = True
if (all(x in ['O'] for x in np.diag(gb)) or all(x in ['O'] for x
in np.diag(np.fliplr(gb)))):
o_win = True
def tied():
nonlocal tie
if all([x in ['X', 'O'] for x in o_gb[0]] + [x in ['X', 'O']for
x in o_gb[1]] + [x in ['X', 'O'] for x in o_gb[2]]):
tie = True
while 1:
print(gb)
xm = input('X\'s move(x,y): ').split(',')
xm = [int(i) for i in xm]
if gb[xm[0]-1, xm[1]-1] not in ['X', 'O']:
gb[xm[0]-1, xm[1]-1] = 'X'
else:
print('You can\'t move there, now you lose a turn!')
win()
win2()
win3()
tied()
print(gb)
if o_win or x_win or tie:
break
om = input('O\'s move(x,y): ').split(',')
om = [int(i) for i in om]
if gb[om[0]-1, om[1]-1] not in ['X', 'O']:
gb[om[0]-1, om[1]-1] = 'O'
else:
print('You can\'t move there, now you lose a turn!')
win()
win2()
win3()
tied()
if o_win or x_win or tie:
break
if x_win:
print('X wins!')
elif o_win:
print(gb)
print('O wins!')
else:
if o_win:
print(gb)
print('Tie!')
while 1:
done = input('Again?(y/n)')
if done in ['y']:
ticTacToe()
else:
break
任何帮助将不胜感激,谢谢!
答案 0 :(得分:1)
all
检查所有内容,您需要any
(并简化代码):
def tied():
nonlocal tie
if any(x in 'XO' for i in o_gb[:3] for x in i):
tie = True
然后在所有功能中将其简化