Я довольно новичок в кодировании и использую Python. На онлайн-уроке я создаю минимаксную функцию, чтобы попытаться запрограммировать AI на игру в Connect 4. Следующий код составляет функцию оценки, позволяющую определить, есть ли у игрока «X» и игрока «O» «две полосы» (в пока одно направление) путем подсчета того, имеет ли фигура в столбце справа от нее, на данной позиции на доске, тот же символ.
def my_evaluate_board(board):
if has_won(board, "X"):
return float("Inf")
elif has_won(board, "O"):
return -float("Inf")
else:
x_two_streak = 0
o_two_streak = 0
for col in range(len(board)-1):
for row in range(len(board[0])):
if board[col][row] == "X" and board[col + 1][row] == "X":
x_two_streak += 1
for col in range(len(board)-1):
for row in range(len(board[0])):
if board[col][row] == "O" and board[col + 1][row] == "O":
o_two_streak += 1
return x_two_streak - o_two_streak
Я понимаю, что в для l oop:
for col in range(len(board)-1):
-1 имеет место, потому что код ищет справа от каждого столбца поиск двух фрагментов подряд, и это препятствует тому, чтобы l oop пытался искать справа от последний столбец.
Что я не понимаю, так это то, почему добавление индекса в следующей строке кода делает то, что делает:
for row in range(len(board[0])):
В другом месте моего скрипта я Я напечатал вывод этой строки, с индексом и без него, но независимо от того, какой индекс я поставил, я получаю один и тот же результат. Доска имеет 7 столбцов, каждый с 6 рядами. См. Ниже:
print(range(len(new_board[0])))
# this returns: range(0, 6)
print(range(len(new_board)))
# this prints: range(0, 7)
и чтобы продемонстрировать, что я имею в виду, значение индекса не имеет значения:
print(range(len(new_board[4])))
# this prints: range(0, 6)
Я полагаю, что цель этого состоит в том, чтобы уменьшить количество раз функция перебирает строки на 1, потому что на 1 строк меньше, чем столбцов.
Может, кто-нибудь объяснит, почему добавление индекса в для l oop заставляет функцию вести себя таким образом?