python 如何使我的号码板开始在1结束在9和安排自己在3行

bvuwiixz  于 2022-10-30  发布在  Python
关注(0)|答案(1)|浏览(116)

我试图理解这个代码从“12初学者Python项目-编码课程”上的FreeCodeCamp Youtube频道,我真的不明白这个代码打印一个董事会的井字游戏项目。我已经看了一些其他的视频,我不喜欢他们如何设置他们的董事会。在我看视频之前,我关于如何解决这个问题的第一个想法失败了,所以我用她的代码来生成电路板,但我实际上不明白它在做什么。
使用代码:

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行。我认为我理解了“开始:stop:step”概念,但当我将start改为(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]

也许我错过了一些很明显的东西,因为这是我学习的第一个月,所以我道歉,如果这是一个明显的问题,但我只是不明白如何开始:stop:step修饰符起作用(甚至不确定它们是否被称为修饰符或者它们的正确名称是什么)

0g0grzrc

0g0grzrc1#

这种类型的循环在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)
一旦创建了电路板,就会用另一个for循环输出它

相关问题