我有一个编程单元的任务,要求这个:根据以下规范创建表示黑白棋规则的函数 enclosure(board, player, pos, direct)。棋盘位置由一对 (r, c) 表示,其中 r 和 c 分别是范围 range(8) 中的整数,分别表示行索引和列索引。例如,位置\b3" 用(2, 1) 表示。\b3" 样式的行和列顺序和位置的规范是相反的。这是因为以这样的方式构造列表列表是很自然的,即外部列表对应于行,内部列表位置对应于列位置,所以我们先行引用它们,然后是列。这一行、列约定在数学和计算机科学中很常见。方向由一对 (dr, dc) 表示,其中 dr 和 dc 分别是集合 f-1, 0, 1g 中的整数。例如,\horizontal to the left"由(0, -1)描述,\diagonal to the right and down"由(1, 1)描述,依此类推。函数 enclosure(board, player, pos, dir) 表示将玩家的棋子放在给定位置是否会在给定方向上包围一条直线:输入:棋盘配置棋盘,来自集合 f1, 2g 的整数玩家,棋盘位置 pos 和方向 dir。输出:如果棋盘包含从位置 pos 方向为 dir 的玩家的棋子,并且该棋子和 pos 之间的直线上的所有位置都包含其他玩家的棋子,并且直线上至少有一颗属于其他玩家的棋子,则为真线; 否则为假。这就是我所拥有的:def enclosing(board, player, pos, direct): if player == 1: a = direct[0] b = direct[1] i = 1 while i < 8: newpos = (pos[0] + i*a , pos[1] + i*b) if board[newpos[0]][newpos[1]] == 1: return True elif board[newpos[0]][newpos[1]] == 2: i = i + 1 else: return False还要记住,这是一门初学者课程,我有大约一个月的 Python 经验。
1 回答
慕标5832272
TA贡献1966条经验 获得超4个赞
您编辑中的代码看起来不错,这就是我所得到的。祝项目的其余部分好运!
几个边缘情况:
board[newpos[0]][newpos[1]]
会越界在这种情况下
XOOOOX
,您的函数将返回 True ,这不是黑白棋规则的捕获(不确定您的赋值是否以不同方式定义它
我强烈建议您编写几个简单的测试,以确保您的代码正常工作。他们不需要涵盖所有案例,也不需要成为全董事会。它通常不是必需的,但更容易评估:只需点击“运行”,而不是试图通过您的代码进行推理。
下面是一个例子:
def test(): assert enclosing([[0, 0, 0], [0,0,0],[0,1,2]], 1, (0,2), (1,1)) == True
添加回答
举报
0/150
提交
取消