Python: UnboundLocalError: локальная переменная q, на которую ссылается перед присваиванием - PullRequest
0 голосов
/ 02 августа 2020

У меня проблемы с этой функцией:

def minimax(board):
"""
Returns the optimal action for the current player on the board.
"""
if terminal(board):
    return None

if player(board) == X:
    p=-2
    for a in actions(board):
        k=Min_Value(result(board,a))
        if p < k:
            p = k
            q = a

elif player(board) == O:
    p = 2
    for a in actions(board):
        k = Max_Value(result(board, a))
        if p > k:
            p = k
            q = a
return (q)

странно то, что эта ошибка удаляется всякий раз, когда я меняю код функционального терминала:

def terminal(board):
"""
Returns True if game is over, False otherwise.
"""
if winner(board)!= None:
    return True
elif Full(board): #Full checks if the tic tac toe grid is full
    return True
else:
    return False

любая идея, где может быть проблема: /?

PS: если вам это нужно, вот код действий функции:

def actions(board):
"""
Returns set of all possible actions (i, j) available on the board.
"""
L=set()
for i in range(3):
    for j in range(3):
        if board[i][j]=='EMPTY':
            L.update([(i,j)])
return L 

1 Ответ

0 голосов
/ 02 августа 2020

В вашей функции две функции elif ничего не возвращают. Таким образом, если и player(board) == X, и player(board) == 0 ложны, тогда переменная q еще не установлена, и, следовательно, оператор return выдаст эту ошибку. Попробуйте установить q=None в начале функции, это решит ошибку, но вам, вероятно, следует посмотреть logi c, который вы применяете, поскольку он кажется неполным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...