如何使我的号码牌从1开始,到9结束,并排列成3排



我正试图从"12初级Python项目-编码课程";在FreeCodeCamp Youtube频道上,我真的不明白这个代码是用来为Tic-Tac-Toe项目打印板的。我看过其他一些视频,我不喜欢他们如何设置董事会。在我看视频之前,我关于如何解决这个问题的第一个想法失败了,所以我用她的代码来生成董事会,但我实际上不明白它在做什么。

使用代码:

number_board = [[str(i) for i in range(j*3, (j+1)*3)] for j in range(3)]
for row in number_board:
print('[' + ']['.join(row) + ']')

具有输出:

[0][1][2]
[3][4][5]
[6][7][8]

我希望它的输出基本相同,除了从1开始到9结束,我不明白的部分是:(j*3,(j+1(*3(]对于范围(3(中的j

我知道最后的范围(3(决定了有多少行,如果我把它改为5,它将是5行,然后增加到14行。我以为我理解了";开始:停止:步骤";概念,但当我将开始更改为(j*3+1,(j+1(*3(]时,输出为:

[1][2]
[4][5]
[7][8]

我认为这是因为停止加不到10,但如果我把它改成[[str(I(for I in range(j*3+1,10(]for j in range(3(],它从1开始,但没有在我想要的地方结束。我尝试了一堆不同的组合来得到我想要的,但即使我猜到了正确的组合,我仍然不知道它为什么有效。

[1][2][3][4][5][6][7][8][9]
[4][5][6][7][8][9]
[7][8][9]

也许我错过了一些非常明显的东西,因为这是我学习的第一个月,所以如果这是一个明显的问题,我很抱歉,但我只是不明白开始:停止:步骤修饰符是如何工作的(甚至不确定它们是否被称为修饰符或它们的正确名称是什么(

这种类型的循环在python中被称为列表综合。做一个简短的搜索,你会得到很多关于他们的信息。代码中发生的事情实际上与以下内容相同:

number_board = []
for j in range(3):
board_row = []
for i in range(j*3, (j+1)*3):
board_row.append(str(i))
number_board.append(board_row)
for row in number_board:
print('[' + ']['.join(row) + ']')

所以第一个代码迭代3行对于每一行,它需要生成3个数字。这些数字由range(j*3, (j+1)*3)决定。所以

  • 当j=0时,数字介于0和3之间
  • 当j=1时,数字在3和6之间

请查看python范围文档如文件所述,范围的格式为range(start, stop, step)

一旦创建了电路板,就用另一个用于回路的电路板打印出来

最新更新