python - 如何比较Python中不同列表的第n个元素?
问题描述
我正在制作一个井字游戏,其中输入决定了棋盘的大小(让它变得有趣)。有两个玩家,玩家 1 使用 X,玩家 2 使用 O 来标记他们在棋盘上的位置。
3 x 3 板的代码如下所示:(我想将板制作代码替换为一些硬编码较少的东西,但我现在很好,这不是问题,这只是为了澄清)
grid = "- - -\n- - -\n- - -"
print(grid)
listed_grid = list(grid)
while "\n" in listed_grid:
listed_grid.remove("\n")
while " " in listed_grid:
listed_grid.remove(" ")
listed_grid = [listed_grid[n: n + 3] for n in range(0, len(listed_grid), 3)]
print(listed_grid)
所以基本上我有 x 个相同长度的列表(x 也由输入和长度决定)。这些列表代表棋盘的行。(我知道在上面的代码中它没有被决定为输入)
我希望代码打印一条消息,上面写着“恭喜!玩家 A(1 或 2)赢了!!!” 当对于每个列表时,每个列表的第 n 个元素都是相同的。实际上,在这种情况下,有一整列被相同的标记类型(X 或 O)占据。
因此,如果列表“listed_grid”是经典的 3x3 游戏,则每行有 3 个子列表。我该如何做到这一点,对于“listed_grid”中子列表中的每个第 n 个元素,如果标记相同而不是“-”(连字符),因为连字符只是向玩家显示该位置没有被占用,它会打印一个祝贺谁赢了?
非常感谢!请对我放轻松,我在 Python 方面仍然很糟糕。
解决方案
要检查您可以使用的列zip()
,这将为您提供tuple
包含这些列的 s 列表。您可以将结果插入set()
并检查是否只有一个元素并且它不是-
for col in zip(*listed_grid):
s = set(col)
if len(s) == 1:
x = s.pop()
if x != '-':
print(f'Congratulations! Player {x} won!!!')
或者,如果您使用 Python 3.8 或更新版本,您可以使用赋值表达式 :=
for col in zip(*listed_grid):
s = set(col)
if len(s) == 1 and (x := s.pop()) != '-':
print(f'Congratulations! Player {x} won!!!')
输出:
grid = "- Y -\nX Y -\nX Y -"
# Congratulations! Player Y won!!!
grid = "X Y -\nX Y -\nX - -"
Congratulations! Player X won!!!
推荐阅读
- prolog - 规则 CLIPS 到 PROLOG
- java - 使用 replaceall() 删除任何与模式不匹配的字符串
- f# - 改进我的牛顿方法的 F# 实现以找到根源
- android - 在搜索栏中的两个连续进度点之间添加平滑动画
- java - 将图标添加到 viewPager 内的选项卡
- java - IntelliJ 2018.3 CE 中的测试运行器选项卡未显示
- macros - 当内部宏接受参数时,如何定义定义另一个宏的宏?
- c# - configuration.getValue 或 configuration.getsection 总是返回 null
- windows - 运行 Gradle 应用程序分发时的编码问题
- c++ - 在配置脚本名称中查找具有指定版本的包