混淆下面的代码,如你所见,在另一个循环中有一个循环,我从stackoverflow检查了类似的答案,但仍然没有得到它......
grid = [
['.', '.', '.', '.', '.', '.'],
['.', 'O', 'O', '.', '.', '.'],
['O', 'O', 'O', 'O', '.', '.'],
['O', 'O', 'O', 'O', 'O', '.'],
['.', 'O', 'O', 'O', 'O', 'O'],
['O', 'O', 'O', 'O', 'O', '.'],
['O', 'O', 'O', 'O', '.', '.'],
['.', 'O', 'O', '.', '.', '.'],
['.', '.', '.', '.', '.', '.']]
for x in range(len(grid)):#0, 1, 2, 3, 4, 5, 6, 7, 8
for y in range(len(grid[0])):#0, 1, 2, 3, 4, 5
print(grid[x][y], end='')
print('')
我期待输出如下:
..OO.OO..
.OOOOOOO.
.OOOOOOO.
..OOOOO..
...OOO...
....O....
但实际上结果是:
......
.OO...
OOOO..
OOOOO.
.OOOOO
OOOOO.
OOOO..
.OO...
......
双循环的规定是什么?
答案 0 :(得分:2)
你只需查看大列表中每个列表中的索引。 如果您希望输出符合您的要求,则需要更改
print(grid[x][y], end='')
到
print(grid[y][x], end='')
答案 1 :(得分:2)
您当前的循环首先选择列表中的第一个元素,这是一个仅包含点的列表,然后浏览并打印。您需要更改它,以便选择每个列表的第一个元素,然后选择每个列表中第二个位置的每个元素。
grid = [['.', '.', '.', '.', '.', '.'],
['.', 'O', 'O', '.', '.', '.'],
['O', 'O', 'O', 'O', '.', '.'],
['O', 'O', 'O', 'O', 'O', '.'],
['.', 'O', 'O', 'O', 'O', 'O'],
['O', 'O', 'O', 'O', 'O', '.'],
['O', 'O', 'O', 'O', '.', '.'],
['.', 'O', 'O', '.', '.', '.'],
['.', '.', '.', '.', '.', '.']]
for x in range(len(grid[0])):#0, 1, 2, 3, 4, 5, 6, 7, 8
for y in range(len(grid)):#0, 1, 2, 3, 4, 5
print(grid[y][x], end='')
print('')
像这样。在print
命令中交换了x和y,并对其进行了更改,以使for
范围正确。对于双循环,它首先在第一个循环中选择x
值,然后认为是一个具有y
值和常量x
值的循环。然后,它会选择下一个x
值,并再次执行包含所有y
值的循环。
输出:
..OO.OO..
.OOOOOOO.
.OOOOOOO.
..OOOOO..
...OOO...
....O....
答案 2 :(得分:1)
它进入外部循环,然后进入内部循环。当它完成这个内循环时,它会回到外循环,再次进入内循环。这将重复,直到完成外循环。
所以基本上它只完成一次外循环,但是在外循环中完成内循环*迭代次数*次。
查看你的代码,通过循环内部循环得到grid [0] [y],其中y
是内部循环变量,然后执行grid [1] [y],然后是grid [2 ] [y],依此类推......这样做x
次。 x
和y
这里是您的网格尺寸。
编辑:要让它显示您想要的方式,只需交换x
和y
...就像这样:grid [y] [x]
答案 3 :(得分:0)
只需翻转两个循环(y和x):
for x in range(len(grid)):#0, 1, 2, 3, 4, 5, 6, 7, 8
for y in range(len(grid[0])):#0, 1, 2, 3, 4, 5
print(grid[y][x], end='')
print('')
如果你注意到,你的心 出现了,它只是旋转了90度。
我喜欢将r
和c
变量用于这些类型的循环,其中r
代表行,c
代表列。使理解逻辑变得更容易。