【发布时间】:2018-06-23 22:33:56
【问题描述】:
我正在创建一个游戏。在游戏中,我有一个以 0 开头的 numpy 数组(正方形)。玩家通过将分配的整数添加到某个位置来填充数组。玩家用自己的号码填满整行、整列、对角线或反对角线 (?) 即可赢得游戏。目前这是我检查游戏成功的函数。
我有两个问题: 1. 我希望该函数检查所有玩家是否成功并返回一个元组(即,如果玩家 2 获胜,则返回一个元组(即 (True,2))而不是一次返回一个。游戏的运作方式,永远不会有两个玩家获胜,所以这不是问题。我将有一个可以传递给函数的所有玩家的列表(即 4 个玩家的 [1,2,3,4])。 2. 我不想要一个“for”循环,因为我想多次迭代。
我一直在努力使用 numpy 中的逻辑运算符,但我不想将其更改为列表或其他任何内容。
def check_success(gm,player): #gm is game array
for i in range(len(gm)):
if (not any(gm[i]-player)) or (not any(gm[:,i]-player)):
return True
if (not any(np.diag(gm)-player)) or (not any(np.diag(np.fliplr(gm))-player)):
return True
return False
注意:我怀疑如果没有 for 循环,问题 #1 就无法解决。如果是这样的话,我更喜欢解决问题 #2。我总是可以多次运行这个函数,因为玩家的数量肯定会比gm的大小少很多。
【问题讨论】:
-
在描述中你提到了非对角线,但你的代码似乎只解决了两个主要的对角线。你能澄清一下吗?
-
抱歉,我错误地使用了非对角线这个词。我想我的意思是对角线和对角线。代码是正确的,不是解释。
-
感谢您的澄清。在那种情况下,我的回答应该没问题。让我知道它是否适合您。
标签: python list numpy integer logic