我似乎无法弄清楚应该如何进行垂直移动 我的木板是一个嵌套列表,由6个元素组成的列表组成。
我能够弄清楚自己的水平以及对角线获胜的条件。但是我不能把头缠在垂直的头上
例如,这是我的水平状态
add
这里要检查玩家在同一行中是否有4个相同元素,才能称其为获胜。 我期望垂直条件要做的是检查同一列中是否有4个相同的检查器
看一下可能会很痛苦,但请记住,我刚开始使用python,并且开始了解基本知识。
我并不是真正要求黑白代码,而是向正确的方向推
如有必要,我很乐意提供任何进一步的信息!预先谢谢你!
编辑: 这有点晚了,但我想为其他遇到与我相同的问题的人提供帮助。我最终通过以下解决了我的问题:
#the list itself
board = [
[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0],
]
def hor_condition(board, player):
"""the hor_condition checks whether the list contains necessary amount of checkers in order to call it a win"""
for row in board:
for cell in row:
if row.index(cell) < 2:
check_list = [row[row.index(cell)],
row[row.index(cell) + 1],
row[row.index(cell) + 2],
row[row.index(cell) + 3]
]
if check_list[0] == player and\
check_list[1] == player and \
check_list[2] == player and \
check_list[3] == player:
return True
答案 0 :(得分:0)
您可以通过for col in board
一种方式进行迭代:
for col_index in range(6):
col = [row[col_index] for row in board]
for i in range(len(col) - 4 + 1):
if all(col[i + j] == player for j in range(4)):
return True
由于您无法直接遍历行,因此请使用索引计数器(在这种情况下为range(6)
)进行遍历,并且每次都拉出每行的第n个元素来构造列。
我还建议对您的代码进行少量修改:
在继续写row.index(cell)
的地方,这是一个繁重的计算,因此只需将其计算一次并将其存储在变量中,这样您就可以重复使用结果,而不必在容易存储的情况下连续重新计算结果它。
要使其变得更好,请使用内置的all
,它提供一个可迭代的函数,如果所有元素都为true,则返回true。
此外,此后您只需要检查6-4 + 1(= 3)次。...
此后,由于行(和列)中没有第7个单元格,因此不再可用。我包含在代码中的计算公式为:
len(row) - len(what’s being checked) + 1