Почему это за l oop иногда пропускает вторую часть? - PullRequest
0 голосов
/ 30 мая 2020

Это часть минимаксной функции, которую я пытаюсь написать для ti c ta c toe. В частности, это часть функции maxi, которую вызывает max player, которая вызывает mini, которая вызывает maxi, et c. Программа не находит оптимального способа игры. Когда я запускаю отладчик, иногда он проходит все для l oop, а иногда, после вызова mini в третьей строке, он go возвращается к первой строке без причины. Есть ли какая-то синтаксическая c причина, по которой я пропустил?

    for i in acts:
        res = result(board, i)
        minboard = mini(res, alpha, beta)
        if utility(minboard) > maxv:
            maxv = utility(minboard)
            x = i
        if maxv > alpha:
            alpha = maxv
        if beta <= alpha:
            break

1 Ответ

0 голосов
/ 30 мая 2020

Я не полностью осведомлен о том, как работают мини-функции и служебные функции, но я чувствую, что l oop останавливается, как ни одно из ваших условий if. Обычной структурой будет if, elif, else, а не просто 3 оператора if.

for i in acts:
    res = result(board, i)
    minboard = mini(res, alpha, beta)
    if utility(minboard) > maxv:
        maxv = utility(minboard)
        x = i
    elif maxv > alpha:
        alpha = maxv
    else:
        break
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...