我正在尝试为游戏板制作遮罩。 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', ' ']]
答案 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 语句移出两个循环之外,以便它可以在数组中的所有项目内进行迭代。