如何在布尔表达式中使用for循环?

时间:2019-10-22 17:31:14

标签: python loops boolean

我需要遍历嵌套列表并检查#在列表中的位置。我正在使用NWES(北,西,东,南)坐标。因此W应该返回False(因为#在那个位置),E应该是True,而S也应该是True。我想遍历每个字母并为每个字母获取布尔表达式。问题是我对W的判断为False,而忽略了E和S。 不知道是否存在缩进问题或其他问题。

def something(can_mine, moves) -> bool:
    """"""
    for i in range(len(can_mine)):
        for j in range(len(can_mine[0])):
            for k in moves:

                if can_mine[j][-1] == '#' and k == 'E':
                    return False
                    #
                elif can_mine[j][0] == '#' and k == 'W':
                    return False
                    # N works
                elif can_mine[0][j] == '#' and k == 'N':
                    return False
                    # S works
                elif can_mine[-1][j] == '#' and k == 'S':
                    return False
                else:

                    return True


if __name__ == '__main__':
    print(something([['#', '.', '.', 'x'], ['.', '.', 'x', '.'], ['.', '.', 'X', 's'], ['.', '.', 'x', 'x']], 'WES' ))

What i need is something like that:
False
True
True
What I get is:
False (which is ok)
False (should be True)
False ( should be True)

1 个答案:

答案 0 :(得分:1)

您的问题不太清楚,但是据我所知并阅读了您的代码,我只说了几句:

  1. 您不需要3个嵌套的for循环,而需要2,一个循环用于moves,一个循环的大小为can_mine
  2. 您不能从具有1个布尔值的函数返回,并且如果不将其保存在任何地方并返回而不是1个布尔值,则期望它返回3。
  3. 您的moves循环应该是第一个,因为它将与您的输出匹配->如果您进行m个移动,那么您的输出将有m个布尔值
  4. 注意,我将输出向量初始化为大小为True的{​​{1}}向量,这与以下事实直接相关:默认情况下,除非您输入了返回m的条件之一

我编辑了代码以匹配您指定的输出,请参阅阅读并向自己解释为什么您的代码无法按您希望的那样工作。

代码:

True

输出:

  

[False,True,True]