我是巨蟒的初学者,正在努力自学。我有一个井字游戏,我已经工作一段时间了,但我不能让它检测到领带。我使用一个列表来存储值和列表理解,以检测关系/胜利。问题是程序评估不正确。当它应该返回真时,它返回假。
这是我检测领带的功能:
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。
以下是我的全部代码:
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
任何帮助都将不胜感激,谢谢!