【发布时间】:2020-04-03 10:29:06
【问题描述】:
我对编码很陌生,并且正在使用 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
我明白在for循环中:
for col in range(len(board)-1):
-1 已就位,因为代码在每一列的右侧查找一行中的两个部分,这可以防止循环尝试查找最后一列的右侧。
我不明白为什么在下一行代码中添加索引正在做它正在做的事情:
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。
请有人解释一下为什么在 for 循环中添加索引会导致函数出现这种行为?
【问题讨论】:
标签: python for-loop indexing range