我有一个编程单元的作业,要求这样做:
根据以下规范,创建代表黑白棋规则的封闭函数(木板,玩家,位置,直接)。
电路板位置由一对(r,c)表示,其中r和c均为该范围内的整数 range(8)分别代表行索引和列索引。例如,位置\ b3“为 由(2,1)表示。 \ b3“样式的行和列顺序以及位置的指定 是相反的。这是因为以外部列表的方式构造列表列表是很自然的 对应于行,而内部列表位置对应于列位置,因此我们引用它们 先行,然后是列。此行,列约定在数学和计算机中非常常见 科学。
方向由一对(dr,dc)表示,其中dr和dc分别是集合f-1、0, 1克例如,“水平向左”用(0,-1)描述,“对角向右和向下”是 (由(1,1)等描述)。
封闭函数(board,player,pos,dir)表示是否在上面放一块石头 给定位置将沿给定方向包围对手的石头的直线:
输入:棋盘配置板,集合f1、2g中的整数播放器,棋盘位置pos和方向dir。
输出:如果板包含位置pos和所有位置的dir方向的玩家石头,则为true 在那个石头和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上有大约一个月的经验。
答案 0 :(得分:0)
您编辑中的代码看起来不错,这正是我的意思。祝项目其余部分一切顺利!
一些极端情况:
board[newpos[0]][newpos[1]]
将超出范围XOOOOX
的情况下,您的函数将返回True,这不是Othello规则捕获的(不确定您的分配是否对它进行了不同的定义我强烈建议编写一些简单的测试,以确保您的代码正常工作。他们不需要涵盖所有案件,也不必是全部案件。它通常不是必需的,但是使评估更容易:只需单击“运行”,而不是尝试通过代码推理。
这里是一个示例:
def test():
assert enclosing([[0, 0, 0], [0,0,0],[0,1,2]], 1, (0,2), (1,1)) == True