嵌套循环只循环一次

时间:2021-07-06 11:04:47

标签: python python-3.x

我正在尝试为游戏板制作遮罩。 mask 始终与 revealed 具有相同的维度。如果掩码为 False,则显示“_”而不是当前状态。

mask = [[False, True, False, False],[False, False, False, False]]
revealed = [['.', '3', '1', ' '],['.', '.', '1', ' ']]

def hide(revealed):
    for i, outer in enumerate(mask):
        for j, inner in enumerate(outer): 
            if inner == False: 
                revealed[i][j] = '_'
                return revealed

print(hide(revealed))

预期:

[['_', '3', '1', '_'], ['_', '_', '1', '_']]

得到:

[['_', '3', '1', ' '], ['.', '.', '1', ' ']]

3 个答案:

答案 0 :(得分:2)

return 关键字用于标记函数的结束。由于 return 在循环内,所以它在退出函数之前只迭代一次。

mask = [[False, True, False, False],[False, False, False, False]]
revealed = [['.', '3', '1', ' '],['.', '.', '1', ' ']]

def hide(revealed):
    for i, outer in enumerate(mask):
        for j, inner in enumerate(outer): 
            if inner == False: 
                revealed[i][j] = '_'
    return revealed

print(hide(revealed))

答案 1 :(得分:0)

如果您对 numpy 满意,这里有一个紧凑的解决方案:

import numpy as np

mask = [[False, True, False, False],[False, False, False, False]]
revealed = [['.', '3', '1', ' '],['.', '.', '1', ' ']]

nmask = np.array(mask)
nrevealed = np.array(revealed)

hidden = np.full_like(nrevealed, '_')
hidden[nmask] = nrevealed[nmask]

# hidden is now:
#  array([['_', '3', '_', '_'],
#         ['_', '_', '_', '_']], dtype='<U1')

答案 2 :(得分:-1)

if inner == False: 
    revealed[i][j] = '_'
    return revealed

在第一次评估为真后返回显示的变量,因此不会检查数组中的所有项目。将 return 语句移出两个循环之外,以便它可以在数组中的所有项目内进行迭代。

相关问题