有一段代码,其中有很多条件,每个条件都可能导致错误(超出数组范围)。如果发生错误时(例如,在其中第二个),如何检查所有条件,检查其余的停止?
def LoseCheck(x,y,_matrix,k): #проверка, является ли ход проигрышным
try:
if (
_matrix[x-2][y] == _matrix[x-1][y] == _matrix[x][y] == 1
or _matrix[x][y] == _matrix[x+1][y] == _matrix[x+2][y] == 1
or _matrix[x-1][y] == _matrix[x][y] == _matrix[x+1][y] == 1
or _matrix[x][y-2] == _matrix[x][y-1] == _matrix[x][y] == 1
or _matrix[x][y] == _matrix[x][y+1] == _matrix[x][y+2] == 1
or _matrix[x][y-1] == _matrix[x][y] == _matrix[x][y+1] == 1
or _matrix[x-2][y+2] == _matrix[x-1][y+1] == _matrix[x][y] == 1
or _matrix[x][y] == _matrix[x+1][y-1] == _matrix[x+2][y-2] == 1
or _matrix[x-1][y+1] == _matrix[x][y] == _matrix[x+1][y-1] == 1
or _matrix[x-2][y-2] == _matrix[x-1][y-1] == _matrix[x][y] == 1
or _matrix[x][y] == _matrix[x+1][y+1] == _matrix[x+2][y+2] == 1
or _matrix[x-1][y-1] == _matrix[x][y] == _matrix[x+1][y+1] == 1
):
if k%2 == 0:
print("Второй игрок проиграл!")
return 1
else:
print("Первый игрок проиграл!")
return 1
return 0
except:
pass
避免索引超出数组限制的错误。您可以对值进行标准化,然后使用该条件。
这是一个例子:
使用示例:
此代码无需使用
try-except(但如果您这样做,try-except请不要留下空块except)所以数字的范围是从
2到7。如果您进行加/减,这些数字不会超出数组的边界2。好吧,如果您不想让函数变得混乱,您可以将条件放入单独的函数中。
例如这样:
这是最终的函数:
这个函数稍微修改一下,返回一个带有值的元组
завершена ли игра,игрока который победил如果完成好吧,您可以修改条件代码,例如,还传输非标准化坐标,并且由于它们,要做更少的检查(好吧,您自己决定什么更方便)
游戏字段作为列表的列表
在解决这个问题之前,你需要确定对象是什么
_matrix。如果这是列表的列表,那么除了明显的错误之外,IndexError: list index out of range在寻址具有负索引的单元格时还会出现隐藏的算法错误。对于列表,允许负索引,但对于任务则不允许。在这种情况下,我们需要重新定义该类,
list以便它可以在无效索引的情况下正常工作。例如:为了能够使用嵌套列表,此处返回一个空列表
Line()。因此,当任何索引超出该字段时,我们将得到一个Line() == 1可以正常工作的比较,并返回预期的结果False。_matrix我们像这样启动游戏环境:现在
LoseCheck我们可以按原样使用该函数,尽管try ... except应该删除框架(这没有意义)。比赛场地就像一本字典中的字典
或者,我们可以使用字典。例如:
在这种情况下,不需要启动该字段;该字段在访问单元时被填充。当索引超出字段时,自动返回零。通过这个对象,我们可以使用没有维度的函数
LoseCheck。LoseCheck 的替代方案
为了避免覆盖对象
_matrix,我们可以LoseCheck通过限制对字段的查询到有效索引来重写它: