提问人:Hanh Nguyen 提问时间:11/3/2023 最后编辑:Hanh Nguyen 更新时间:11/5/2023 访问量:83
未能通过某些 Gomoku/Caro 游戏测试用例
Fail to pass some Gomoku/Caro game test cases
问:
这是个问题: 五子棋或卡罗是一种棋盘游戏,每个玩家交替放置一块他颜色的石头 电路板的空交叉点。如果玩家是第一个创造的玩家,则他赢得了游戏 (i) 一条完整的线(水平、垂直或对角线)正好是五颗石头,以及 (ii) 这个 线路的两端都没有被其他玩家的石头挡住。 我们可以使用嵌套的 Python 列表来表示游戏的状态,如下例所示 由 [[“”, “b”, “”, “”], [“”, “b”, “w”, “”], [“”, “”, “”, “]] 其中 ”“, ”b“, ”w” 表示空交点、黑石交点和白石交点 分别。 由 [[“”, “”, “”, “”, “”, “”], [“”, “b”, “w”, “”, “”, “”], [“”, “”, “b”, “”, “”], [“”, “”, “”, “w”, “”, “”]] 在这个家庭作业中,你的目标是检查谁是给定游戏状态的赢家。更多 具体来说,您的任务是编写一个名为“get_winner”的函数,该函数获取嵌套列表 表示 Gomoku/Caro 游戏状态,如果 黑石玩家是赢家,白石玩家是赢家,其他没有赢家 分别。在这里,我们假设没有两个玩家都是赢家的情况。 这是我在 Gradescope 上的案例测试结果:我通过了给定问题中的所有测试用例,但未能通过上述问题中未提及的这 2 个测试用例
测试 10 (0/2) 测试失败: 'black' != 'none' -黑 +无
测试 11 (0/2) 测试失败: 'none' != 'black' -没有 +黑色
我不知道为什么我失败了这些测试用例,这些测试用例是什么,因为 Gradescope 隐藏了它们。我的代码是否满足问题的所有要求,为什么我失败了这两种情况?是否有任何情况是我的代码没有满足这个五子棋游戏的所有可能情况,请帮我弄清楚这种情况,如果可能的话修改代码。
答:
(ii) 这条线的两端没有被另一方玩家的石头挡住。
这似乎是问题所在,您的程序只检查线路是否在两端被其他玩家挡住。
例:
print(get_winner([
["w", " ", " ", " ", " ", " ", " "],
[" ", "b", " ", " ", " ", " ", " "],
[" ", " ", "b", " ", " ", " ", " "],
[" ", " ", " ", "b", " ", " ", " "],
[" ", " ", " ", " ", "b", " ", " "],
[" ", " ", " ", " ", " ", "b", " "],
[" ", " ", " ", " ", " ", " ", " "],
[" ", " ", " ", " ", " ", " ", " "]
]))
w
在行的一端,所以这应该是,但相反,你的程序说黑方赢了。
(如果水平或垂直尝试,则此示例会得到相同的结果。none
编辑:
对角线检查也无法按预期工作
print(get_winner([
["b", " ", " ", " ", " ", " ", " "],
[" ", "b", " ", " ", " ", " ", " "],
[" ", " ", "b", " ", " ", " ", " "],
[" ", " ", " ", "b", " ", " ", " "],
[" ", " ", " ", " ", "w", " ", " "],
[" ", " ", " ", " ", " ", "b", " "],
[" ", " ", " ", " ", " ", " ", "w"],
[" ", " ", " ", " ", " ", " ", " "]
]))
这当然应该说,但相反,黑色是赢家,这违反了这两条规则
,这只发生在对角线上none
评论
print
print
评论