将4个问题与垂直获胜条件联系起来

时间:2018-11-16 18:13:20

标签: python list if-statement

我似乎无法弄清楚应该如何进行垂直移动 我的木板是一个嵌套列表,由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

1 个答案:

答案 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)次。...

  • 第一张支票涵盖第一至第四张
  • 第二次检查2-5th
  • 第三次检查3-6th

此后,由于行(和列)中没有第7个单元格,因此不再可用。我包含在代码中的计算公式为:

len(row) - len(what’s being checked) + 1