【问题标题】:How to use for loop with boolean expression?如何使用带有布尔表达式的for循环?
【发布时间】:2023-03-13 08:22:01
【问题描述】:

我需要遍历嵌套列表并检查 # 在列表中的位置。我正在使用 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)

【问题讨论】:

  • 你能把那个问题的链接分享给我吗,因为我看到的代码无法理解你的问题。请分享你从哪里得到这个东西的问题的链接。
  • 此代码是我现在正在处理的学校任务的更大代码的一部分。基本上我无法理解为什么在迭代后它会记住 False 并忽略它是否为 True。
  • 所以你想遍历每个嵌套数组并按照moves检查条件,对吧?

标签: python loops boolean


【解决方案1】:

你的问题不是很清楚,但我能够理解它并阅读你的代码,我有几句话:

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

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

代码:

def something(can_mine, moves):
    """"""
    m = len(can_mine[0])
    res = [True for i in range(len(moves))]
    for idx, k in enumerate(moves):
        for j in range(m):
            if can_mine[j][-1] == '#' and k == 'E':
                res[idx] = False
                #
            elif can_mine[j][0] == '#' and k == 'W':
                res[idx] = False
                # N works
            elif can_mine[0][j] == '#' and k == 'N':
                res[idx] = False
                # S works
            elif can_mine[-1][j] == '#' and k == 'S':
                res[idx] = False
    return res


if __name__ == '__main__':
    mine = [['#', '.', '.', 'f'], ['.', '.', 'N', '.'], ['.', '.', 'X', 's'], ['.', '.', 'j', 'X']]
    moves = 'WES'
    print(something(mine, 'WES'))

输出:

[假,真,真]

【讨论】:

    猜你喜欢
    • 2013-08-09
    • 2017-09-12
    • 2014-08-17
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    相关资源
    最近更新 更多