在我想不出如何自己制作一个井字游戏的棋盘之后,我从另一个程序员那里随机发现了一个已经完成的井字游戏程序。
她的做法是:
board = [' ' for _ in range(9)]
def print_board():
for row in [board[i*3:(i+1)*3] for i in range(3)]:
print('| ' + ' | '.join(row) + ' |')
print_board()
输出:
| | | |
| | | |
| | | |
现在,我完全混淆了这里的代码这一部分:
board[i*3:(i+1)*3]
这部分代码的含义是什么?为什么在这种情况下使用它如此重要?
如果您想要了解程序的全部内容或自己尝试:https://github.com/kying18/tic-tac-toe/blob/master/game.py
3条答案
按热度按时间kpbwa7wx1#
请注意,这段代码比实际需要的要复杂得多。
一个等效但更简单的版本是
vyswwuz22#
好吧,让我试着解释一下:
您有一个电路板要表示为2D对象(3x3)
但是,您将此电路板存储为1D列表
idx表示每个元素的索引,所以如果你想一行一行地打印线路板,你需要先打印:
那么
最后
正如您所看到的,起始索引将是
0,3,6
,最终索引将是3,6,9
(因为Python切片从不包括最后一个索引,因此它必须比您实际希望包括的最后一个索引多1个单位)因此我们可以创建一个迭代3次的循环(我们有3行),迭代变量的值为
(0,1,2)
现在,我们必须将
(0,1,2)
转换为起始索引(0,3,6)
,即乘以3,这就是3*i
的来源我们必须将
(0,1,2)
转换为结束索引,也就是(i+1)*3
因此,给定循环迭代的切片必须是
board[i*3:(i+1)*3
,这就是代码中的切片您可以将棋盘表示为列表的列表,并具有两个索引,而不是1D列表:一个用于行,一个用于列
nhhxz33t3#
Link to flawless code
工作委员会
如有任何疑问,请联系。